2013-07-24 43 views
0

我遇到修改EMF自動創建的「新建子菜單」菜單以創建特定類型項目的子菜單的問題。我發現,默認情況下,管道符號用作分隔符,因此名稱爲Hamburger | Megaplusbig的子對象會導致出現Hamburger子菜單。 This page似乎暗示在相關商品提供商中重寫getCreateChildText()是一個不錯的選擇。修改Eclipse EMF編輯器新建子菜單時不改變提供者

我想要的是爲某些類型的模型項目出現在子菜單中,爲了實現這一點,我只需確保MySubmenu |被預設爲名稱。我的問題是,我在Eclipse中編輯的模型的類在單獨的Jar文件中,我不能(或者實際上不應該)修改它。

而我沒有太多的運氣試圖以另一種方式實現這一點。我的另一個嘗試是延長BasicModelEditActionProvider並覆蓋其fillContextMenu()updateActions()方法。後者確實通過對BasicActionProvider.extractSubmenuActions()的另一個調用創建了子菜單,我再次可以覆蓋該子菜單,但是到那時抽象中丟失了關於我的模型對象的信息。該方法適用於IAction列表,即使我將操作投到StaticSelectionCommandAction(它總是),command字段沒有公共getter,並且它只通過command的字段,我可以在某處看到實際的EMF EObject。

我正在尋找一個不涉及修改Jar文件中的項目提供程序的非常難看的解決方案,除非我真的必須這樣做。

回答

0

因此,最終,唯一可行的解​​決方案是不幸的。我在BasicModelEditActionProvider中重寫了extractSubmenuActions(),改成了給我想要的子菜單。醜陋的部分是找到要添加的EMF對象,爲此我不幸地使用反射來強制讀取通常抽象的IAction的受保護的command字段。

這有力地打破了封裝,但由於我的代碼的外部約束,我無法修改模型的項目提供者。反光解決方案並不美觀,但完美的作品。