Search in sources :

Example 91 with Type

use of org.eclipse.ceylon.model.typechecker.model.Type in project ceylon by eclipse.

the class ExpressionVisitor method getTypeIgnoringLiteralsAndConstants.

private Type getTypeIgnoringLiteralsAndConstants(Tree.MatchCase mc) {
    Tree.MatchList ml = mc.getExpressionList();
    List<Tree.Expression> es = ml.getExpressions();
    List<Tree.Type> ts = ml.getTypes();
    List<Type> list = new ArrayList<Type>(es.size() + ts.size());
    for (Tree.Expression e : es) {
        Type tm = e.getTypeModel();
        if (tm != null) {
            Tree.Term term = e.getTerm();
            if (isEnumCase(term)) {
                addToUnion(list, tm);
            }
        }
    }
    for (Tree.Type t : ts) {
        Type tm = t.getTypeModel();
        if (tm != null) {
            addToUnion(list, tm);
        }
    }
    return union(list, unit);
}
Also used : ModelUtil.intersectionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.intersectionType) ModelUtil.unionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.unionType) AnalyzerUtil.spreadType(org.eclipse.ceylon.compiler.typechecker.analyzer.AnalyzerUtil.spreadType) AnalyzerUtil.getTupleType(org.eclipse.ceylon.compiler.typechecker.analyzer.AnalyzerUtil.getTupleType) Type(org.eclipse.ceylon.model.typechecker.model.Type) UnknownType(org.eclipse.ceylon.model.typechecker.model.UnknownType) ModelUtil.appliedType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.appliedType) ModelUtil.genericFunctionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.genericFunctionType) TreeUtil.isInstantiationExpression(org.eclipse.ceylon.compiler.typechecker.tree.TreeUtil.isInstantiationExpression) TreeUtil.isEffectivelyBaseMemberExpression(org.eclipse.ceylon.compiler.typechecker.tree.TreeUtil.isEffectivelyBaseMemberExpression) ArrayList(java.util.ArrayList) CustomTree(org.eclipse.ceylon.compiler.typechecker.tree.CustomTree) Tree(org.eclipse.ceylon.compiler.typechecker.tree.Tree)

Example 92 with Type

use of org.eclipse.ceylon.model.typechecker.model.Type in project ceylon by eclipse.

the class AliasVisitor method visit.

@Override
public void visit(Tree.FunctionType that) {
    super.visit(that);
    Type rt = that.getTypeModel();
    if (rt != null) {
        that.setTypeModel(rt.resolveAliases());
    }
}
Also used : Type(org.eclipse.ceylon.model.typechecker.model.Type) TupleType(org.eclipse.ceylon.compiler.typechecker.tree.Tree.TupleType)

Example 93 with Type

use of org.eclipse.ceylon.model.typechecker.model.Type in project ceylon by eclipse.

the class AnalyzerUtil method getUnspecifiedParameter.

static Parameter getUnspecifiedParameter(Reference pr, ParameterList pl, Set<Parameter> foundParameters) {
    for (Parameter p : pl.getParameters()) {
        Type t = pr == null ? p.getType() : pr.getTypedParameter(p).getFullType();
        if (t != null) {
            t = t.resolveAliases();
            Unit unit = p.getDeclaration().getUnit();
            if (!foundParameters.contains(p) && unit.isIterableParameterType(t)) {
                return p;
            }
        }
    }
    return null;
}
Also used : ModelUtil.intersectionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.intersectionType) NothingType(org.eclipse.ceylon.model.typechecker.model.NothingType) ModelUtil.unionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.unionType) Type(org.eclipse.ceylon.model.typechecker.model.Type) ModelUtil.appliedType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.appliedType) Parameter(org.eclipse.ceylon.model.typechecker.model.Parameter) TypeParameter(org.eclipse.ceylon.model.typechecker.model.TypeParameter) Unit(org.eclipse.ceylon.model.typechecker.model.Unit)

Example 94 with Type

use of org.eclipse.ceylon.model.typechecker.model.Type in project ceylon by eclipse.

the class AnalyzerUtil method getTupleType.

public static Type getTupleType(List<Tree.PositionalArgument> es, Unit unit, boolean requireSequential) {
    Type result = unit.getEmptyType();
    Type ut = unit.getNothingType();
    Class td = unit.getTupleDeclaration();
    Interface id = unit.getIterableDeclaration();
    for (int i = es.size() - 1; i >= 0; i--) {
        Tree.PositionalArgument a = es.get(i);
        Type t = a.getTypeModel();
        if (t != null) {
            // unit.denotableType(t);
            Type et = t;
            if (a instanceof Tree.SpreadArgument) {
                /*if (requireSequential) { 
                        checkSpreadArgumentSequential((Tree.SpreadArgument) a, et);
                    }*/
                if (unit.isIterableType(et)) {
                    ut = unit.getIteratedType(et);
                    result = spreadType(et, unit, requireSequential);
                } else if (unit.isJavaIterableType(et)) {
                    ut = unit.getJavaIteratedType(et);
                    result = unit.getSequentialType(ut);
                } else if (unit.isJavaArrayType(et)) {
                    ut = unit.getJavaArrayElementType(et);
                    result = unit.getSequentialType(ut);
                } else {
                    result = unit.getUnknownType();
                }
            } else if (a instanceof Tree.Comprehension) {
                ut = et;
                Tree.Comprehension c = (Tree.Comprehension) a;
                Tree.InitialComprehensionClause icc = c.getInitialComprehensionClause();
                result = icc.getPossiblyEmpty() ? unit.getSequentialType(et) : unit.getSequenceType(et);
                if (!requireSequential) {
                    Type it = appliedType(id, et, icc.getFirstTypeModel());
                    result = intersectionType(result, it, unit);
                }
            } else {
                ut = unionType(ut, et, unit);
                result = appliedType(td, ut, et, result);
            }
        }
    }
    return result;
}
Also used : ModelUtil.intersectionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.intersectionType) NothingType(org.eclipse.ceylon.model.typechecker.model.NothingType) ModelUtil.unionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.unionType) Type(org.eclipse.ceylon.model.typechecker.model.Type) ModelUtil.appliedType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.appliedType) Tree(org.eclipse.ceylon.compiler.typechecker.tree.Tree) Class(org.eclipse.ceylon.model.typechecker.model.Class) ModelUtil.getContainingClassOrInterface(org.eclipse.ceylon.model.typechecker.model.ModelUtil.getContainingClassOrInterface) Interface(org.eclipse.ceylon.model.typechecker.model.Interface) ClassOrInterface(org.eclipse.ceylon.model.typechecker.model.ClassOrInterface)

Example 95 with Type

use of org.eclipse.ceylon.model.typechecker.model.Type in project ceylon by eclipse.

the class AnalyzerUtil method getVariances.

static List<SiteVariance> getVariances(Tree.TypeArguments tas, List<TypeParameter> typeParameters) {
    if (tas instanceof Tree.TypeArgumentList) {
        Tree.TypeArgumentList tal = (Tree.TypeArgumentList) tas;
        int size = typeParameters.size();
        List<SiteVariance> variances = new ArrayList<SiteVariance>(size);
        List<Tree.Type> types = tal.getTypes();
        int count = types.size();
        for (int i = 0; i < count; i++) {
            Tree.Type type = types.get(i);
            if (type instanceof Tree.StaticType) {
                Tree.StaticType st = (Tree.StaticType) type;
                TypeVariance tv = st.getTypeVariance();
                if (tv != null) {
                    boolean contra = tv.getText().equals("in");
                    variances.add(contra ? IN : OUT);
                } else {
                    variances.add(null);
                }
            } else {
                variances.add(null);
            }
        }
        return variances;
    } else {
        return emptyList();
    }
}
Also used : ArrayList(java.util.ArrayList) TypeVariance(org.eclipse.ceylon.compiler.typechecker.tree.Tree.TypeVariance) ModelUtil.intersectionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.intersectionType) NothingType(org.eclipse.ceylon.model.typechecker.model.NothingType) ModelUtil.unionType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.unionType) Type(org.eclipse.ceylon.model.typechecker.model.Type) ModelUtil.appliedType(org.eclipse.ceylon.model.typechecker.model.ModelUtil.appliedType) SiteVariance(org.eclipse.ceylon.model.typechecker.model.SiteVariance) Tree(org.eclipse.ceylon.compiler.typechecker.tree.Tree)

Aggregations

Type (org.eclipse.ceylon.model.typechecker.model.Type)692 ModelUtil.appliedType (org.eclipse.ceylon.model.typechecker.model.ModelUtil.appliedType)270 UnknownType (org.eclipse.ceylon.model.typechecker.model.UnknownType)263 Tree (org.eclipse.ceylon.compiler.typechecker.tree.Tree)244 TypeDeclaration (org.eclipse.ceylon.model.typechecker.model.TypeDeclaration)225 ModelUtil.intersectionType (org.eclipse.ceylon.model.typechecker.model.ModelUtil.intersectionType)207 TypeParameter (org.eclipse.ceylon.model.typechecker.model.TypeParameter)182 AnalyzerUtil.getTupleType (org.eclipse.ceylon.compiler.typechecker.analyzer.AnalyzerUtil.getTupleType)176 AnalyzerUtil.spreadType (org.eclipse.ceylon.compiler.typechecker.analyzer.AnalyzerUtil.spreadType)176 ModelUtil.unionType (org.eclipse.ceylon.model.typechecker.model.ModelUtil.unionType)169 ModelUtil.genericFunctionType (org.eclipse.ceylon.model.typechecker.model.ModelUtil.genericFunctionType)153 UnionType (org.eclipse.ceylon.model.typechecker.model.UnionType)130 CustomTree (org.eclipse.ceylon.compiler.typechecker.tree.CustomTree)125 TypedDeclaration (org.eclipse.ceylon.model.typechecker.model.TypedDeclaration)114 ArrayList (java.util.ArrayList)106 Declaration (org.eclipse.ceylon.model.typechecker.model.Declaration)100 JCExpression (org.eclipse.ceylon.langtools.tools.javac.tree.JCTree.JCExpression)96 ClassOrInterface (org.eclipse.ceylon.model.typechecker.model.ClassOrInterface)95 IntersectionType (org.eclipse.ceylon.model.typechecker.model.IntersectionType)94 Class (org.eclipse.ceylon.model.typechecker.model.Class)87