在开发Eclipse插件时,如何访问项目&x27;s Java模型和AST根节点?
我目前正在开发一个插件,它将利用Eclipse的Java模型和Eclipse的Java抽象语法树 因此,我要寻找的是一种通过我的插件获得Java模型根对象和当前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
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,一切都需要你和一位经理交谈,你的朋友们谁也没有听说过德米特定律!?