連載
» 2006年01月28日 10時00分 公開

作って覚えるEclipseプラグイン(3):テキストエディタプラグインの実装 (1/2)

[竹添直樹, 岡本隆史,NTTデータ]

 Eclipseを開発環境として利用する場合、コードを編集するためのテキストエディタは最も重要な要素といってもよいでしょう。テキストエディタには強調表示、コード補完など多くの機能が要求されます。今回はPDEのテンプレートとして用意されているXMLエディタを通してテキストエディタの実装方法を解説します。

テンプレートによるXMLエディタの生成

 以下の手順でXMLエディタを生成します。

1.まずは連載第1回「いちばん簡単なEclipseプラグイン」と同じ手順でプラグイン・プロジェクトを作成します。

 ここではプラグインIDをjp.sf.amateras.xmleditor、プラグイン名をXMLEditor Plug-in、プラグインクラスをjp.sf.amateras.xmleditor.XMLEditorPluginとしました(図1)。

図1 プロジェクトの作成 図1 プロジェクトの作成

2.テンプレートの選択画面で[エディター付きプラグイン]を選択して[終了]をクリックします(図2)。

図2 テンプレートの選択 図2 テンプレートの選択

 これで、強調表示機能を備えたXMLエディタが生成されます。ランタイム・ワークベンチを起動して動作を確認してみます。適当なプロジェクトに拡張子が.xmlのファイルを作成し、エディタで開いてみてください。XMLが図3のように色分けされて表示されるはずです。

図3 テンプレートで作成したXMLエディタ 図3 テンプレートで作成したXMLエディタ

 では、ソースを見ていきましょう。まずはplugin.xmlです。

   リスト1 
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>

  <extension
     point="org.eclipse.ui.editors"> ……(1)
   <editor
      name="Sample XML Editor"
      extensions="xml"
      icon="icons/sample.gif"
      contributorClass=
          "org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
      class="jp.sf.amateras.xmleditor.editors.XMLEditor"
      id="jp.sf.amateras.xmleditor.editors.XMLEditor">
   </editor>
  </extension>

</plugin>

 (1)で指定している org.eclipse.ui.editors がエディタの拡張ポイントです。editor要素で実際のエディタの情報を記述しています。editor要素で指定できる主な属性は以下のとおりです。

属性名 説明
id エディタのIDを指定します
name エディタの名前を指定します
icon エディタのアイコンを指定します
extensions エディタに関連付けるファイルの拡張子を指定します。複数ある場合はカンマで区切って指定します
class*1 エディタの実装クラスとしてorg.eclipse.ui.IEditorPartを実装したクラスを指定します
launcher*1 org.eclipse.ui.IEditorLauncherを実装したクラスを指定します。ランチャーはファイルを外部エディタで開く場合に使用します
contributorClass*2 org.eclipse.ui.IEditorActionBarContributorの実装クラスを指定します。エディタのアクションをメニューバーやツールバーに表示します
default エディタに関連付けるファイルの名前を指定します。複数ある場合はカンマで区切って指定します
表1 editor要素で指定可能な主な属性
*1:class、launcher、commandはいずれか1つのみ指定可能。
*2:contributorClassはclassを指定した場合のみ指定可能。

 エディタの実装クラスであるXMLEditorクラスはリスト2のような実装になっています。

   リスト2
package jp.sf.amateras.xmleditor.editors;

import org.eclipse.ui.editors.text.TextEditor;

public class XMLEditor extends TextEditor {

    private ColorManager colorManager; ……(1)

    public XMLEditor() {
       super();
       colorManager = new ColorManager();
       setSourceViewerConfiguration(
           new XMLConfiguration(colorManager)); ……(2)
       setDocumentProvider(new XMLDocumentProvider()); ……(3)
    }
    public void dispose() {
       colorManager.dispose();
       super.dispose();
    }

}

 テキストエディタとしての基本機能は、スーパークラスのorg.eclipse.ui.editors.text.TextEditorで実装されているためかなりシンプルです。(1)のColorManagerはシンタックスハイライトに使用する色を管理するためのクラスです。SWTでは作成したColorオブジェクトは必要がなくなった時点で自分で廃棄するコードを記述する必要があるため、ColorManagerで一元管理し、エディタのdisposeメソッド内で廃棄するようになっています。

 実際にハイライト処理を実現するうえで肝となるのはコンストラクタの(2)(3)でセットしているXMLConfigurationとXMLDocumentProviderになります。ソースコードの詳細な説明に移る前に、まずはテキストエディタの構成要素を整理しておきましょう(図4)。

図4 テキストエディタの構成要素 図4 テキストエディタの構成要素

■IDocument(ドキュメント)

 編集対象となるオブジェクトです。テキストの操作、位置の管理、テキストの変更の通知などを行います。

■IDocumentProvider(ドキュメントプロバイダ)

 ドキュメントの生成と管理を行います。ドキュメントの変更を監視し、エディタへ通知を行います。また、ブックマークやブレークポイントといったアノテーションの作成も担当します。

■IDocumentPartitioner(ドキュメントパーテーショナ)

 ドキュメントを意味的な区域(パーティション)に分割します。パーティションことにコンテンツアシストやシンタックスハイライトといった機能を適用することが可能です。

■SourceViewerConfiguration(ソースビューアコンフィグレーション)

 ダブルクリック時の動作、シンタックスハイライト、コンテンツアシストなど、エディタのさまざまな動作をカスタマイズするためのエントリポイントとなるクラスです。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。