2013-08-27 55 views
0

我在eclipse.org/Xtext/documentation上的教程中工作,並展開了這些示例。使用Domainmodel.xtext示例,我爲每個實體生成一個Java-Classfile,如Tut中所述。XTEND在DomainmodelGenerator.xtend(XTEXT代碼生成項目)中的For-Loop索引控制

的DSL指定的特徵的數目arbitry,又名類屬性:

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

在DomainmodelGenerator.xtend然後我添加代碼以產生一個JAVA-classconstructor。該XTEND-for循環週期通過所有arguements - 看起來是這樣的:

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

問題 有了這個最後的參數還有發出一個逗號。如何通過循環索引獲得XTEND的控制權,以使生成器發出合法的JAVA代碼?

回答

2

如何:

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

高雅作品的罰款。我繼續閱讀XTEND文檔。學會了「」「一MULTILINESTRING‘’」被稱爲模板,一個for循環語法涵蓋與優雅的語法這一要求: '\t 高清compile_Constructors(實體E)‘’」 公共«e.name.toFirstUpper » ( \t \t«FOR F:e.features SEPARATOR 「」» \t \t«f.type.fullyQualifiedName» «f.name.toFirstUpper» \t \t«ENDFOR» ) { \t } ' – olippuner

+0

對於代碼抱歉反引號不起作用,並且我遇到了5分鐘超時的評論。 – olippuner

2

«FOR»循環有一些選項,這些選項都是非常方便:

  • BEFORE string
  • SEPARATOR string
  • AFTER string

這些允許您在項目之前,之間和之後發出其他字符串。如果沒有項目(空列表),則不會發射任何項目。

所以你的情況只是使用

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