我想查找对给定变量或给定方法的调用者的引用,就像 Eclipse 中的“打开调用层次结构”和“(查找)引用”功能(当您右键单击变量或方法时)。
现在我已经获得了源代码的抽象语法树。我使用 Eclipse JDT 来获取 AST,它也解析了所有类型绑定。
所以我的问题是,是否可以仅使用此抽象语法树来查找变量/方法引用?(我知道一些代码分析库使用字节码来实现这一点。我想知道是否可以使用 AST 进行类似的分析。)
我想查找对给定变量或给定方法的调用者的引用,就像 Eclipse 中的“打开调用层次结构”和“(查找)引用”功能(当您右键单击变量或方法时)。
现在我已经获得了源代码的抽象语法树。我使用 Eclipse JDT 来获取 AST,它也解析了所有类型绑定。
所以我的问题是,是否可以仅使用此抽象语法树来查找变量/方法引用?(我知道一些代码分析库使用字节码来实现这一点。我想知道是否可以使用 AST 进行类似的分析。)
只使用这个抽象语法树?
仅给定 AST,您无法轻松确定引用或调用者。AST只是语法,并没有直接编码它的含义(含义的子集是“this is referenced to called”)。
要确定引用或调用的内容,必须以非常复杂的方式分析 AST,以建立符号范围并确定哪些内容涉及哪些内容。(大部分 Java 标准/书籍都是关于这个过程的,但由于其复杂性,信息分散在整本书中)。
一个好的前端通常会从 AST 中计算这些信息,或者可以轻松提取的信息。我相信 Eclipse JDT 拥有这些信息并提供一组 API 来访问它,但我对 JDT 一无所知。
但是您不能仅从 AST 轻松获得它。