我确实创建了一个View,这些View用于多个产品,我们已经提供了。 视图放在一个功能中,这些功能不知道产品规格,功能不应该知道。
其他插件通过实现扩展点为视图提供操作,这些操作显示在视图工具栏标题中
根据系统属性(产品规范将在运行时设置),应隐藏所有提供的视图操作。
问题: 我无法找到一个类,因为删除了特殊扩展点的删除扩展名。
我知道可以删除actionSets,但是为viewActions做了类似的事情吗?
我查看了代码并找到了一个解决方案,但这是完全不可接受的,因为当我更新我的eclipse目标平台时,由于反射调用,它可能/将会中断。
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);
}
}
}
答案 0 :(得分:1)
您可以使用Product Customization修改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>
您还可以尝试Activities/Capabilities隐藏viewActions。每个需要包含禁用活动的产品都会使viewActions扩展名消失。