如何在运行时以编程方式刷新 Eclipse 主菜单

How to refresh the Eclipse main menu programmatically on runtime

我正在寻找一种方法来以编程方式强制 Eclipse refresh/rebuild 它自己的主菜单甚至运行时的整个视图。

我需要这种方式的原因是,因为我有一个迭代项目的插件,并且根据所选项目的配置,它在运行时加载项目特定的插件:

FrameworkUtil.getBundle(this.getClass()).getBundleContext().installBundle(String).start()

现在加载的插件有助于 org.eclipse.ui.main.menu 扩展点,即使安装了插件,我也看不到新的菜单项。

仅供参考:我正在使用 Eclipse 3.x 和 E4 工具

现在我的问题是:

我检查了 MMenu 本身是否有刷新方法,所以我可以获取对象并调用刷新方法。

但是最后没找到办法。

P.S。我是插件开发和 RCP 的新手,所以如果解决方案很明显但我没有意识到,请不要怪我

Refresh/Rebuild UI

简答:

在很多地方都加载了 Eclipse 扩展点,信息存储在静态字段中(通常在 Singleton 中)。 plugin.xml 数据在应用程序的生命周期内不会重新加载,当然这些包不会监听允许它们检测此类更改的包事件。

因此,即使整体上有一些调用刷新的方法UI,至少一些(大多数?)代码处理扩展点不会看到新的效果plugin.xmls.

另一种方法

要回答您正在尝试做的事情,"normal" 要做的是让每个菜单贡献的可见性都取决于某些表达式,例如如果当前选择适应 MySpecialProject,您可以让它可见。

当您以正常方式执行此操作并让所有内容延迟加载时,所有这些项目类型插件的 java 代码将不会加载,直到第一次实际调用命令时间.

要进行下一步,您可能会有一个主要的 ui 插件,它定义了一堆命令(例如 build 项目、闪光灯、格式文件等) ,但在该主插件中没有关联的命令处理程序。在每个项目类型插件中,只有正确的项目类型处于活动状态时才会启用命令处理程序。

假设您已经学习了 basic tutorial on commands in Eclipse, there is a good advanced one on vogella.com,其中涵盖了很多有用的功能以实现适当的动态化。