QualifiedExpression.ceylon
import ceylon.ast.core {
AnyMemberOperator,
NameWithTypeArguments,
Primary,
QualifiedExpression,
Package
}
import ceylon.ast.redhat {
RedHatTransformer,
qualifiedExpressionToCeylon,
compileQualifiedExpression
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JQualifiedMemberOrTypeExpression=QualifiedMemberOrTypeExpression
}
}
import ceylon.ast.create {
identifier,
nameWithTypeArguments
}
shared object qualifiedExpression satisfies ConcreteTest<QualifiedExpression,JQualifiedMemberOrTypeExpression> {
String->QualifiedExpression construct(String->Primary receiverExpression, <String->NameWithTypeArguments>|String nameAndArgs, String->AnyMemberOperator memberOperator = package.memberOperator.memberOperator) {
switch (nameAndArgs)
case (is String) {
return (receiverExpression.key + memberOperator.key + nameAndArgs)->QualifiedExpression(receiverExpression.item, nameWithTypeArguments(identifier(nameAndArgs)), memberOperator.item);
}
case (is String->NameWithTypeArguments) {
return (receiverExpression.key + memberOperator.key + nameAndArgs.key)->QualifiedExpression(receiverExpression.item, nameAndArgs.item, memberOperator.item);
}
}
shared String->QualifiedExpression joinWithCommasExpression = construct(stringLiteral.commaStringLiteral, "join");
shared String->QualifiedExpression processArgumentsExpression = construct(baseExpression.processExpression, "arguments");
shared String->QualifiedExpression processArgumentsFirstExpression = construct(processArgumentsExpression, "first");
shared String->QualifiedExpression nameEmptyExpression = construct(baseExpression.nameExpression, "empty");
shared String->QualifiedExpression peopleSpreadNameExpression = construct(baseExpression.peopleExpression, "name", spreadMemberOperator.spreadMemberOperator);
shared String->QualifiedExpression processArgumentsFirstSafeLowercasedExpression = construct(processArgumentsFirstExpression, "lowercased", safeMemberOperator.safeMemberOperator);
// not tested directly, but used by other tests
shared String->QualifiedExpression processArgumentsSequenceQualifiedExpression = construct(processArgumentsExpression, "sequence");
shared String->QualifiedExpression textIndexedQualifiedExpression = construct(baseExpression.textExpression, "indexed");
shared String->QualifiedExpression personNameQualifiedExpression = construct(baseExpression.personExpression, "name");
shared String->QualifiedExpression packageNullExpression = construct("package"->Package(), "null");
compile = compileQualifiedExpression;
fromCeylon = RedHatTransformer.transformQualifiedExpression;
toCeylon = qualifiedExpressionToCeylon;
codes = [joinWithCommasExpression, processArgumentsFirstExpression, nameEmptyExpression, peopleSpreadNameExpression, processArgumentsFirstSafeLowercasedExpression];
}