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
使用命令框架为特定类型的对象提供特定复制操作的正确方法是什么?