S-JIS[2013-02-04/2013-11-27] 変更履歴

Eclipseプラグイン ドキュメントクラス

Eclipseプラグイン開発のドキュメントクラスについて。


概要

org.eclipse.jface.text.IDocumentは、TextEditorでテキストを保持するクラス(インターフェース)。

代表的な具象クラスはorg.eclipse.jface.text.Document。


ドキュメントの取得

ITextEditorからIDocumentを取得する方法。[2013-11-27]

import org.eclipse.jface.text.IDocument;

import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
	ITextEditor editor = 〜;

	IDocumentProvider provider = editor.getDocumentProvider();
	IDocument document = provider.getDocument(editor.getEditorInput());

独自ドキュメントクラス

TextEditorに関連してを付けたりフォールディングアウトラインの表示範囲を決定したりするのにIDocumentを使う。
その際にパーサーを使ってIDocumentからテキストを読み込んで構文解析を行うが、解析結果は使い回せるので、共通の場所に保持しておきたい。
IDocumentは全ての場所に渡されるので、IDocumentに保持しておくのが都合がいい。
という訳で、独自のIDocumentクラスを作ってみる。

MyDocument

import org.eclipse.jface.text.Document;
public class MyDocument extends Document {
	private ParseResult ast;
	public void setParseResult(ParseResult ast) {
		this.ast = ast;
	}

	public ParseResult getParseResult() {
		return ast;
	}
}

MyDocumentProvider

ドキュメントクラスのインスタンス化はDocumentProviderで行う。

import org.eclipse.ui.editors.text.FileDocumentProvider;
public class MyDocumentProvider extends FileDocumentProvider {
	@Override
	protected IDocument createEmptyDocument() {
		return new MyDocument();
	}
}

MyEditor

import org.eclipse.ui.editors.text.TextEditor;
public class MyEditor extends TextEditor {
	/**
	 * コンストラクター.
	 */
	public MyEditor() {
		setDocumentProvider(new MyDocumentProvider());
〜
	}

MyPartitionScanner

パース結果の保持を行う場所は、パース(構文解析)を行う場所が相応しい。
ドキュメントに変更があると登録したパーティションスキャナーが呼ばれるので、そのメソッドで構文解析してドキュメントに保持すれば良さそう。

import org.eclipse.jface.text.rules.IPartitionTokenScanner;
public class MyPartitionScanner implements IPartitionTokenScanner {
	@Override
	public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) {
		MyDocument doc = (MyDocument) document;

		MyParser parser = new MyParser();
		ParseResult ast = parser.parse(doc);
		doc.setParserResult(ast);
〜
	}
}

Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま