【问题标题】:Modifying Eclipse EMF Editor New Child menu without changing providers在不更改提供程序的情况下修改 Eclipse EMF 编辑器新子菜单
【发布时间】:2013-07-23 15:13:20
【问题描述】:

我在修改 EMF 自动创建的“新建子”菜单以为某些类型的项目创建子菜单时遇到问题。我发现,默认情况下,管道符号用作分隔符,因此名称为Hamburger | Megaplusbig 的子对象会导致出现Hamburger 子菜单。 This page 似乎表明在相关项目提供者中覆盖 getCreateChildText() 是一个不错的选择。

我想要的是某些类型的模型项出现在子菜单中,为了实现这一点,我只需确保 MySubmenu | 被添加到名称前。我的问题是我在 Eclipse 中编辑的模型的类位于一个单独的 Jar 文件中,我不能(或者说真的不应该)修改。

而且我没有太多运气尝试以另一种方式实现这一目标。我的另一个尝试是扩展BasicModelEditActionProvider 并覆盖它的fillContextMenu()updateActions() 方法。后者确实通过对BasicActionProvider.extractSubmenuActions() 的另一个调用创建子菜单,我可以再次覆盖它,但是到那时,关于我的模型对象的信息在抽象中丢失了。该方法适用于IAction 列表,即使我将操作转换为StaticSelectionCommandAction(它总是如此),command 字段没有公共 getter,并且只有通过command 的字段我才能看到实际EMF EObject 某处。

我正在寻找一个不太难看的解决方案,它不涉及修改 Jar 文件中的项目提供程序,除非我真的必须这样做。

【问题讨论】:

    标签: java eclipse-rcp eclipse-emf


    【解决方案1】:

    所以最后,不幸的是,唯一可行的解​​决方案是 hack。我在BasicModelEditActionProvider 中覆盖了extractSubmenuActions(),将其更改为我想要的子菜单。丑陋的部分是找到要添加的 EMF 对象,不幸的是我使用反射来强制读取通常抽象的IAction 的受保护的command 字段。

    这有力地破坏了封装,但由于我的代码受到外部限制,我无法修改模型的项目提供者。反射解决方案并不漂亮,但效果很好。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      相关资源
      最近更新 更多