0

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}

如果您添加一个activeWhen子句,以便仅在查看器中选择特定类型的对象时调用特殊处理程序,那么当您尝试复制时会出现异常:

<extension point="org.eclipse.ui.handlers">
 <handler class="example.Handler" commandId="org.eclipse.ui.edit.copy">
     <activeWhen>
        <with
              variable="selection">
           <iterate
                 ifEmpty="false"
                 operator="or">
              <instanceof
                    value="sample.Class">
              </instanceof>
           </iterate>
        </with>
     </activeWhen>
   </handler>
</extension>

Caused by: org.eclipse.core.commands.NotHandledException: There is no handler to execute for command org.eclipse.ui.edit.copy

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

4

1 回答 1

0

你的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>

我最初尝试instanceof在我的 activeWhen 表达式中访问标记视图中的 IMarker,但这不起作用(对象不实现 IMarker)。我不得不让adapt他们让我的处理程序正常工作。这也适用于包资源管理器中的 .java 文件,它们适应IResource但它们实际上是 IJavaElements 或其他东西。

于 2012-10-13T00:03:18.660 回答