xtend toEnumerateType/通过xtend生成Java枚举的示例?

xtend toEnumerateType/通过xtend生成Java枚举的示例?,java,enums,xtext,xtend,Java,Enums,Xtext,Xtend,我需要使用XTEND2.5通过DSL生成Java枚举。我的语法是这样的: grammar de.mytest.xtext.enumdsl.EnumDsl with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations import "http://www.eclipse.org/emf/2002/Ecore" as ecore import "http://www.eclipse.org/xtext/xbase/Xbase" as x

我需要使用XTEND2.5通过DSL生成Java枚举。我的语法是这样的:

grammar de.mytest.xtext.enumdsl.EnumDsl with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase

EnumModel:
    pckg=EnumPackage;

EnumPackage:
    {EnumPackage} 
    importSection=XImportSection?
    'package' name=QualifiedName '{'
        (enums+=MyEnum)*
    '}';

MyEnum:
    'enum' name=ValidID '{' (items+=ValidID)* '}';
package de.mytest.enumpackage {
    enum MyEnumTest {
        YES
        NO
        MAYBE
    }
}
使用这种语法,DSL可以如下所示:

grammar de.mytest.xtext.enumdsl.EnumDsl with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase

EnumModel:
    pckg=EnumPackage;

EnumPackage:
    {EnumPackage} 
    importSection=XImportSection?
    'package' name=QualifiedName '{'
        (enums+=MyEnum)*
    '}';

MyEnum:
    'enum' name=ValidID '{' (items+=ValidID)* '}';
package de.mytest.enumpackage {
    enum MyEnumTest {
        YES
        NO
        MAYBE
    }
}
预期的结果Java枚举为:

package de.mytest.enumpackage;

public enum MyEnumTest {
    YES,
    NO,
    MAYBE
}
我尝试使用toEnumerateType()实现xtend方法infer(),但没有成功。我也找不到任何例子!我的谷歌fu似乎不够好

使用toEnumerateLiteral(),它也在toClass()内部工作,但它显然生成了一个类

你有什么想法吗


提前谢谢你,Michael这应该能帮到你:

myEnum.toEnumerationType(myEnum.name) [
  myEnum.items.forEach [ literal |
    myEnum.toEnumerationLiteral(literal)
  ]
]

非常感谢你的提示,塞巴斯蒂安。我不得不稍微修改一下。以下是最终对我有效的方法:-)