2016-12-03 39 views
0

我正在为我的dsl语言(我使用xtext开发它)开发一个新的插件。在我的插件中,我希望每个* .mydsl文件都应该查看在打开的文件中定义的变量的图形。插件开发和Xtext:扩展ViewPart并不知道如何获得活动文件的AST

为此,我需要在打开的文件中定义一些EObject。 如果我有一些EObject,我可以通过AST来获取图表所需的所有变量。

所以,我扩展ViewPart时课,我试图找到在这个代码打开当前文件:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 

但是,我不知道如何从IWorkbenchPage得到一些EObject类型,可有人告诉我我该怎么做? (或者,将工作的另一种方式)

-------- UPDATE:---------

我发现很难走过去的文件的AST通过获取EObject(因为我想使用的功能如:EcoreUtil2.getContainerOfType(context,Model) ,它只能在xtext项目中使用)。 不是找到EObject,有没有办法获得文件的AST?我想要在活动文件中定义的特定类型的所有变量。 (当前选项卡中的文件) 谢谢!

+0

IWorkbenchPage包含当前在页面上打开的所有视图和编辑器,该页面没有输入文件。您需要找到活动的编辑器,并找到一种方法从中获得您想要的内容。 –

+0

谢谢!这是我做的'IWorkbenchPage page = PlatformUI.getWorkbench()。getActiveWorkbenchWindow()。getActivePage(); IEditorPart activeEditor = page.getActiveEditor();'我怎样才能得到文件的AST?或者特定类型的所有变量? – RoG

回答

1
IEditorPart activeEditor = page.getActiveEditor(); 
if (activeEditor instanceof XtextEditor) { 
    XtextEditor xtextEditor = (XtextEditor) activeEditor; 
    xtextEditor.getDocument().readOnly((XtextResource resource) -> { 
     EObject content = resource.getContents().get(0); 
     // Do your AST related stuff here 
     ... 

     // Optionally return a result 
     return null; 
    }); 
} 
+0

谢谢!!!!!!!!!! – RoG

+0

您知道是否有像我可以使用的'EcoreUtil2.getAllContentsOfType(p,Var)'方法吗?或者如果有一种方法,我可以在我的插件中使用这种方法? (我用它来开发mydsl语言)。这一行:'EObject content = resource.getContents()。get(0);'从活动文件返回EObject,这很好!但是,我不知道如何去了解AST,我没有找到办法。 – RoG

+0

如果要搜索整个内容以查找特定类型的实例,可以使用content.eAllContents()返回的迭代器,并按照您要查找的类型进行过滤。 –