我需要获取Eclipse Java编辑器中当前选择的AST。基本上,我想将选定的Java代码转换为其他形式(可能是其他语言或XML等)。所以我猜想我需要获取该选择的AST。目前我只能获取简单文本作为选择。是否有解决此类问题的方法?非常感谢!
ITextEditor editor = (ITextEditor) HandlerUtil.getActiveEditor(event);
ITextSelection sel = (ITextSelection) editor.getSelectionProvider().getSelection();
ITypeRoot typeRoot = JavaUI.getEditorInputTypeRoot(editor.getEditorInput());
ICompilationUnit icu = (ICompilationUnit) typeRoot.getAdapter(ICompilationUnit.class);
CompilationUnit cu = parse(icu);
NodeFinder finder = new NodeFinder(cu, sel.getOffset(), sel.getLength());
ASTNode node = finder.getCoveringNode();
使用方法org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.getActiveEditorJavaInput()
。它返回当前活动编辑器中编辑的Java元素。返回类型是org.eclipse.jdt.core.IJavaElement
,但如果正在编辑的是Java文件,则运行时类型将是org.eclipse.jdt.core.ICompilationUnit
。
要获取AST,即org.eclipse.jdt.core.dom.CompilationUnit
,可以使用以下代码:
public static CompilationUnit getCompilationUnit(ICompilationUnit icu,
IProgressMonitor monitor) {
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(icu);
parser.setResolveBindings(true);
final CompilationUnit ret = (CompilationUnit) parser.createAST(monitor);
return ret;
}
ASTParser.newParser()
。