Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java eclipse编辑器中当前选定代码的AST?_Java_Eclipse_Editor_Selection - Fatal编程技术网

Java eclipse编辑器中当前选定代码的AST?

Java eclipse编辑器中当前选定代码的AST?,java,eclipse,editor,selection,Java,Eclipse,Editor,Selection,我需要在eclipse的java编辑器中获取当前选择的AST。 基本上,我希望将所选java代码转换为其他形式(可能是其他语言或XML等)。所以我想,我需要得到选择的AST。 目前,我可以得到简单的文本选择。有没有办法解决这个问题? 已经谢谢了 对于JDT插件开发人员来说,有很多方便的工具,尤其是能满足您所需的功能的。因此,您所需要做的就是获取AST视图的代码并检查它是如何完成的 可以从以下更新站点安装插件: 使用plugin spy(在中了解更多信息)开始深入查看视图类 您正在进入JDT中不

我需要在eclipse的java编辑器中获取当前选择的AST。 基本上,我希望将所选java代码转换为其他形式(可能是其他语言或XML等)。所以我想,我需要得到选择的AST。 目前,我可以得到简单的文本选择。有没有办法解决这个问题?
已经谢谢了

对于JDT插件开发人员来说,有很多方便的工具,尤其是能满足您所需的功能的。因此,您所需要做的就是获取AST视图的代码并检查它是如何完成的

可以从以下更新站点安装插件:

使用plugin spy(在中了解更多信息)开始深入查看视图类


您正在进入JDT中不那么琐碎(而且通常没有文档记录)的领域,开发代码挖掘技能将极大地提高您的性能。

IIRC,Eclipse AST中的每个节点都包含一个偏移量。您只需计算感兴趣代码部分的偏移量,然后遍历AST以选择这些偏移量中的节点。

使用方法
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类,它在这里非常有用。

以下代码为您提供了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是JDTUI插件的入口点

谢谢,我刚刚开始浏览代码,我已经感到乐观了。会让你知道的。@zvikico,谢谢。现在,我可以获得所选文本的ASTNode。现在我需要一个ASTVisitor,它可以为我提供完全解析的节点代码。i、 每个类型名称都应该是完全限定的名称,这样我就可以序列化它并对其进行一些处理。有什么想法吗??谢谢我可以得到字符串x形式的代码;但是我需要的是java.lang.String x;有什么想法吗?你有一个节点。干得好。键位于node.resolveBinding()方法中,该方法返回IBinding实现程序。例如,VariableDeclaration将解析为IVariableBinding,它具有返回ITypeBinding的getType()方法。一旦获得ITypeBinding,它将为您提供有关完全限定类型的所有信息。如果它对您有效,您不妨将其标记为正确答案:-)此方法在内部包中,您不应该使用它。嗯,我想这取决于你是否在写内部代码:)。你从哪里得到解析函数的?