dsl - XText w/ XBase - Initialize generated variable -
i'm using xtext xbase grammar.
in every generated java class need initialize class variable in model inferer. variable isn't defined in model, makes no difference.
can generate variable via function
element.tofield("issomethingset", newtyperef("boolean"))
, can't initialize it. i'm sure should use tofield function additional parameter called initializer, of type procedure1 don't know how use it.
here changed example taken xtext documentation. grammar:
grammar org.xtext.example.mydsl.mydsl org.eclipse.xtext.xbase.xbase generate mydsl "http://www.xtext.org/example/mydsl/mydsl" domainmodel: (elements += abstractelement)*; abstractelement: entity; entity: 'entity' name = id ('extends' supertype = jvmtypereference)? '{' (features += feature)* '}'; feature: name = id ':' type = jvmtypereference;
modelinferrer.xtend
import com.google.inject.inject import org.eclipse.xtext.naming.iqualifiednameprovider import org.eclipse.xtext.xbase.jvmmodel.abstractmodelinferrer import org.eclipse.xtext.xbase.jvmmodel.ijvmdeclaredtypeacceptor import org.eclipse.xtext.xbase.jvmmodel.jvmtypesbuilder import org.xtext.example.mydsl.mydsl.entity class mydsljvmmodelinferrer extends abstractmodelinferrer { @inject extension jvmtypesbuilder @inject extension iqualifiednameprovider def dispatch void infer(entity element, ijvmdeclaredtypeacceptor acceptor, boolean isprelinkingphase) { acceptor.accept(element.toclass(element.fullyqualifiedname)).initializelater [ documentation = element.documentation members += element.tofield("issomethingset", newtyperef("boolean")) (feature : element.features) { members += feature.tofield(feature.name, feature.type) members += feature.tosetter(feature.name, feature.type) members += feature.togetter(feature.name, feature.type) } ] } }
the procedure encapsulates code required configure field, e.g. set visibility, static flags, documentation or field initializer:
element.tofield("issomethingset", newtyperef("boolean")) [ initializer = '''false''' // xtext 2.5 or initializer = [ append('false') ] // prior 2.5 ]
Comments
Post a Comment