DecQualifier.ceylon
import ceylon.ast.core {
DecQualifier,
UIdentifier
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JBaseMemberExpression=BaseMemberExpression,
JIdentifier=Identifier,
JQualifiedType=QualifiedType,
JStaticType=StaticType
},
Visitor
}
import ceylon.collection {
LinkedList
}
"Converts a RedHat AST [[StaticType|JStaticType]] or [[BaseMemberExpression|JBaseMemberExpression]]
to a `ceylon.ast` [[DecQualifier]]."
DecQualifier decQualifierToCeylon(JStaticType|JBaseMemberExpression decQualifier) {
switch (decQualifier)
case (is JStaticType) {
value components = LinkedList<UIdentifier>();
object visitor extends Visitor() {
shared actual void visit(JIdentifier that)
=> components.add(uIdentifierToCeylon(that));
shared actual void visit(JQualifiedType that) {
that.outerType.visit(this);
that.identifier.visit(this);
}
}
decQualifier.visit(visitor);
assert (nonempty c = components.sequence());
return DecQualifier(c);
}
case (is JBaseMemberExpression) {
return DecQualifier([lIdentifierToCeylon(decQualifier.identifier)]);
}
}