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>

私はもともとinstanceofactiveWhen式でマーカービューのIMarkersにアクセスしようとしましたが、それは機能しませんでした(オブジェクトはIMarkerを実装していません)。adaptハンドラーを正しく機能させるために、彼らに依頼しなければなりませんでした。これは、パッケージエクスプローラーの.javaファイルにも当てはまります。これらのファイルはに適応しIResourceますが、実際にはIJavaElementsなどです。

于 2012-10-13T00:03:18.660 に答える