我在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代码?
答案 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 ', '»