Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 如何从EclipseJDT核心批处理编译器中提取范围信息_Java_Eclipse_Compiler Construction_Eclipse Jdt - Fatal编程技术网

Java 如何从EclipseJDT核心批处理编译器中提取范围信息

Java 如何从EclipseJDT核心批处理编译器中提取范围信息,java,eclipse,compiler-construction,eclipse-jdt,Java,Eclipse,Compiler Construction,Eclipse Jdt,例如,我想要实现的是提取源代码的语言结构 class Test { String name; // (1) Test(String name) { // (2) this.name = name; // (3) (4) } String toString() { return name; // (5) } } 我想弄清楚每个“名字”指的是什么。如(3)和(5)是指(1)和(4)是指

例如,我想要实现的是提取源代码的语言结构

class Test {
    String name;           // (1)
    Test(String name) {    // (2)
        this.name = name;  // (3) (4)
    }

    String toString() {
        return name;       // (5)
    }
}
我想弄清楚每个“名字”指的是什么。如(3)和(5)是指(1)和(4)是指(2)。 另一个例子是

Test t = new Test("t");
System.out.println(t);
我想知道
t
是类型
Test
,它在哪里声明

我使用从下载的JDT批处理编译器(ecjsrc-4.3)执行此任务。我之所以选择这个而不是整个JDT框架,是因为这个Ant编译器已有一个
JDTCompilerAdapter
,这是我将来需要的

到目前为止,我在
org.eclipse.jdt.internal.compiler.compiler
中的第540行添加了一个自定义AstVisitor,其中编译器已经为所有文件生成了AstTree和范围信息

我的问题是,我不知道如何在AstVisitor中的每个
visit
方法中使用
scope
,以获取这些信息。与第一个示例一样,在第行
this.name=name。在LHS上,它是
此的
字段参考
。名称
此的
字段参考
。LHS上没有用于
name
的AstNode,因此我不知道如何获取它所指的字段。在RHS上,它是一个
SingleNameReference
。但是,如果我首先调用
node.resolve(scope)
,然后尝试打印出
'node.resolvedType
node.binding
,我将得到
null
java.lang.String name
。因为参数和字段都是
字符串
,所以我无法区分它们

在第二个示例中,我也不知道如何获取
t
的类型信息,对于
resolveType
我只能获取
null
,对于
binding
我只能获取
t

以前有人这样做过吗