TypeArguments.ceylon
import ceylon.ast.core {
TypeArguments,
TypeArgument,
Variance
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JInferredTypeArguments=InferredTypeArguments,
JStaticType=StaticType,
JType=Type,
JTypeArguments=TypeArguments,
JTypeArgumentList=TypeArgumentList
}
}
import ceylon.interop.java {
CeylonIterable
}
"Converts RedHat AST [[TypeArgumentList|JTypeArgumentList]] to `ceylon.ast` [[TypeArguments]].
(This function does not accept [[TypeArguments|JTypeArguments]],
which include [[InferredTypeArguments|JInferredTypeArguments]];
use [[anyTypeArgumentsToCeylon]] for that.)"
shared TypeArguments typeArgumentsToCeylon(JTypeArgumentList typeArguments) {
assert (nonempty args = CeylonIterable(typeArguments.types).collect((JType jType) {
assert (is JStaticType jType);
value type = typeToCeylon(jType);
Variance? variance;
if (exists jTypeVariance = jType.typeVariance) {
variance = varianceToCeylon(jTypeVariance);
} else {
variance = null;
}
return TypeArgument(type, variance);
}));
return TypeArguments(args);
}
"Converts RedHat AST [[TypeArguments|JTypeArguments]] to `ceylon.ast` [[TypeArguments]] or [[null]].
Returns
- `typeArgumentsToCeylon(typeArguments)` for a proper [[TypeArgumentList|JTypeArgumentList]],
- `null` for [[InferredTypeArguments|JInferredTypeArguments]]."
shared TypeArguments? anyTypeArgumentsToCeylon(JTypeArguments typeArguments) {
assert (is JTypeArgumentList|JInferredTypeArguments typeArguments);
switch (typeArguments)
case (is JTypeArgumentList) { return typeArgumentsToCeylon(typeArguments); }
case (is JInferredTypeArguments) { return null; }
}
"Compiles the given [[code]] for Type Arguments
into a [[TypeArguments]] using the Ceylon compiler
(more specifically, the rule for `typeArguments`)."
shared TypeArguments? compileTypeArguments(String code) {
if (exists jTypeArguments = createParser(code).typeArguments()) {
return typeArgumentsToCeylon(jTypeArguments);
} else {
return null;
}
}