Eclipseプラグインを作ってみよう!

第4回 Eclipse Formsによる“Hello World!”

この記事を読むのに必要な時間:およそ 6 分

スーパークラスの変更

先ほどマニフェストエディターで作成したFormDesignerEditorを見てみましょう。importされているファイルを見てもわかりますが,どこにもEclipse Formsが使われていません。では,どのようにしてEclipse Formsを使ってエディターを作成するか,ヘルプを使って調べてみましょう。

Eclipse Forms用の章があればよいのですが,すでにEclipseのUIとして統合されているためか,別の章立てにはなっていません。そこでEclipse FormsのAPIリファレンスを見てみることにします。⁠Platform Plug-in Developer Guide⁠⁠→⁠Reference⁠⁠→⁠API Reference」でEclipseが提供するプラグインが公開するAPIを参照できます。⁠org.eclipse.ui.forms⁠で始まるパッケージがEclipse Formsのパッケージです。

4つのパッケージがありますが,その中でorg.eclipse.ui.forms.editorというエディターで使えそうなパッケージがあります。

org.eclipse.ui.forms.editorパッケージ

org.eclipse.ui.forms.editorパッケージ

FormPageクラスはFormEditorクラスに追加して使用すると記述されているので,FormEditorクラスを利用することにします。継承関係を調べてみるとorg.eclipse.ui.part.EditorPartクラスを継承しているので問題なく利用できます。

それではFormDesignerEditorクラスを修正していきます。具体的な手順は下記のとおりです。

  1. 継承するクラスをEditorPartクラスからFormEditorクラスに変更します
  2. Ctrl + Shift + o でインポートを再編成します
  3. 現在のメソッドをすべて削除します
  4. “public class FormDesignerEditor⁠にカーソルを合わせて,Ctrl + 1でクイック・フィックスを表示します
  5. 「実装されていないメソッドを追加します。」をクリックします
  6. 再び,Ctrl + Shift + o でインポートを再編集します

これでFormEditorクラスを継承するように変更しましたので,Eclipseアプリケーションを実行して確認しましょう。2回目からはCtrl + F11で前回実行した環境をデバッグなしで実行することができます。

実行してみるとアサーションで失敗します。今度はエディター上の[Detail >>]ボタンをクリックし,詳細をスタックトレースを見てみます。

スタックトレース

スタックトレース

実装したFormDesignerEditorに近いクラスとしては,FormEditorクラスのsetActivePageメソッドで失敗しています(4行目⁠⁠。つまり表示するページがないためにアサーションエラーになっていることがわかります。

Eclipse Formsによる“Hello World!”

それでは表示するページを作成しましょう。FormEditorクラスのAPIドキュメント(ヘルプ)を見てみると,抽象メソッドとして定義されているaddPages()メソッドをaddPage()メソッドを使って実装するように記述されています。addPage()メソッドはいくつかのインタフェースを用意していますが,引数として渡すオブジェクトの基本はFormPageオブジェクトです。作成するページによってはFormPageクラスを継承した新たなクラスを作成する必要がありますが,今は⁠Hello World!⁠を出力したいだけなので,ここでは無名クラスを使って実装します。

addPages()メソッドの実装

protected void addPages() {
    FormPage page = new FormPage(this, null, null) {
        protected void createFormContent(IManagedForm managedForm) {
            managedForm.getForm().setText("Hello World!");
        }
    };
    
    try {
        addPage(page);
    } catch (PartInitException e) {
        e.printStackTrace();
    }
}

それでは実行してみましょう。無事,⁠Hello World!⁠を出力することができました。

Eclipse Formsによる⁠Hello World!”

Eclipse Formsによる“Hello World!”

おわりに

今回は依存関係,拡張ポイントの設定からEclipse Formsを使った実装までを説明しました。Eclipseプラグインの開発はヘルプやサンプルを如何に利用するかが鍵となります。そこで本連載では,可能な限り,私がどこにある情報を参考にして設定・実装しているかをお見せしています。ヘルプやサンプルの活用方法を学ぶことで,ほかのEclipseプラグインを開発できる応用力を身につけていただければ幸いです。

次回は設計の参考にしたマニフェストエディターの実装を参照し,フォームデザイナーの実装方針を検討します。

著者プロフィール

松藤秀治(まつふじひではる)

Piece Frameworkのプログラマー。担当はEclipseのプラグインとして開発されているPiece Frameworkの統合開発環境Piece_IDE。2007年5月に株式会社アイテマンを設立。