我为某种语言编写了一个基于Xtext的插件。我现在有兴趣创建一个新的独立视图(作为一个单独的插件,虽然它需要我的第一个插件),它将与当前活动的DSL文档交互 - 特别是,与解析的模型Xtext交互(我认为它被称为Ecore模型?)。我该如何处理?
如果我在初始化视图时做了类似的事情,我看到我可以获得XtextEditor
的实例:
getSite().getPage().addPartListener(new MyListener());
然后,在MyListener
中,覆盖partActivated
和partInputChanged
以获得IWorkbenchPartReference
,这是对XtextEditor
的引用。但是我从这里做什么?这甚至是解决这个问题的正确方法吗?我应该使用Xtext方面的一些通知功能吗?
答案 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()) {
...
}
}
});