문제

나는 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;
  }
}

이것에 대해 무엇이 잘못 되었습니까? 내가 어디서 뭔가를 놓쳤습니까?

도움이 되었습니까?

해결책

거의 모든 것이 정확했습니다. Plugin.xml에서 객체 _class_of_viewer_entry의 인터페이스와 구현을 간단히 혼합했습니다.

도움이 된 두 기사 : http://www.eclipsezone.com/articles/what-is-iadaptable/ 그리고 http://wiki.eclipse.org/faq_how_how_do_i_use_iadaptable_and_iadapterfactory%3f

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top