Plug-in Spyの仕組み(概要)

Plug-in SpyをEclipse 3.3で利用可能にする作業を通じて、Plug-in Spyソースコードを読むことで、Plug-in Spyの仕組みをざっくりと理解することができました。

最初にPlug-in Spyのポップアップ画面を見たとき、ALT+SHIFT+F1を押した際にマウスカーソルの真下にあるアクティブなViewPartやWizard等のクラス情報やプラグイン情報をどうやって抽出するんだろう?と疑問に思っていました。

さぞかしPlug-in Spyで難しいことをやっているのだろう、とソースコードを読んでみると、意外にもそうではありませんでした。上記のようなクラス情報は、Eclipse 3.3から導入されたPlatform Command Frameworkが全て提供してくれることがわかりました。

Platform Command Frameworkの拡張ポイントにイベントハンドラキーバインド等を登録しておきます。登録したキーバインド(Plug-in Spyの場合、ALT+SHIFT+F1)が押されると、ExecutionEventオブジェクトが登録したイベントハンドラに渡されます。そして、Platform Command FrameworkにはHandlerUtilなるクラスがあり、なんと、例えば以下のようなメソッドを備えています。

  • getActiveEditor(ExecutionEvent)
  • getActivePart(ExecutionEvent)
  • getActiveShell(ExecutionEvent)
  • getCurrentSelection(ExecutionEvent)

お察しのとおり、上記メソッド群はExecutionEventオブジェクトを介してコマンドが発行された際にアクティブだったViewPartやShellを返してくれます。

Plug-in Spyは、イベントハンドラ内でHandlerUtilクラスを使って容易にクラス情報を得ていたのです。プラグイン情報(ID等)については、

IWorkbenchPart part = HandlerUtil.getActivePart(event);
String pluginId = part.getSite().getPluginId();

などなどしながら得ています。