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);
}
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());
}
}
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;
}
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;
}
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();
}
}
Aggregations