読者です 読者をやめる 読者になる 読者になる

サンプルのソースを見る

プロジェクトを展開していったら、Java のソースが 2 つありました。 片方が SamplePlugin クラスで、もう一方が SampleAction クラスです。

Sample Project

名前からすると、Plug-in の実体は SamplePlugin クラスで、SampleAction クラスは Action といういうのですからボタンを押したとかメニューから選んだとかしたときにコールされるクラスなのでしょう。

で、SamplePlugin クラスですが、てっきり Plugin とかいうインタフェースを実装したクラスだと思ったら、AbstractUIPlugin クラスの派生クラスなんだそうです。派生クラスかぁ。POJO じゃないんだ ^^;;

AbstractUIPlugin のコードを見てみたら、Plugin という文字が。てっきり、インタフェースかと思ったら普通のクラスでした。うーん、なんかいまいち。でも、Plugin は BundleActivator というインタフェースを実装しているじゃありませんか。

この BundleActivator インタフェースを見てみると、2 つのメソッドが定義してありました。start メソッドと stop メソッドです。Template パターンの Template Method くさいですね。まぁ、いいや。

ところで、これらのクラスの Javadoc ってどこにあるんでしょうね? クラス名のところにマウスカーソルをもっていっても Javadoc は表示されないみたいだし。

と、ここではじめて Help を表示してみた櫻庭だったのでした。

Help には Platform Plug-in Developer Guide と JDT Plug-in Developer Guide というものがあるらしいのですが、さて私はどちらを作っているのでしょうか? よくわかりません ^^;;

まぁ、いいや。適当に見ていきましょう。

ありました、ありました。Platform Plug-in Dev. Guide に Reference - API Reference という項目があって、そこに Javadoc がありました。

Plug-in Javadoc

さっそく Plugin クラスを見てみると、やはり

The abstract superclass of all plug-in runtime class implementations.

と書いてあるとおり、すべての Plug-in の親クラスなんですね。AbsractUIPlugin クラスの他には AntCorePlugin、DebugPlugin、ResourcePlugin、ViriablesPlugin がありました。
これらのクラスのうち、最も用途にあうものを使えということでしょうか。

さて、SamplePlugin クラスの中を見ていくと、何もしてませんね ^^;;

しているとしたら、getDefault メソッドで自分自身を返していることぐらいでしょうか。でも、このメソッドは static だし、親クラスではなくてこのクラスで定義されているようだし... いったい何に使うのだろう?

一方の SampleAction クラスですが、こちらの方がわかりやすいですね。

run メソッドがコマンドパターンでコールされるメソッドでしょう。そうすると、なにやらダイアログを開いてメッセージを出すということはわかりました。

ところで、この 2 つのクラスを結びつけるのはどこなんでしょう?

コードの中には記述されていないようだし。うーむ、いまいちわからん。

いろいろ探した結果、SampleAction がどこで呼び出されるかを設定しているのが、plugin.xml であるということがわかりました。実行したときに、メニューで表示されていたのは、ここで設定していたんですね。

<plugin>

   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            label="Sample Action Set"
            visible="true"
            id="sample.actionSet">
         <menu
               label="Sample &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;Sample Action"
               icon="icons/sample.gif"
               class="sample.actions.SampleAction"
               tooltip="Hello, Eclipse world"
               menubarPath="sampleMenu/sampleGroup"
               toolbarPath="sampleGroup"
               id="sample.actions.SampleAction">
         </action>
      </actionSet>
   </extension>

</plugin>

この間、1 時間ぐらい。先が思いやられますね。

明日は Debug モードで走らせてみようと思います。