我有一个动态创建菜单贡献的类:
public class DynamicHelpMenuFactory extends ExtensionContributionFactory {
...
public void createContributionItems(IServiceLocator sl, IContributionRoot ad) {
...
ICommandService commandService = getCommandService();
...
// create the command
Command command = commandService.getCommand("com.foo.bar");
command.setHandler(new MyHandler());
command.define("com.foo.bar.name", "com.foo.bar.description", "category.foo.bar");
...
// create the menu contribution
...
}
...
}
这不适用于Eclipse Juno 。调用command.define(...)
用MakeHandlersGo
处理程序替换指定的处理程序,菜单贡献保持禁用状态(但显示它们)。
我试图在command.setHandler(...)
之后调用command.define(...)
,这会启用菜单提示,但点击它们会抛出:
org.eclipse.core.commands.NotHandledException: There is no handler to execute for command com.foo.bar
上面的代码有效(显示菜单贡献并点击它使处理程序执行其操作)确定任何其他尝试过的Eclipse版本(Indigo,Kepler,Luna,Mars)。
在我看来这是Eclipse IDE中的一个错误,但我无法找到Juno报告的任何相关问题。 Eclipse Juno是否需要一些特定的方式来动态创建菜单贡献?