テキストエディタのJavaファイルを保存(または理想的に開く)するたびに実行するEclipseプラグイン(Indigoで開発された)にハンドラがあります。私が集める限り、これを達成するには2つの方法があります:Eclipseプラグインでハンドラを実装する
- プログラムでは
CommandService
API経由です。コンフィギュレーションを使用して
plugin.xml
に私はこれらの両方を試してみました。このような
public class Activator extends AbstractUIPlugin {
@Override
public void start(final BundleContext context) throws Exception {
super.start(context);
ICommandService commandService = (ICommandService) PlatformUI
.getWorkbench().getService(ICommandService.class);
commandService.addExecutionListener(new MyListener());
plugin = this;
}
...
}
public class MyListener implements IExecutionListener {
@Override
public void postExecuteSuccess(final String commandId, final Object returnValue) {
System.out.println("PostEventSuccess:" + commandId);
}
@Override
public void preExecute(final String commandId, final ExecutionEvent event) {}
@Override
public void notHandled(String commandId, NotHandledException exception) {}
@Override
public void postExecuteFailure(String commandId, ExecutionException exception) {}
}
と方法2:このような方法1
<extension point="org.eclipse.ui.handlers">
<handler
commandId="org.eclipse.ui.file.save"
class="mypackage.MyHandler">
<activeWhen>
<with variable="activeWorkbenchWindow">
<instanceof value="org.eclipse.ui.IWorkbenchWindow"/>
</with>
</activeWhen>
</handler>
</extension>
方法1.は、私のすべてのリスナーを実行しません。方法2は、ハンドラが実行されるという点では機能しますが、ハンドラはデフォルトのハンドラを置き換えるようです。ユーザーがファイルを保存しようとすると、ハンドラは実行されますが、ファイルは保存されません。ハンドラ自体はうまくいくようです(私はそれを実行するメニュー項目を作成してテストしました)。
方法1.現在は廃止予定ですか、またはサービスを正しく実装していませんか?方法2.ファイルを保存するにはどうしたらよいですか?ハンドラからデフォルトハンドラを実行できますか?
これらの2つはプログラム的であり、もう1つは宣言的である点で違いはありません。私は、コマンドハンドラを定義するのは間違っていると思います。コマンドが実行されたことを通知するのではなく、コマンドの実行を処理します。たぶん私は最初の方法で何かを掘り起こすでしょう。 –
プラグインが有効になっていること、つまり 'start'のコードが実際に実行されたことは確実ですか? –
良い質問です。私がいくつかの 'println'ステートメントをActivatorとListenerに置くと、そのコードが実行されていないかのように見えます。しかし、設定は正しい 'Activator'クラスを指しています。非常に奇妙な。 – snim2