2013-12-24 1 views
0

Как я могу выполнить один и тот же модуль более одного раза, но сохранить предыдущий сгенерированный файл кода?Acceleo Инкрементальная генерация в том же файле

Короче говоря, у меня есть основной модуль, который вызывает другие модули. generate.mtl

[comment encoding = UTF-8 /] 
[module generate('http:///AndroidUI.ecore')/] 
[import pje13::androidui::codegeneration::xml_generate /] 
[import pje13::androidui::codegeneration::java_generate /] 
[import pje13::androidui::codegeneration::xml_strings /] 
[template public generate(app : Application)] 
[comment @main /] 
[for (page : Page | app.page)] 
    [for (activity : Activity | app.activity)] 
     [if (activity.name.contains(page.name.replace('activity_', '').toUpperFirst()))] 
      **[genPage(page, app.name, activity)/]** 
     [/if]   
    [/for] 
[/for] 
[comment] match between an activity and an layout is: 
      MainActivity.java == activity_main.xml [/comment] 
[/template] 

[template public **genPage**(element:Page, appName:String, activity : Activity)] 
[GenerateJava(element,appName,activity)/] 
**[GenerateStrings(element)/]** 
[GenerateXML(element,activity)/] 
[/template] 

Если у меня есть более чем на одну страницу, шаблон [GenerateStrings(element)/] будет называться более чем один раз. Поскольку выход консоль говорит

!ENTRY org.eclipse.acceleo.engine 2 0 2013-12-24 13:20:09.000 
!MESSAGE Some files were generated more than once during this generation. 

/res/values/strings.xml : 3 times 

Так файл будет содержать только последнюю модификацию не все код из file1 file2 &.

Когда я искал решение, которое я нашел только инкрементный поколение с помощью

<%startUserCode> 

<%endtUserCode> 

или

* @generate NOT 

Но это не является решением для файла XML.

Код, который я Ussing написать XML-строки это:

[template public setStrings(button : Button)] 
    [if (button.text <> null)]<string name="strings_[button.text.toString()/]">[button.text.toString()/]</string>[else]<string name="const_default">button_text</string>[/if] 
[/template] 

ответ

1

Я предполагаю, что шаблон GenerateSrings содержит [файл] тег.

Если я правильно понимаю, что вы пытаетесь сделать, вам придется реорганизовать свой шаблон acceleo просто немного, как следует:

[template public generate(app : Application)] 
[comment @main /] 
[for (page : Page | app.page)] 
    [for (activity : Activity | app.activity)] 
     [if (activity.name.contains(page.name.replace('activity_', '').toUpperFirst()))] 
      [genPage(page, app.name, activity)/] 
     [/if]   
    [/for] 
[/for] 
[app.genStrings()/] 
[/template] 

[template public **genPage**(element:Page, appName:String, activity : Activity)] 
[GenerateJava(element,appName,activity)/] 
[comment GenerateStrings(element)/][comment don't do it here/] 
[GenerateXML(element,activity)/] 
[/template] 

[template protected genString(app : Application)] 
[file ('...strings.xml', ...)][comment that way, only one file will be generated for the application/] 
    [for (page : Page | app.page)] 
     [for (activity : Activity | app.activity)] 
      [if (activity.name.contains(page.name.replace('activity_', '').toUpperFirst()))] 
       [GenerateStrings(element)/] 
      [/if]   
     [/for] 
    [/for] 
[/file] 
[/template]