我需要对java解析器生成的AST进行一些操作。我的问题是我想检查类初始化循环问题是否存在。
一个例子是,
class mark1 {
public static final int x = mark2.p * 5;
//Do some operations here
}
class mark2 {
public static final int p = mark1.x + 100;
//Do some operations here
}
类的初始化顺序可能不同,导致计算mark1.x和mark2.p的不同值。我正在尝试使用javaparser生成AST来实现它,但没有得到可行的解决方案。
答案 0 :(得分:0)
使用JavaParser,您可以轻松获取所有静态字段和静态初始化程序。
我看到的问题是您需要解析引用。例如,您需要了解" mark2.p"和" mark1.x"引用其他类的静态字段。从AST的角度来看,它们是字段访问,但AST和JavaParser本身并不能告诉您该特定字段是静态的。为此,您需要使用https://github.com/ftomassetti/java-symbol-solver/之类的符号求解器,或者您可以自己构建逻辑。例如,您可能需要查看导入并查看是否已导入类mark1,或者是否在与mark2相同的包中存在名为mark1的类。这样做你可以认识到mark1是一个类的名称,并查看该类的符号p。然后你可以找到它并注意它是一个静态字段。
来源:我是JavaParser撰稿人