2013-05-05 71 views
0

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

我看到了,如果我初始化我的看法时,做这样的事情,我可以得到的XtextEditor一个实例:

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

,然后在MyListener,覆盖partActivatedpartInputChanged得到一个IWorkbenchPartReference,这是一个参考到XtextEditor。但是我在这里做什么?这是否正确解决这个问题?我应该改用Xtext方面的一些通知功能吗?

回答

0

找到了!首先,你需要一个实际的文档:

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()) { 
      ... 
     } 
    } 
}); 
相关问题