#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. В этом представлении показано дерево со всеми плагинами и их расширениями.