繁体   English   中英

XText w / XBase-初始化生成的变量

[英]XText w/ XBase - Initialize generated variable

我正在将Xtext与XBase语法一起使用。
在每个生成的Java类中,我都需要在模型推断器中初始化类变量。 这个变量没有在我的模型中定义,但这没什么区别。
我已经可以通过函数生成此变量

element.toField("isSomethingSet", newTypeRef("boolean"))

,但无法初始化。 我确定我应该将toField函数与称为Initializer的其他参数一起使用 ,但是由于它是Procedure1类型,所以我不知道如何使用它。

这是我从Xtext文档中略做更改的示例。 语法:

grammar org.xtext.example.mydsl.MyDsl with 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"))
            for (feature : element.features) {
                members += feature.toField(feature.name, feature.type)
                members += feature.toSetter(feature.name, feature.type)
                members += feature.toGetter(feature.name, feature.type)
            }
        ]
    }
}

该过程封装了配置字段所需的代码,例如,设置可见性,静态标志,文档或字段初始化程序:

element.toField("isSomethingSet", newTypeRef("boolean")) [
  initializer = '''false''' // with Xtext 2.5 or
  initializer = [ append('false') ] // prior to 2.5
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM