Eclipse 在运行时删除视图操作扩展
我确实创建了一个视图,这些视图在多个产品中使用,我们已经交付了。 视图放置在一个功能中,这些功能不知道产品规格,该功能不应该知道 其他插件通过实现扩展点为视图提供操作,如视图工具栏标题所示Eclipse 在运行时删除视图操作扩展,eclipse,view,registry,rcp,Eclipse,View,Registry,Rcp,我确实创建了一个视图,这些视图在多个产品中使用,我们已经交付了。 视图放置在一个功能中,这些功能不知道产品规格,该功能不应该知道 其他插件通过实现扩展点为视图提供操作,如视图工具栏标题所示 “org.eclipse.ui.viewActions” 根据系统属性(产品规范将在运行时设置),所有参与的视图操作都应隐藏或不隐藏 问题: 我找不到用于删除特殊扩展点的扩展的类。我知道 WorkbenchPlugin.getDefault().getActionSetRegistry() 可以删除操
- “org.eclipse.ui.viewActions”
- WorkbenchPlugin.getDefault().getActionSetRegistry()
Field privateStringField = ExtensionRegistry.class.getDeclaredField("masterToken"); //$NON-NLS-1$
privateStringField.setAccessible(true);
Object masterToken = privateStringField.get(registry);
// Reads the External Datatype Providers
IExtensionPoint extensionPoint = registry.getExtensionPoint("org.eclipse.ui.viewActions"); //$NON-NLS-1$
IConfigurationElement[] extensionPointArray = extensionPoint.getConfigurationElements();
for (int i = 0; i < extensionPointArray.length; i++) {
IConfigurationElement element = extensionPointArray[i];
if (element.getAttribute("targetID").equalsIgnoreCase(pPartId)) { //$NON-NLS-1$
IConfigurationElement[] childs = element.getChildren();
for (int j = 0; j < childs.length; j++) {
registry.removeExtension(element.getDeclaringExtension(), masterToken);
}
}
}
Field privateStringField=ExtensionRegistry.class.getDeclaredField(“主令牌”)//$非NLS-1$
privateStringField.setAccessible(true);
Object masterToken=privateStringField.get(注册表);
//读取外部数据类型提供程序
IExtensionPoint extensionPoint=registry.getExtensionPoint(“org.eclipse.ui.viewActions”)//$非NLS-1$
IConfigurationElement[]extensionPointArray=extensionPoint.getConfigurationElements();
for(int i=0;i
您可以在加载扩展XML时使用它来修改扩展XML。然后,需要定制的产品可以使用产品定制和样式表。例如,要抑制某个操作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="actionSet[@id='org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo']">
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您还可以尝试隐藏viewActions。每个需要添加的产品都将包括禁用的活动,以使viewActions扩展消失。我只想在RCP应用程序中添加这一点,您可以使用首选项
IRegistryConstants.PROP\u REGISTRY\u NULL\u USER\u TOKEN
将用户TOKEN设置为NULL,然后不需要反射。看见