在自己的Eclipse的RCP产品中,可能经常要集成第三方的插件,来满足特定的功能需要,但是对于一些不需要的功能,通常的做法是该插件修改源代码,如果出于许可或非开源的原因,无法修改,或删除其源代码,就要考虑如何在RCP中控制其扩展点的加载。 可以在RCP的WorkbenchWindowAdvisor.preWindowOpen中,取到所有加载的扩展点,然后进行相应的过滤处理首先使用WorkbenchPlugin.getDefault()得到WorkbenchPlugin;。通过WorkbenchPlugin可以获取各种类型的扩展点的注册表WorkbenchPlugin 。getActionSetRegistry()得到的注册表中存有所有的ActionSet扩展点; WorkbenchPlugin.getViewRegistry()得到了所有的意见,扩展点通过注册表的removeExtension()可以去掉相应的扩展点,使其不被加载到RCP中。 具体使用方法如下: 1、(移除wizard中的General)// 移除文件菜单下导入功能中自带的General AbstractExtensionWizardRegistry importWizardRegistry = (AbstractExtensionWizardRegistry) WorkbenchPlugin .getDefault().getImportWizardRegistry(); IWizardCategory[] categories = wizardRegistry.getRootCategory().getCategories(); for (int i = 0; i < categories.length; i++){ if(categories[i].getId().equals("org.eclipse.ui.Basic")){ IWizardDescriptor[] wizard = categories[i].getWizards(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.importWizards"); IExtension[] extensions = point.getExtensions(); for (int j = 0; j < wizard.length; j++){ wizardRegistry.removeExtension(extensions[i], new Object[] {wizard[j] }); } } } 2、(移除wizard中的General)// 移除文件菜单下导出功能中自带的General AbstractExtensionWizardRegistry exportWizardRegistry = (AbstractExtensionWizardRegistry) WorkbenchPlugin .getDefault().getExportWizardRegistry(); IWizardCategory[] categories = wizardRegistry.getRootCategory().getCategories(); for (int i = 0; i < categories.length; i++){ if(categories[i].getId().equals("org.eclipse.ui.Basic")){ IWizardDescriptor[] wizard = categories[i].getWizards(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.exportWizards"); IExtension[] extensions = point.getExtensions(); for (int j = 0; j < wizard.length; j++){ wizardRegistry.removeExtension(extensions[i], new Object[] {wizard[j] }); } } } 3、(移除view中的General)// 移除窗口菜单下显示视图中自带的General ViewRegistry viewRegistry = (ViewRegistry) WorkbenchPlugin.getDefault().getViewRegistry(); IViewCategory[] viewCat = viewRegistry.getCategories(); for (int i = 0; i < viewCat.length; i++){ if(viewCat[i].getId().equals("org.eclipse.ui")){ IViewDescriptor[] viewDes = viewCat[i].getViews(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.views"); IExtension[] extensions = point.getExtensions(); for (int j = 0; j < viewDes.length; j++){ if(!viewDes[j].getId().equals("org.eclipse.ui.console.ConsoleView")){ viewRegistry.removeExtension(extensions[i], new Object[] {viewDes[j] }); } } } } 4、(移除ActionSet中的General) |
|