Я создал вид, и этот вид используется в нескольких продуктах, которые мы уже доставили.Представление помещено в функцию, и эта функция не знает спецификации продукта, и функция не должна знать.
Другие плагины вносят действия в представление, которые отображаются в заголовке панели инструментов представления, путем реализации расширения.point
- "org.eclipse.ui.viewActions"
В зависимости от системного свойства (спецификация продукта будет установлена во время выполнения), все добавленные действия представления должны быть скрыты илинет.
Вопрос: я не смог найти класс для удаления удаляющего расширения для специальной точки расширения.Я знаю, что
- WorkbenchPlugin.getDefault (). GetActionSetRegistry ()
может удалить actionSets, но существует ли что-то похожее для viewActions?
Я изучил код и нашел решение, но это совершенно неприемлемо, потому что оно может / сломается, когда я обновлю свою целевую платформу затмения, из-за вызова отражения.
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);
}
}
}