如何从mtl语言中的超类中获取抽象方法

时间:2013-05-16 16:15:28

标签: acceleo abstract-methods

我正在使用Acceleo-MTL生成Java类。如何从抽象超类中获取所有抽象方法?

为了获得简单的操作和接口,我使用它:

[comment]Operators[/comment]
[for (o : Operation | class.getOperations())]
[o.generateOperation()/]
[/for]

[comment]Interface Methods[/comment]
[for (interf : Interface | class.getImplementedInterfaces())]
[for (o : Operation | interf.ownedOperation)]
[o.generateInterace()/]
[/for]
[/for]

是否存在一个抽象方法的getter方法,就像你有getImplementedInterfaces()接口?

1 个答案:

答案 0 :(得分:0)

这一切都取决于您的元模型以及如何导航它。 IIRC,Class.getImplementedInterfaces()来自UML,所以我假设你正在使用它。

此外,您似乎要做的是“检索给定分类器的所有操作,包括继承的分类器”。为了满足这些需求,不应该有任何理由在自己的超类和接口层次结构上进行导航。在UML中,这是通过Classifier.getAllOperations()完成的,这意味着您可以通过以下方式完成所有工作:

[for (o : Operation | class.getAllOperations())]
[o.generateOperation()/]
[/for]

如果你绝对需要自己迭代接口和超类,请记住你需要递归地导航整个层次结构:类的超类和接口,超类和接口你的类的超类,超类......直到继承树的根。您还必须处理UML的多重继承功能,从而解决它带来的潜在歧义。为此,您需要熟悉UML模型。例如,检索超类是通过Class.getSuperClasses()完成的。确定其中一个超类是否是抽象的是通过Class.isAbstract() ...等等来完成的。

可以帮助您的旁注:您可以在工作区中导入UML元模型,以快速概览其概念以及如何浏览它。为此:

  • 使用File > Import...
  • 在弹出窗口中,导航至Plug-in Development > Plug-ins and fragments并点击Next
  • 此页面无需更改,第二次点击Next
  • 在过滤器区域中,输入org.eclipse.uml2.uml
  • 双击左侧面板中的org.eclipse.uml2.uml,使其显示在右侧。
  • 点击Finish

您现在在工作区中有一个名为org.eclipse.uml2.uml的新项目。您可以打开org.eclipse.uml2.uml\model\uml.ecore文件以查看UML元模型。