过滤第三方插件扩展点
在开发rcp过程中,不可避免的需要加入第三方插件,与此同时会引入很多我们不想要的扩展点,不改动源码包的情况下我们可以选择用代码的方式过滤不想要的扩展点。
我们可以在我们定义的WorkbenchWindowAdvisor的postWindowStart()方法中对这些第三方扩展点进行过滤。
第一种情况,过滤主菜单、工具栏。eclipse机制中的IWorkbenchWindow里面保存了菜单、工具栏等相关信息,我们可通过它来移除IContributionItem(可通过传入IContributionItem实例或者对应的ID),下面以过滤CoolBar来作为示例。
static void filterCoolbar(IWorkbenchWindow window){ CoolBarManager cbm = window.getCoolBarManager(); cbm.remove("org.eclipse.ui.workbench.navigate"); }
for(IContributionItem item : cbm.getItems()){ System.out.println(item.getId()); }
static void filterViews() { IViewRegistry viewRegistry = WorkbenchPlugin.getDefault() .getViewRegistry(); IViewDescriptor[] descriptors = viewRegistry.getViews(); List<String> needIDs = new ArrayList<String>(); needIDs.add("org.eclipse.ui.views.ContentOutline"); for (IViewDescriptor descriptor : descriptors) { ViewDescriptor vDescriptor = (ViewDescriptor)descriptor; if (!needIDs.contains(vDescriptor.getId())) { IExtension extension = vDescriptor.getConfigurationElement().getDeclaringExtension(); ((ViewRegistry) viewRegistry).removeExtension(extension,new Object[] { descriptor });}}}