我有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中提到了此行为。覆盖模板的建议方法是什么?
答案 0 :(得分:0)
“静态重写感觉就像在Java之类的面向对象的语言中重写一样,但是它有所不同,因为模块不是对象,它们更类似于名称空间” https://wiki.eclipse.org/Acceleo/FAQ#How_does_the_overriding_system_works_in_Acceleo_.3F 您应该尝试使用动态覆盖。