扩展点和注册表

当运行时插件和运行时工具对插件的“bundle”方面感兴趣时,插件关心已由插件定义了哪些扩展点以及插件添加了哪些扩展是非常正常的。此信息由平台扩展注册表 IExtensionRegistry 提供。

为什么插件可能想知道提供了哪些扩展?具体示例将帮助显示对此信息的需要以及用于获取信息的协议。

重新调用工作台显示视图对话框,该对话框将显示已经安装在平台中的所有可用视图。

带有 Hello 条目的“显示视图”对话框

我们知道,所有已添加的视图的类别名称和视图名称是在为 org.eclipse.ui.views 添加扩展的任何插件的 plugin.xml 文件中指定的。但是,工作台如何找到此信息呢?从平台扩展注册表中查找。以下代码是基于显示视图对话框的工作台实现的简化片段:

	...
	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]);  //get the information about each extension
	...

我们在上面已经知道可以从 Platform 类中获得该注册表。IExtensionRegistry 中的协议用来查找名为 org.eclipse.ui.views 的扩展点。可以使用 IExtensionRegistryIExtensionPointIExtension 中定义的协议来找到注册表中有关特定扩展点或扩展的信息。这些类的 Javadoc 提供了有关注册表协议的详细信息。

一旦找到了感兴趣的扩展定义,就可以使用 IConfigurationElement 中的协议来检查扩展的各个属性。