Эффективный способ получения элементов конфигурации для определенного плагина в Eclipse RCP

#eclipse-plugin #eclipse-rcp

#eclipse-плагин #eclipse-rcp

Вопрос:

Я хочу найти все расширения org.example.extension.point , объявленные в com.example.plugin . Есть ли более эффективный способ сделать это, чем выполнение

 List<IConfigurationElement> result = new ArrayList<IConfigurationElement>();
IConfigurationElement[] allConfigElements = 
    Platform.getExtensionRegistry.getConfigurationElementsFor("org.example.extension.point");
for (IConfigurationElement ice : allConfigElements) {
    if (ice.getDeclaringExtension().getNamespaceIdentifier() == "com.example.plugin")
        result.add(ice);
}
return resu<
 

?

Комментарии:

1. Альтернативой является сначала просмотр IContributor, а затем фильтрация по идентификатору точки расширения…

2. Боюсь, я не понимаю, что вы имеете в виду, не могли бы вы предоставить какой-нибудь пример кода?

Ответ №1:

Нет, других (более эффективных) способов нет (разве это недостаточно просто?;). Кроме того, я бы использовал ice.getContributor().getName() вместо ice.getDeclaringExtension().getNamespaceIdentifier()

Я действительно хотел бы знать, почему вы хотите фильтровать по конкретному участнику. — Я имею в виду, если вам нужно «знать» участника, почему вы используете точку расширения? Основная цель точки расширения — использовать инверсию управления; основная особенность использования точек расширения — незнание участника. Без обид, но, вероятно, вы используете точки расширения так, как они не предназначены…

Комментарии:

1. Мне нужно показать дерево, которое содержит пакеты и расширения, предоставляемые ими.

2. Затем посмотрите, как реализовано представление Eclipse «Подключаемый реестр», см. Класс org.eclipse.pde.internal.runtime.registry.RegistryBrowser. В этом представлении показано дерево со всеми плагинами и их расширениями.