2013-05-16 16 views
0

我正在使用Acceleo-MTL生成Java類。我如何從抽象超類中獲取所有抽象方法?如何從我的超類使用mtl語言獲取抽象方法

要獲得簡單的操作和界面,我用這個:

[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()的接口?

回答

0

這一切都取決於您的元模型以及如何導航它。 IIRC,Class.getImplementedInterfaces()是來自UML,所以我會假設你正在使用。

此外,你似乎試圖做的是「檢索給定分類器的所有操作,包括繼承的分類器」。爲了滿足這種需求,絕對不應該有任何理由自己瀏覽超類和接口層次結構。在UML中,這是通過Classifier.getAllOperations()完成的,這意味着你可以做一切通過:

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

如果你絕對需要遍歷的接口和超一流(ES)自己一遍,記住,你需要遞歸導航整個層次結構:類的超類和接口,類的超類的超類和接口,超類...直到繼承樹的根。您還必須處理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元模型。

相關問題