gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:31:21 25 4
gpt4 key购买 nike

我正在使用带有 XBase 语法的 Xtext。
在每个生成的 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
]

关于dsl - XText w/XBase - 初始化生成的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22223959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com