AbstractContributionFactory在E4中不起作用

时间:2016-09-14 08:07:26

标签: java eclipse-plugin e4

我们AbstractContributionFactory就像这样:

final AbstractContributionFactory contributions = new AbstractContributionFactory("org.acme.mainMenu", null) {

    @Override
    public void createContributionItems(final IServiceLocator serviceLocator,
            final IContributionRoot contributionRoot) {
        String subMenuId ="org.acme.subMenu";

        final MenuManager subMenu = new MenuManager("Sub menu", subMenuId );
        contributionRoot.addContributionItem(subMenu, AlwaysEnabledExpression.INSTANCE);

        menuService.addContributionFactory(new AbstractContributionFactory("menu:" + subMenuId, null) {

            @Override
            public void createContributionItems(final IServiceLocator serviceLocator1,
                    final IContributionRoot additions) {
                additions.addContributionItem(new ActionContributionItem(new Action("Sub action") {
                }), AlwaysEnabledExpression.INSTANCE);
            }
        });
    }
};
menuService.addContributionFactory(contributions);

此代码在Eclipse 3.x中运行良好,但在E4中停止工作。因此,在搜索错误时,我们在E4框架中发现了许多未注释的代码,仅在WorkbenchMenuService.addContributionFactory(...)中就有两个块。我假设产生的错误是:

    // // OK, now update any managers that use this uri
    // for (Map.Entry<ContributionManager, MenuLocationURI> entry :
    // managers.entrySet()) {
    // MenuLocationURI mgrURI = entry.getValue();
    // if (mgrURI.getScheme().equals(location.getScheme())
    // && mgrURI.getPath().equals(location.getPath())) {
    // ContributionManager mgr = entry.getKey();
    // populateContributionManager(mgr, mgrURI.toString());
    // mgr.update(true);
    // }
    // }

根据the associated bug的评论,很多人都有同样的问题。

有没有人找到错误的解决方法?

1 个答案:

答案 0 :(得分:0)

我还想以编程方式将一些菜单项添加到RCP应用程序的主菜单中,并且被这个错误搞定了。

我没有使用WorkbenchMenuService.addContributionFactory(...)方法,而是使用扩展ExtensionContributionFactory类(也有createContributionItems()方法)添加contibution项,然后使用org.eclipse.ui.menus个扩展点为新menuContribution

我在Vogella的blog中找到了这个解决方案。