SatisfiedTypes.ceylon
import ceylon.ast.core {
Node,
PrimaryType,
SatisfiedTypes
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JSatisfiedTypes=SatisfiedTypes,
JStaticType=StaticType
}
}
import ceylon.interop.java {
CeylonIterable
}
"Converts RedHat AST [[SatisfiedTypes|JSatisfiedTypes]] to `ceylon.ast` [[SatisfiedTypes]]."
shared SatisfiedTypes satisfiedTypesToCeylon(JSatisfiedTypes satisfiedTypes, Anything(JNode,Node) update = noop) {
assert (nonempty types = CeylonIterable(satisfiedTypes.types).collect {
PrimaryType collecting(JStaticType element) {
assert (is PrimaryType ret = typeToCeylon(element, update));
return ret;
}
});
value result = SatisfiedTypes(types);
update(satisfiedTypes, result);
return result;
}
"Compiles the given [[code]] for Satisfied Types
into [[SatisfiedTypes]] using the Ceylon compiler
(more specifically, the rule for `satisfiedTypes`)."
shared SatisfiedTypes? compileSatisfiedTypes(String code, Anything(JNode,Node) update = noop) {
if (exists jSatisfiedTypes = createParser(code).satisfiedTypes()) {
return satisfiedTypesToCeylon(jSatisfiedTypes, update);
} else {
return null;
}
}