2009-07-30 35 views
3

Eclipseでは、ダウンストリームプラグインの拡張ポイントを公開して使用できます。 レジストリから返されたポイントの拡張子をループするときに、返される順序を知り/制御する方法があります。Eclipseエクステンションポイントのエクステンションの並べ替え/並べ替え

eclipseはどのようにディスク上のファイルの順番で拡張子を見つけるのですか?

更新:
私は日食では、このように私は与え、一例でしょうユースケース

をしたいと思う理由を誰かがあなたがMultiPageEditorプラグインの例を実行する場合は、3つのタブでエディタを作成します尋ねました。拡張機能を公開してタブを追加できるようにして、ランダム/ OS固有のファイル順序の順序ではなく、特定の/論理的/文脈的な順序で追加したいと思った。

答えて

2

私は拡張ポイントの寄与を注文したい場合は、INT 10

のように私は、10、20、30の数字を使用して...あなたは簡単で間の要素を置くことができるので、私は、優先順位番号を追加未来。これは、ボタン、コンポジット、または名前で注文できないすべての注文に使用できます。

拡張ポイントを定義するために使用しているインターフェイスにこの優先度を追加できます。または、拡張ポイント記述でフィールドを使用することもできます。

すべての拡張ポイントの寄付を集めるときは、寄付を返す前に優先度を求めて寄付をリンクリストに並べることができます。

String tmpExtensionPoint = "EXTENSION POINT ID"; //$NON-NLS-1$ 
IExtensionRegistry registry = Platform.getExtensionRegistry(); 
IConfigurationElement[] elements = registry.getConfigurationElementsFor(tmpExtensionPoint); 

    List references = new LinkedList(); 
    if (elements != null && elements.length > 0) { 
     for (int i = 0; i < elements.length; i++) { 
      try { 
       Object obj = elements[i].createExecutableExtension("class"); 
       references.add((IExtensionPointInterface)obj); //$NON-NLS-1$ 
      } catch (CoreException e) { 
       logger.error("Get Extension Point For " + tmpExtensionPoint, e); 
      } 
     } 
    } 

//... 
//ORDER here 

return references; 

ためのコードは次のようなものによってできた:

Arrays.sort(references, new Comparator() { 
     public int compare(Object arg0, Object arg1) { 
      if (!(arg0 instanceof IExtensionPointInterface)) { 
       return -1; 
      } 

      if (!(arg1 instanceof IExtensionPointInterface)) { 
       return -1; 
      } 

      IExtensionPointInterface part0 = (IExtensionPointInterface)arg0; 
      IExtensionPointInterface part1 = (IExtensionPointInterface)arg1; 

      if (part0.getPriority() < part1.getPriority()) { 
       return -1; 
      } 

      if (part0.getPriority() > part1.getPriority()) { 
       return 1; 
      } 

      return 0; 
     } 
    }); 
2

構文解析または返される順番を直接制御することはできませんが、これは問題ではありません。彼らが特定の順序で返されることはなぜあなたにとって重要なのですか?それは価値があるのですが、各拡張ロケーションが定義された順に読み込まれ、そのロケーションの各プラグインはアルファベット順に読み込まれますが、処理が非常に異なるため、P2がEclipse 3.4に入ってから変更されている可能性があります。私はあなたがこの知識に関与していないと思われるので、読んでも何の発注も信頼しません。

寄付を発注する必要がある場合は、レジストリからその拡張子を取得したら、それらをリストに追加し、コンパレータを実装し、必要に応じて並べ替えることができます。または、順番にそれらを反復し、処理する前に結果のオブジェクトを並べ替えることができます。

このarticleは少し古いですが、私はまだ有効だと思います。これは、拡張ポイント処理に関するいくつかの指針を提供します。