ValueSetterDefinition.ceylon
import ceylon.ast.core {
Block,
LazySpecifier,
Node,
ValueSetterDefinition
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JAttributeSetterDefinition=AttributeSetterDefinition,
JLazySpecifierExpression=LazySpecifierExpression
}
}
"Converts a RedHat AST [[AttributeSetterDefinition|JAttributeSetterDefinition]] to a `ceylon.ast` [[ValueSetterDefinition]]."
shared ValueSetterDefinition valueSetterDefinitionToCeylon(JAttributeSetterDefinition valueSetterDefinition, Anything(JNode,Node) update = noop) {
Block|LazySpecifier definition;
if (exists jBlock = valueSetterDefinition.block) {
"Value setter definition can’t have both a block and a specifier expression"
assert (!valueSetterDefinition.specifierExpression exists);
definition = blockToCeylon(jBlock, update);
} else {
"Value setter definition must have either a block or a specifier expression"
assert (exists jSpecifierExpression = valueSetterDefinition.specifierExpression);
"Value setter can’t be defined using “specify” operator (`=`)"
assert (is JLazySpecifierExpression jSpecifierExpression);
definition = lazySpecifierToCeylon(jSpecifierExpression, update);
}
value result = ValueSetterDefinition(lIdentifierToCeylon(valueSetterDefinition.identifier, update), definition, annotationsToCeylon(valueSetterDefinition.annotationList, update));
update(valueSetterDefinition, result);
return result;
}
"Compiles the given [[code]] for a Value Setter Definition
into a [[ValueSetterDefinition]] using the Ceylon compiler
(more specifically, the rule for a `declaration`)."
shared ValueSetterDefinition? compileValueSetterDefinition(String code, Anything(JNode,Node) update = noop) {
if (is JAttributeSetterDefinition jDeclaration = createParser(code).declaration()) {
return valueSetterDefinitionToCeylon(jDeclaration, update);
} else {
return null;
}
}