如何使用commands框架为Eclipse中的特定对象类型创建可重定目标的操作?

如何使用commands框架为Eclipse中的特定对象类型创建可重定目标的操作?,eclipse,command,selection,Eclipse,Command,Selection,Eclipse命令框架允许您创建通用命令和处理程序。但是,当您创建以“复制”为目标的扩展点时,运行时会抱怨: <extension point="org.eclipse.ui.handlers"> <handler class="example.Handler" commandId="org.eclipse.ui.edit.copy"/> </extension> !MESSAGE Conflicting handlers for org.eclipse.

Eclipse命令框架允许您创建通用命令和处理程序。但是,当您创建以“复制”为目标的扩展点时,运行时会抱怨:

<extension point="org.eclipse.ui.handlers">
 <handler class="example.Handler" commandId="org.eclipse.ui.edit.copy"/>
</extension>

!MESSAGE Conflicting handlers for org.eclipse.ui.edit.copy: {org.eclipse.ui.internal.handlers.WidgetMethodHandler:copy} vs {example.Handler}

使用commands框架为特定类型的对象提供特定复制操作的正确方法是什么?

您的
activeWhen
子句看起来可以接受。重要的是你选择的是什么。例:

  <handler class="z.ex.cmd.handlers.LongCopyHandler"
        commandId="org.eclipse.ui.edit.copy">
     <activeWhen>
        <with variable="selection">
           <iterate ifEmpty="false"
                 operator="and">
              <adapt type="org.eclipse.core.resources.IMarker"/>
           </iterate>
        </with>
     </activeWhen>
  </handler>


我最初尝试在activeWhen表达式中使用
instanceof
,以访问markers视图中的IMarker,但没有成功(对象没有实现IMarker)。我必须
调整
它们以使我的处理程序正常工作。这也适用于Package Explorer中的.java文件,它们适用于
IResource
,但实际上它们是IJavaElements或其他东西。

Paul Webster可能是cmd处理程序问题的最佳选择。我不确定他是否监控软件。是的,他在这里()但我不知道他是否定期监控。不过,我觉得如果他这样做的话,这将是一个很好的地方来承载一个答案。这是在一个具有我自己的自定义数据类型的查看器中,因此它绝对是正确的类(而不是需要调整的类)。警告(冲突处理程序)是意料之中的事吗?
  <handler class="z.ex.cmd.handlers.LongCopyHandler"
        commandId="org.eclipse.ui.edit.copy">
     <activeWhen>
        <with variable="selection">
           <iterate ifEmpty="false"
                 operator="and">
              <adapt type="org.eclipse.core.resources.IMarker"/>
           </iterate>
        </with>
     </activeWhen>
  </handler>