0

IAdaptable と関連するクラスについて混乱しています。アダプター、アダプティー、適応型はどのクラスですか?

[環境]

テーブル/ツリー ビューアーのエントリのコンテキスト メニューがあります。ビューアー内の各オブジェクトの状態 (つまり、テーブル ビューアー内の行の属性値) によっては、コンテキスト メニューの特定のアクションが表示されないようにする必要があります。

これは、plugin.xml の次のような構成で実現できます。

<extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            adaptable="false"
            id="<some_id>"
            objectClass="<object_class_of_viewer_entry>">
            <visibility>
               <objectState name="buildable" value="true"/>
             </visibility>
         <action
               class="<my_action_class>"

ただし、これは、オブジェクト クラスが org.eclipse.ui.IActionFilter を実装している場合にのみ機能します。

[問題]

私のオブジェクト クラスは IActionFilter を実装できません。そのインターフェイスを変更したくありません。したがって、IAdaptable メカニズムを使用してこれを回避する必要があります。

Eclipse のドキュメントを読むと、用語 (アダプター、アダプティー、適応可能な型) に戸惑い、自分の問題に対処する方法についてまだ混乱しています。

オブジェクト クラス (上記の構成で参照される) はそのままにしておく必要があります。

私のアプローチは次のとおりでした。

<extension
         point="org.eclipse.core.runtime.adapters">
      <factory
            adaptableType="<object_class_of_viewer_entry>"
            class="MyFactory">
         <adapter
               type="org.eclipse.ui.IActionFilter">
         </adapter>
      </factory>
   </extension>

MyFactory は次のようなものです。

public class MyFactory implements IAdapterFactory {
  private static final Class[] types = {
    <object_class_of_viewer_entry>.class,
  };

  @Override
  public Object getAdapter(Object adaptableObject, Class adapterType) {
    return new <class_that_implements_IActionFilter>((<object_class_of_viewer_entry>) adaptableObject);
  }

  @Override
  public Class[] getAdapterList() {
    return types;
  }
}

これの何が問題なのですか?どこで何かを見逃したのですか?

4

1 に答える 1

0

ほとんどすべてが正しかったことがわかりました。plugin.xml で object_class_of_viewer_entry のインターフェースと実装を混同しただけです。

役立つ 2 つの記事: http://www.eclipsezone.com/articles/what-is-iadaptable/およびhttp://wiki.eclipse.org/FAQ_How_do_I_use_IAdaptable_and_IAdapterFactory%3F

于 2010-02-14T12:07:58.993 に答える