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;
}
}
これの何が問題なのですか?どこで何かを見逃したのですか?