use of dyvilx.tools.compiler.ast.structure.Package in project Dyvil by Dyvil.
the class NamedGenericType method resolveWithParent.
private IType resolveWithParent(MarkerList markers) {
final IClass theClass = this.parent.resolveClass(this.name);
if (theClass != null) {
final IType classType = theClass.getThisType();
return this.checkCount(markers, theClass, "class", classType);
}
final Package thePackage = this.parent.resolvePackage(this.name);
if (thePackage != null) {
markers.add(Markers.semanticError(this.position, "type.generic.package.not_generic", thePackage.getName()));
return new PackageType(thePackage).atPosition(this.position);
}
markers.add(Markers.semanticError(this.position, "resolve.type.package", this.name, this.parent));
return this;
}
use of dyvilx.tools.compiler.ast.structure.Package in project Dyvil by Dyvil.
the class NamedGenericType method resolveTopLevelWith.
private IType resolveTopLevelWith(MarkerList markers, IContext context) {
final MatchList<ITypeAlias> typeAliases = IContext.resolveTypeAlias(context, null, this.name, this.arguments);
if (typeAliases.hasCandidate()) {
final ITypeAlias typeAlias = typeAliases.getBestMember();
final IType aliasType = typeAlias.getType();
if (!aliasType.isResolved()) {
markers.add(Markers.semanticError(this.position, "type.alias.unresolved", this.name));
return aliasType.atPosition(this.position);
}
return this.checkCount(markers, typeAlias, "type_alias", aliasType);
}
final IClass theClass = context.resolveClass(this.name);
if (theClass != null) {
final IType classType = theClass.getThisType();
return this.checkCount(markers, theClass, "class", classType);
}
final ITypeParameter typeParameter = context.resolveTypeParameter(this.name);
if (typeParameter != null) {
markers.add(Markers.semanticError(this.position, "type.generic.type_parameter.not_generic", typeParameter.getName()));
return new ResolvedTypeVarType(typeParameter, this.position);
}
final Package thePackage = context.resolvePackage(this.name);
if (thePackage != null) {
markers.add(Markers.semanticError(this.position, "type.generic.package.not_generic", thePackage.getName()));
return new PackageType(thePackage).atPosition(this.position);
}
return null;
}
use of dyvilx.tools.compiler.ast.structure.Package in project Dyvil by Dyvil.
the class NamedType method resolveTopLevelWith.
private IType resolveTopLevelWith(@SuppressWarnings("UnusedParameters") MarkerList markers, IContext context) {
final MatchList<ITypeAlias> typeAliases = IContext.resolveTypeAlias(context, null, this.name, TypeList.EMPTY);
if (typeAliases.hasCandidate()) {
final ITypeAlias typeAlias = typeAliases.getBestMember();
final IType type = typeAlias.getType();
if (!type.isResolved() && markers != null) {
markers.add(Markers.semanticError(this.position, "type.alias.unresolved", this.name));
return type.atPosition(this.position);
}
return type.getConcreteType(ITypeContext.DEFAULT).atPosition(this.position);
}
final IClass theClass = context.resolveClass(this.name);
if (theClass != null) {
return new ResolvedClassType(theClass, this.position);
}
final ITypeParameter typeParameter = context.resolveTypeParameter(this.name);
if (typeParameter != null) {
return new ResolvedTypeVarType(typeParameter, this.position);
}
final Package thePackage = context.resolvePackage(this.name);
if (thePackage != null) {
return new PackageType(thePackage).atPosition(this.position);
}
return null;
}
use of dyvilx.tools.compiler.ast.structure.Package in project Dyvil by Dyvil.
the class Library method resolvePackage.
public Package resolvePackage(String internal) {
Package pack = this.packages.get(internal);
if (pack != null) {
return pack;
}
if (!this.isSubPackage(internal)) {
return null;
}
int currentIndex = internal.indexOf('/');
if (currentIndex < 0) {
return Package.rootPackage.createSubPackage(internal);
}
String currentPart = internal.substring(0, currentIndex);
pack = Package.rootPackage.createSubPackage(currentPart);
if (pack == null) {
return null;
}
do {
int endIndex = internal.indexOf('/', currentIndex + 1);
if (endIndex < 0) {
endIndex = internal.length();
}
if (endIndex - currentIndex <= 0) {
break;
}
currentPart = internal.substring(currentIndex + 1, endIndex);
pack = pack.createSubPackage(currentPart);
if (pack == null) {
return null;
}
currentIndex = endIndex;
} while (true);
return pack;
}
use of dyvilx.tools.compiler.ast.structure.Package in project Dyvil by Dyvil.
the class NamedType method resolveWithParent.
private IType resolveWithParent(MarkerList markers) {
final IClass theClass = this.parent.resolveClass(this.name);
if (theClass != null) {
return new ResolvedClassType(theClass, this.position);
}
final Package thePackage = this.parent.resolvePackage(this.name);
if (thePackage != null) {
return new PackageType(thePackage).atPosition(this.position);
}
if (markers == null) {
// FieldAccess support
return null;
}
markers.add(Markers.semanticError(this.position, "resolve.type.package", this.name, this.parent));
return this;
}
Aggregations