Xtext:JvmModelInferrer初始化字段

时间:2013-10-20 14:28:58

标签: eclipse dsl xtext

我想在我的DSL中生成一个List字段,并将其初始化为:

private List<MyObject> myObjects= Lists.newArrayList();

我知道的唯一方法是在初始化程序中添加一些文本:

members += appRule.toField("myObjects", appRule.newTypeRef(List, it.newTypeRef(MyObject))) [
     initializer = [append('''Lists.newArrayList()''')]
]

但是,使用这种方法,JvmModelInferrer将不会导入Guava字符串库,因此会引发编译问题。有没有办法克服这个障碍?

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题(因为你指的是代码中没有使用的Guava字符串库:)),你的问题是,没有导入类引用列表。

对于这样的构造,我们在EMF-IncQuery中有一个辅助方法,它以与序列化参数相同的方式序列化类型引用。此功能依赖于可注入的TypeReferenceSerializer类。

def referClass(ITreeAppendable appendable, EObject ctx, Class<?> clazz, JvmTypeReference... typeArgs) {
    val ref = ctx.newTypeRef(clazz, typeArgs)
    if (ref != null) {
        appendable.serialize(ref, ctx)
    } else {
        //Class resolution error - error handling required here
        //A fallback to writing out the fqn of the class
        appendable.append(clazz.canonicalName)
    }
}

def serialize(ITreeAppendable appendable, JvmTypeReference ref, EObject ctx) {
    typeReferenceSerializer.serialize(ref, ctx, appendable)     
}