Eclipse插件:创建动态菜单和相应的处理程序?

我正在尝试编写一个我认为非常简单的Eclipse插件,但我真的很难找到自己的方式,因为我之前从未使用过PDE。

基本上我要做的是在Java Project上下文菜单中添加一个子菜单,该菜单将列出项目根目录中的一堆可用文件。 然后在选择其中一个子菜单项时,我希望调用该处理程序并传递所选文件的名称。

到目前为止,我已经设法通过向org.eclipse.ui.menus扩展点添加动态menuContribution来正确显示菜单。 我已经定义了自己的CompoundContributionItem,它找到相应目录中的所有文件并填充菜单。 这些菜单项中的每一个都连接到我的处理程序(扩展AbstractHandler),并且每次选择菜单项时都会调用处理程序。 我不知道该怎么做是让我的处理程序根据选择的菜单项实际执行某些操作。 如果以某种方式传递菜单项标签的字符串就足够了,但我猜这可能有更好的方法。

我试着查看org.eclipse.debug.ui的代码,看看它们是如何使用run / debug配置的,因为这正是我想要的。 他们从项目的.launches目录中获取.launch文件并将其显示在列表中。 这个代码非常复杂,并且还有许多与之无关的其他行为,所以作为一个初学者,我正在努力解决它。 而且,他们似乎做了与我不同的方式,所以可能是我的方法完全错了。 任何帮助或指示将不胜感激。

我终于找到了答案。 在plugin.xml中,可以为每个命令指定参数,例如

  

现在,当我动态创建每个菜单项时,我可以将我的参数添加到CommandContributionItemParameter对象的参数Map中。

 CommandContributionItemParameter param = new CommandContributionItemParameter(PlatformUI.getWorkbench(), null, "CommandID", CommandContributionItem.STYLE_PUSH); param.parameters = new HashMap(); param.parameters.put("commandParameterID", "TheValue"); 

以这种方式添加的参数可在处理程序类中访问,如下所示:

 public Object execute(ExecutionEvent event) throws ExecutionException { System.out.println(event.getParameter("commandParameterID")); return null; } 

可能这个简单的菜单创建者可以帮助您更进一步(或链接下的项目中的周围类)或者可能是同一项目中弹出菜单的plugin.xml