DomainmodelGenerator.xtend中的XTEND For-Loop索引控件(XTEXT代码生成项目)

时间:2013-08-27 22:23:22

标签: dsl xtext xtend

我在eclipse.org/Xtext/documentation上完成了教程,并开始扩展这些示例。使用Domainmodel.xtext示例,我为Tut中所述的每个实体生成一个Java-Class文件。

DSL指定了一系列特征,即类属性:

  Entity:
  'entity' name = ID 
          ('extends' superType = [Entity | QualifiedName])?
   '{'
   (features += Feature)*
   '}'
    ;

在DomainmodelGenerator.xtend中,我添加了代码来生成JAVA-classconstructor。 XTEND-Forloop循环遍历所有争论 - 看起来像这样:

def compile_Constructors(Entity e) '''
public «e.name.toFirstUpper»
       (
      «FOR f : e.features»
           «f.type.fullyQualifiedName» «f.name.toFirstUpper», 
      «ENDFOR»
        ) 
{}  
'''

问题 使用此最后一个参数仍然会发出逗号。如何通过loopindex控制XTEND,使生成器发出合法的JAVA代码?

2 个答案:

答案 0 :(得分:2)

怎么样:

def compile_Constructors(Entity e) '''
    public «e.name.toFirstUpper»
           (
           «e.features.map[type.fullyQualifiedName + ' ' + name.toFirstUpper].join(', ')»
           ) 
    {}
'''

答案 1 :(得分:2)

«FOR»循环有一些非常方便的选项:

  • BEFORE string
  • SEPARATOR string
  • AFTER string

这些允许您在项目之前,之间和之后发出其他字符串。如果没有项目(空列表),则不会发出任何项目。

所以在你的情况下只需使用

«FOR f : e.features SEPARATOR ', '»