AST在Eclipse编辑器当前选择的代码?(AST for current selected co

2019-09-01 21:46发布

我需要获得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?