2013-05-05 56 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()) { 
      ... 
     } 
    } 
}); 
相關問題