Search in sources :

Example 1 with ITypeAlias

use of dyvilx.tools.compiler.ast.type.alias.ITypeAlias 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;
}
Also used : ITypeAlias(dyvilx.tools.compiler.ast.type.alias.ITypeAlias) PackageType(dyvilx.tools.compiler.ast.type.raw.PackageType) ResolvedTypeVarType(dyvilx.tools.compiler.ast.type.typevar.ResolvedTypeVarType) ITypeParameter(dyvilx.tools.compiler.ast.generic.ITypeParameter) IClass(dyvilx.tools.compiler.ast.classes.IClass) Package(dyvilx.tools.compiler.ast.structure.Package) IType(dyvilx.tools.compiler.ast.type.IType)

Example 2 with ITypeAlias

use of dyvilx.tools.compiler.ast.type.alias.ITypeAlias 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;
}
Also used : ITypeAlias(dyvilx.tools.compiler.ast.type.alias.ITypeAlias) ResolvedTypeVarType(dyvilx.tools.compiler.ast.type.typevar.ResolvedTypeVarType) ITypeParameter(dyvilx.tools.compiler.ast.generic.ITypeParameter) IClass(dyvilx.tools.compiler.ast.classes.IClass) Package(dyvilx.tools.compiler.ast.structure.Package) IType(dyvilx.tools.compiler.ast.type.IType)

Example 3 with ITypeAlias

use of dyvilx.tools.compiler.ast.type.alias.ITypeAlias in project Dyvil by Dyvil.

the class HeaderContext method resolveTypeAlias.

@Override
public void resolveTypeAlias(MatchList<ITypeAlias> matches, IType receiver, Name name, TypeList arguments) {
    this.header.resolveTypeAlias(matches, receiver, name, arguments);
    if (matches.hasCandidate()) {
        return;
    }
    final ImportDeclaration[] importDeclarations = this.header.importDeclarations;
    for (int i = 0; i < this.header.importCount; i++) {
        final IImportContext importContext = importDeclarations[i].getContext();
        final MatchList<ITypeAlias> subList = matches.emptyCopy();
        importContext.resolveTypeAlias(subList, receiver, name, arguments);
        matches.addAll(subList);
    }
}
Also used : ITypeAlias(dyvilx.tools.compiler.ast.type.alias.ITypeAlias) IImportContext(dyvilx.tools.compiler.ast.imports.IImportContext) ImportDeclaration(dyvilx.tools.compiler.ast.imports.ImportDeclaration)

Aggregations

ITypeAlias (dyvilx.tools.compiler.ast.type.alias.ITypeAlias)3 IClass (dyvilx.tools.compiler.ast.classes.IClass)2 ITypeParameter (dyvilx.tools.compiler.ast.generic.ITypeParameter)2 Package (dyvilx.tools.compiler.ast.structure.Package)2 IType (dyvilx.tools.compiler.ast.type.IType)2 ResolvedTypeVarType (dyvilx.tools.compiler.ast.type.typevar.ResolvedTypeVarType)2 IImportContext (dyvilx.tools.compiler.ast.imports.IImportContext)1 ImportDeclaration (dyvilx.tools.compiler.ast.imports.ImportDeclaration)1 PackageType (dyvilx.tools.compiler.ast.type.raw.PackageType)1