我需要在eclipse的java编辑器中获取当前选择的AST。 基本上我想将选定的java代码转换为其他形式(可能是其他语言或XML等)。所以我想,我需要获得选择的AST。 目前,我能够将选择作为简单文本。有没有办法解决这个问题? 谢谢!!
答案 0 :(得分:7)
JDT插件开发人员有许多方便的工具,特别是AST View,它可以满足您的需求。因此,您需要做的就是获取AST View的代码并检查它是如何完成的。
可以从以下更新站点安装该插件:http://www.eclipse.org/jdt/ui/update-site
使用插件间谍(在this article中阅读更多相关内容)开始深入了解视图类。
您正在前往JDT的不那么琐碎(通常没有记录)的领域,开发您的代码挖掘技能将大大提高您的表现。
答案 1 :(得分:4)
以下代码为您提供CompilationUnitEditor中当前所选代码的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();
JavaUI是JDT UI插件的入口点。
答案 2 :(得分:1)
使用方法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;
}
请记住,这是针对Java> = 5.对于早期版本,您需要将参数切换为ASTParser.newParser()
。
我意识到这个问题已得到解答,但我想了解一下EditorUtility类,这在这里非常有用。
答案 3 :(得分:0)
IIRC,Eclipse AST中的每个节点都包含一个偏移量。您需要做的就是计算您感兴趣的代码部分的偏移量,然后走AST来选择那些偏移内的节点。