如何从不同的插件中获取Xtext的模型?

时间:2013-05-05 06:24:42

标签: eclipse-plugin xtext

我为某种语言编写了一个基于Xtext的插件。我现在有兴趣创建一个新的独立视图(作为一个单独的插件,虽然它需要我的第一个插件),它将与当前活动的DSL文档交互 - 特别是,与解析的模型Xtext交互(我认为它被称为Ecore模型?)。我该如何处理?

如果我在初始化视图时做了类似的事情,我看到我可以获得XtextEditor的实例:

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

然后,在MyListener中,覆盖partActivatedpartInputChanged以获得IWorkbenchPartReference,这是对XtextEditor的引用。但是我从这里做什么?这甚至是解决这个问题的正确方法吗?我应该使用Xtext方面的一些通知功能吗?

1 个答案:

答案 0 :(得分: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()) {
            ...
        }
    }
});