2

いくつかの言語用に Xtext ベースのプラグインを作成しました。私は現在、現在アクティブな DSL ドキュメントと対話する新しい独立したビューを作成することに興味があります (別のプラグインとして、最初のプラグインが必要ですが)。具体的には、解析されたモデル Xtext と対話します ( Ecore モデル?)。どうすればこれにアプローチできますか?

XtextEditorビューを初期化するときに次のようなことをすると、インスタンスを取得できることがわかりました。

getSite().getPage().addPartListener(new MyListener());

次に、 でMyListenerオーバーライドpartActivatedpartInputChangedて を取得します。IWorkbenchPartReferenceこれは への参照XtextEditorです。でも、ここからどうする?これは、この問題に対する正しいアプローチですか? 代わりに、Xtext 側から通知機能を使用する必要がありますか?

4

1 に答える 1

1

見つけた!まず、実際のドキュメントが必要です。

IXtextDocument doc = editor.getDocument();

次に、モデルにアクセスする場合:

doc.modify(new IUnitOfWork.Void<XtextResource>() { // Can also use just IUnitOfWork
    @Override public void process(XtextResource state) throws Exception {
        ...
    }
});

そして、それが変更されるたびにライブ更新を取得したい場合:

doc.addModelListener(new IXtextModelListener() {
    @Override public void modelChanged(XtextResource resource) {
        for (EObject model : resource.getContent()) {
            ...
        }
    }
});
于 2013-05-06T11:33:44.173 に答える