Точки расширения и реестр

Несмотря на то, что модуль и инструменты времени выполнения может уделять больше внимания "комплектным" аспектам модуля, намного чаще случается, что для модуля важнее, какие точки расширения определены и какие расширения добавлены модулями. Эту информацию предоставляет реестр расширения платформы, IExtensionRegistry.

Зачем модулю знать, какие расширения есть в системе? Давайте рассмотрим потребность в этой информации и протокол для ее получения на конкретном примере.

Вызовем повторно окно рабочей среды Показать панели, в котором содержатся все панели, установленные в платформе.

Окно диалога Показать панель с записью Hello

Мы знаем, что в файле 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.