我需要对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的不同值。我正在尝试使用AST生产的javaparser来实现它,但是没有得到一个可行的解决方案。
发布于 2016-04-25 22:08:06
使用JavaParser,您可以轻松获得所有静态字段和静态初始值设定项。
我看到的问题是,你需要解析引用。例如,您需要理解"mark2.p“和"mark1.x”指的是其他类的静态字段。从AST的角度来看,它们是字段访问,但仅有AST和JavaParser不能告诉您该特定字段是静态的。为此,您需要使用诸如https://github.com/ftomassetti/java-symbol-solver/之类的符号求解器,或者您可以自己构建逻辑。例如,您可能需要查看导入,查看是否导入了类mark1,或者在与mark2相同的包中是否存在一个名为mark1的类。这样做,您可以识别出mark1是一个类的名称,并在该类中查找符号p。然后,您可以找到它,并注意到它是一个静态字段。
来源:我是一个JavaParser贡献者
https://stackoverflow.com/questions/36840953
复制相似问题