我需要获得AST在Java编辑器FO日食当前选择。 基本上我想选择的Java代码转换到一些其他形式(可能其他一些语言或XML等)。 所以我想,我需要为选择的AST。 目前,我能够得到选择为简单的文本。 有没有什么办法了这样的问题呢? 由于已经!!
Answer 1:
有许多用于JDT插件开发者方便的工具,尤其是AST查看这确实相当多,你在找什么。 所以,你需要做的就是抢AST查看代码,并检查它是如何做。
该插件可以从下面的更新站点: http://www.eclipse.org/jdt/ui/update-site
使用插件间谍(阅读更多关于它在这篇文章 ),开始挖掘到视图类。
你旅行到JDT的没有价值的(往往无证)区,开发代码挖掘技能会大大提高你的表现。
Answer 2:
下面的代码为您提供从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插件。
Answer 3:
使用方法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类,这是非常有用的在这里阐明。
Answer 4:
IIRC,在Eclipse AST每个节点包含一个偏移量。 所有你需要做的是计算偏移量,你有兴趣,然后走AST选择这些偏移中的节点代码的一部分。
文章来源: AST for current selected code in eclipse editor?