拡張ポイントとレジストリー

プラグインの「バンドル」の局面は、ランタイム・プラグインおよびランタイム・ツールに関係することもありますが、より一般的には、プラグインは、プラグインによってどのような拡張ポイントが定義されているか、およびプラグインによってどのような拡張がコントリビュートされるかということに関係しています。この情報はプラットフォーム拡張レジストリー 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
	...

上の例は、プラットフォーム・クラスからレジストリーを取得できることを示しています。 IExtensionRegistry のプロトコルを使用して、org.eclipse.ui.views という拡張ポイントを検索します。特定の拡張ポイントまたは拡張に関するレジストリー内の情報は、 IExtensionRegistryIExtensionPoint、および IExtension に定義されたプロトコルを使用して検索できます。これらのクラスの javadoc には、レジストリー・プロトコルに関する詳細情報が示されています。

目的の拡張定義が見付かったら、 IConfigurationElement のプロトコルを使用して、拡張の個々の属性を確認できます。