Hi,
i a playing around with xbase' new typesystem.
here is my grammar
Model:
elements+=Element*;
Element:
"field" name=ID "=" init=XExpression;
I want to create a javabean out of this. here is my inferrer
class MyDslJvmModelInferrer extends AbstractModelInferrer {
@Inject extension JvmTypesBuilder
@Inject extension TypeReferences
def dispatch void infer(Model model, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
acceptor.accept(model.toClass("my.company.greeting.MyGreetings"))
.initializeLater([
for (e : model.elements.filter(x|x.name != null && x.init != null)) {
val f = e.toField(e.name, inferredType) [
initializer = e.init
]
members += f
members += e.toGetter(e.name, inferredType(e.init))
members += e.toSetter(e.name, inferredType(e.init))
}
])
}
}
somehow the inferring is not working
field xxxx = "aaaa"
@SuppressWarnings("all")
public class MyGreetings {
private String xxxx = "aaaa";
public Object getXxxx() {
return this.xxxx;
}
public void setXxxx(final String xxxx) {
this.xxxx = xxxx;
}
}
what am i missing?
another question is: can i use an inferred type without
actually reusing the xexpression the inferrer
(e.g. leave out initializer = e.init)
val f = e.toField(e.name, inferredType(e.init)) []
members += f
members += e.toGetter(e.name, inferredType(e.init))
members += e.toSetter(e.name, inferredType(e.init))
this gives me
Cannot infer type from recursive usage. Type 'Object' is used.
or should i use a "typeprovider" diectly in this case. if so what would be the replacement for the deprecated old one.
Thanks
Christian