覆盖或扩展Acceleo模板中的模板

时间:2017-07-29 13:30:31

标签: eclipse templates extend overwrite acceleo

我有3个模板,例如: -

main, genA, genB

genB模块是genA的规范,应该覆盖一个模板bar。问题是,如果你在genA中调用覆盖的模板,它不是genB.中指定的模板

以下是简化的模板: -

主: -

[module main('http://www.eclipse.org/uml2/5.0.0/UML')]

[import genB /]

[template public generateElement(aClass : Class)]
[comment @main/]
[foo() /][bar() /]
[/template]

GENA: -

[module generateA('http://www.eclipse.org/uml2/5.0.0/UML') extends genB]

[template public foo()]
[bar() /]
[/template]

[template public bar()]
barA
[/template]

GENB: -

[module generateB('http://www.eclipse.org/uml2/5.0.0/UML') extends genA]

[template public bar() overrides bar]
barB
[/template]

输出为barAbarB,因此genA内的呼叫不会被覆盖。 docs中提到了此行为。覆盖模板的建议方法是什么?

1 个答案:

答案 0 :(得分:0)

“静态重写感觉就像在Java之类的面向对象的语言中重写一样,但是它有所不同,因为模块不是对象,它们更类似于名称空间” https://wiki.eclipse.org/Acceleo/FAQ#How_does_the_overriding_system_works_in_Acceleo_.3F 您应该尝试使用动态覆盖。