0

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

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»
        ) 
{}  
'''

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

4

2 回答 2

3

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

  • BEFORE string
  • SEPARATOR string
  • AFTER string

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

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

«FOR f : e.features SEPARATOR ', '»
于 2013-08-31T16:06:48.523 回答
2

怎么样:

def compile_Constructors(Entity e) '''
    public «e.name.toFirstUpper»
           (
           «e.features.map[type.fullyQualifiedName + ' ' + name.toFirstUpper].join(', ')»
           ) 
    {}
'''
于 2013-08-28T08:26:16.377 回答