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 回答