TweetEclipseプラグイン実践テクニック(2)高機能なXMLエディタをプラグインとして作るコードアシストの実装さて、統合開発環境に求められる重要な機能の1つとして、ソースコード上での入力補完(コードアシスト)が挙げられます。EclipseのJavaエディタでもコードアシストが利用可能です。XMLの場合はDTDやXMLスキーマなどでスキーマを定義することが多く、これらのスキーマを基に補完候補を表示できると便利でしょう。今回はサンプルということでDTDを使用した補完機能を実装してみます。XMLのコードアシストテキストエディタにコードアシスト機能を追加するにはエディタのコンフィグレーションクラスのgetContentAssistant()メソッドを以下のようにオーバーライドします。assistant;}}(1)のXMLAssistProcessorがコードアシスト機能を提供するクラスになります。このクラスの実装方法については後述します。ここではIDocument.DEFAULT_CONTENT_TYPEおよびXMLPartitionScanner.XML_TAGというパーティションに対してXMLAssistProcessorを設定していますが、パーティションごとに別々のアシストプロセッサを設定することもできます。次にエディタ側でcreateAction()メソッドをオーバーライドし、コードアシストを行うアクションを登録しておく必要があります。ここではプラグインクラス(XMLEditorPlugin)で保持しているメッセージ用のリソースを使用していますので、プロパティファイルに以下のエントリを追加します(実際には、このアクションはメニュー等には一切表示されないため、以下のエントリは追加しなくても特に動作上の問題はありません)。Assistmessages_ja.properties...ContentAssistProposal_label=コンテンツ・アシスト(&N)最後にXMLAssistProcessorの実装を見てみましょう。アシストプロセッサはorg.eclipse.jface.text.contentassist.IContentAssistProcessorインターフェイスを実装し、ソースコードとキャレットの位置から、補完候補の一覧をorg.eclipse.jface.text.contentassist.ICompletionProposalの配列として返却します。computeCompletionProposals()メソッドがこの処理を行っています。その他のメソッドは必要に応じて実装します。null;}...}computeCompletionProposals()メソッドは実際には以下のような処理を行っています。XMLで使用されているDTDをインターネット上から読み込む。DTDParserというライブラリを使用してDTDの情報を取得する。キャレット位置に応じて最適な補完候補をリストアップし、CompletionProposalインスタンスを生成する。この部分に関してはそれなりに力技が必要な処理であることと、Eclipseプラグイン開発とは直接かかわりのない部分であるため具体的な実装についてはここでは割愛します。詳細については、サンプルコードをダウンロードして参照してください。(2017/5/9)ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。(2017/4/6)ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。(2017/4/3)初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。