Java AbstractContributionFactory在E4中不起作用
我们有这样的Java AbstractContributionFactory在E4中不起作用,java,eclipse-plugin,e4,Java,Eclipse Plugin,E4,我们有这样的AbstractContributionFactorys: final AbstractContributionFactory contributions = new AbstractContributionFactory("org.acme.mainMenu", null) { @Override public void createContributionItems(final IServiceLocator serviceLocator,
AbstractContributionFactory
s:
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);
这段代码在Eclipse3.x中工作得很好,但在E4中停止了工作。因此,在搜索bug时,我们在E4框架中发现了大量未注释的代码,仅在WorkbenchmentUservice.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);
// }
// }
///好,现在更新使用此uri的所有管理器
//对于(地图条目:
//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());
//经理更新(正确);
// }
// }
根据评论,很多人都有同样的问题
有人找到了解决这个错误的方法吗?我还想通过编程将一些菜单项添加到RCP应用程序的主菜单中,但被这个错误发现了 我发现您可以通过扩展
ExtensionContributionFactory
类(该类还有一个createContributionItems()
方法),而不是使用WorkbenchNameUserVice.addContributionFactory(…)
方法来添加contibution项,然后使用org.eclipse.ui.menus
扩展点将其添加为新的menuContribution
我在Vogella的文章中找到了这个解决方案。我还想通过编程将一些菜单项添加到RCP应用程序的主菜单中,但被这个bug发现了 我发现您可以通过扩展
ExtensionContributionFactory
类(该类还有一个createContributionItems()
方法),而不是使用WorkbenchNameUserVice.addContributionFactory(…)
方法来添加contibution项,然后使用org.eclipse.ui.menus
扩展点将其添加为新的menuContribution
我在Vogella的文章中找到了这个解决方案