Удалить расширение действия просмотра во время выполнения - PullRequest
0 голосов
/ 18 ноября 2011

Я создал вид, и этот вид используется в нескольких продуктах, которые мы уже доставили.Представление помещено в функцию, и эта функция не знает спецификации продукта, и функция не должна знать.

Другие плагины вносят действия в представление, которые отображаются в заголовке панели инструментов представления, путем реализации расширения.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);
        }
    }
}

1 Ответ

1 голос
/ 18 ноября 2011

Вы можете использовать Настройка продукта для изменения расширений 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 исчезали.

...