Несмотря на то, что модуль и инструменты времени выполнения может уделять больше внимания "комплектным" аспектам модуля, намного чаще случается, что для модуля важнее, какие точки расширения определены и какие расширения добавлены модулями. Эту информацию предоставляет реестр расширения платформы, IExtensionRegistry.
Зачем модулю знать, какие расширения есть в системе? Давайте рассмотрим потребность в этой информации и протокол для ее получения на конкретном примере.
Вызовем повторно окно рабочей среды Показать панели, в котором содержатся все панели, установленные в платформе.
Мы знаем, что в файле plugin.xml указаны имена всех категорий и панелей для каждого модуля, добавившего расширение для org.eclipse.ui.views. Но как эта информация извлекается рабочей средой? А извлекается она из реестра расширения платформы. Следующий код - это упрощенный фрагмент кода, за основу которого взята реализация окна рабочей среды Показать панель:
... IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.views"); if (point == null) return; IExtension[] extensions = point.getExtensions(); for (int i = 0; i < extensions.length; i++) readExtension(extensions[i]); // получение информации о каждом расширении ...
Мы уже знаем, что реестр можно получить из класса Platform. Точку расширения org.eclipse.ui.views можно найти с помощью протокола в IExtensionRegistry. Сведения реестра о конкретных точках расширения или расширениях можно найти с помощью протоколов, определенных в IExtensionRegistry, IExtensionPoint и IExtension. Подробные сведения об этих протоколах приведены в документации Javadoc для этих классов.
Как только будет найдено определение нужного расширения, можно оценить конкретные его атрибуты с помощью протокола in IConfigurationElement.