在开发Eclipse插件时,如何访问项目&x27;s Java模型和AST根节点?

在开发Eclipse插件时,如何访问项目&x27;s Java模型和AST根节点?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我目前正在开发一个插件,它将利用Eclipse的Java模型和Eclipse的Java抽象语法树 因此,我要寻找的是一种通过我的插件获得Java模型根对象和当前Java项目的AST根节点的方法: public class SampleHandler extends AbstractHandler { public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbench

我目前正在开发一个插件,它将利用Eclipse的Java模型和Eclipse的Java抽象语法树

因此,我要寻找的是一种通过我的插件获得Java模型根对象和当前Java项目的AST根节点的方法:

public class SampleHandler extends AbstractHandler {
    public Object execute(ExecutionEvent event) throws ExecutionException {     
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
                ??? how to get the current Java project Java Model? and the AST node?
        }
}

谢谢

请参见org.eclipse.jdt.core插件和IJavaProject以及JavaCore类。使用JavaCore.create([IProject])获取IJavaProject并转到那里。

我使用以下方法获取模型:

public static IJavaModel prepareWorkspace() {
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IWorkspaceRoot workspaceRoot = workspace.getRoot();
    IJavaModel javaModel = JavaCore.create(workspaceRoot);
    return javaModel;
}

您可以在和中找到此方法和其他一些有用的Eclipse实用程序方法。

您可以从处理程序中获得选择,然后您可以决定如何使用它:

ISelection sel = HandlerUtil.getCurrentSelection(event);
if (sel instanceof IStructuredSelection) {
    // check to see if it's empty first, though
    Object obj = ((IStructuredSelection)sel).getFirstElement();
    // then have a look and see what your selection is.
}
如果有IJavaElement,则可以在模型中四处走动,直到找到要查找的点。如果您有IFile/IResource,您可以使用一些JavaCore方法来访问java模型。

看看这个

基本上

  • 选择上下文主要是一个编译单元,它本身就是一个
    ITypeRoot
  • 寻找
    ASTParser
    SharedASTProvider
    作为良好的起点

祝你好运

谢谢!如果软件实际上反映了编写它的组织,正如康威定律所建议的那样,我认为在IBM,一切都需要你和一位经理交谈,你的朋友们谁也没有听说过德米特定律!?