我必须重构和维护一堆看起来很糟糕的 Java 类。许多具有以下实现模式
class Machine {
public int advance(int state) {
switch(state) {
case 7: return step_7();
case 13: return step_13();
case 4: return step_4();
}
}
private int step_7() {
if(something) return 13; else return 4;
}
private int step_13() {
...
return 4;
}
private int step_4() {
if(miep) return 7;
...
return 13;
}
}
从这里我想生成一个图(使用 Graphviz 和dot
)——有点像“静态调用图”,但不完全是。
除了使用 Perl 或 Python 自己解析 Java 代码之外,我在这里玩游戏如何自动执行此操作。
我真正想要的是拥有一个抽象语法树(AST)或类似的东西,我可以浏览并同时打印dot
-code。
- 如何在这里生成可遍历的 AST?我想遍历将在 Java 中完成,但如果输出是任何文本表示形式,那就没问题(
gprof
想到这里)。 - 任何其他方法,不使用 AST?也许我只是个盲人,有一种更好、更简单的方法可以做到这一点。