Eclipseプラグイン実践テクニック(2)
高機能なXMLエディタをプラグインとして作る
コードアシストの実装 |
さて、統合開発環境に求められる重要な機能の1つとして、ソースコード上での入力補完(コードアシスト)が挙げられます。もちろんEclipseのJavaエディタでもコードアシストが利用可能です。XMLの場合はDTDやXMLスキーマなどでスキーマを定義することが多く、これらのスキーマを基に補完候補を表示できると便利でしょう。今回はサンプルということでDTDを使用した補完機能を実装してみます。
図3 XMLのコードアシスト |
テキストエディタにコードアシスト機能を追加するにはエディタのコンフィグレーションクラスのgetContentAssistant()メソッドを以下のようにオーバーライドします。
リスト4 |
public class XMLConfiguration extends |
(1)のXMLAssistProcessorがコードアシスト機能を提供するクラスになります。このクラスの実装方法については後述します。ここではIDocument.DEFAULT_CONTENT_TYPEおよびXMLPartitionScanner.XML_TAGというパーティションに対してXMLAssistProcessorを設定していますが、パーティションごとに別々のアシストプロセッサを設定することもできます。
次にエディタ側でcreateAction()メソッドをオーバーライドし、コードアシストを行うアクションを登録しておく必要があります。
リスト5 |
public class XMLEditor extends TextEditor ... { |
(1)のContentAssistActionがコードアシストを行うアクションなのですが、このクラスをインスタンス化する場合は、コンストラクタにアクションのラベルやアイコンなどを指定するためのResourceBundle を渡す必要があります。ここではプラグインクラス(XMLEditorPlugin)で保持しているメッセージ用のリソースを使用していますので、プロパティファイルに以下のエントリを追加します(実際には、このアクションはメニュー等には一切表示されないため、以下のエントリは追加しなくても特に動作上の問題はありません)。
messages.properties |
... |
messages_ja.properties |
... |
最後にXMLAssistProcessorの実装を見てみましょう。アシストプロセッサはorg.eclipse.jface.text.contentassist.IContentAssistProcessorインターフェイスを実装し、ソースコードとキャレットの位置から、補完候補の一覧をorg.eclipse.jface.text.contentassist.ICompletionProposalの配列として返却します。
computeCompletionProposals()メソッドがこの処理を行っています。その他のメソッドは必要に応じて実装します。
リスト6 |
public class XMLAssistProcessor implements |
computeCompletionProposals()メソッドは実際には以下のような処理を行っています。
- XMLで使用されているDTDをインターネット上から読み込む。
- DTDParserというライブラリを使用してDTDの情報を取得する。
- キャレット位置に応じて最適な補完候補をリストアップし、CompletionProposalインスタンスを生成する。
ただ、この部分に関してはそれなりに力技が必要な処理であることと、Eclipseプラグイン開発とは直接かかわりのない部分であるため具体的な実装についてはここでは割愛します。詳細については、サンプルコードをダウンロードして参照してください。
2/4 |
INDEX |
||
第2回 高機能なXMLエディタをプラグインとして作る |
||
Page1 テキストエディタの拡張 |
||
Page2 コードアシストの実装 |
||
Page3 ダブルクリック時の動作のカスタマイズ |
||
Page4 ハイパーリンク機能 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|