質問: Platform.getExtensionRegistry() .getConfigurationElementsFor(extensionPoint); if (config.length > 0) { return config[0]; } ``` コードでわかるように、最初に見つかった拡張子のみが使用されます。このプラグインはすでに拡張機能を提供していますが、この拡張機能はデフォルトの場合に使用されます。 今私はデフォルトの拡張機能の動作を変更する必要があるので、私は新しいプラグインを作成し、同じ拡張ポイントを拡張します。しかし、デフォルトの拡張は常に `IConfigurationElement` 配列の最初の拡張であることが分かります。 見つかった `IConfigurationElement` 配列の中で自分のプラグインを最初に表示させるにはどうすればいいですか? 既存のプラグインは他人によって書かれており、絶対に必要になるまでは変更を加えたくありません。
回答: 私はこれが拡張ポイントからいずれかの方法で拡張を得る悪い方法だと言っています。彼らが作成した特定の拡張をロードするプラグインシステムを使用したい場合は、代わりに `getConfigurationElementsFor(String namespace、String extensionPointName、String extensionId)`メソッドを使用して、他の人が使用できるようにすることができます拡張ポイント。現在のところ、どの拡張子が得られるかは分かりません。チャンスは、彼らが拡張を得ると仮定して、後でコード内にインスタンスがあり、彼らが期待する拡張を得られないときに、ClassCastExceptionがドアをノックするということです。 (システムの中でこのようなバグが一度あった) もちろん、最良の方法は、コードを変更して多くの拡張機能を処理することです! しかしあなたの質問に。 ExtensionRegistryが配列をどのように満たしているのかわかりませんが、APIは言いません。おそらく、配列の最初に置くことができる拡張の特定のバージョンを設定する方法があるかもしれません。 Extensionがどのように見つかったかを正確に知るためには、ExtensionRegistryのコードを調べなければなりません。私はそれがアルファベット順であるかもしれないと思うが、わからない。 Another way is to overload the existing plugin with your plugin and replace functionality. A very dirty approach, but in some cases it is doable. See one of my questions regarding this