从现有的代码库。A 类有一个实例变量 A.toBeCalled 作为类型“ToBeCalled”。如何从代码库的整个调用图中找到对它 A.toBeCalled 的所有使用/引用?例如
- B 类调用 A.getToBeCalled() 并将其存储在其本地 var 中,然后通过调用其方法来使用它。
- B 类调用 A.getToBeCalled() 并存储在 C 类的实例 var 中,然后 D 类使用 C 类的实例 var。
要求:
- 在 B 类、C 类、D 类等中调用 A.toBeCalled 对象的方法是什么?
- 上面的被调用者图
代码示例
Class A {
ToBeCalled toBeCalled = new ToBeCalled();
getToBecalled() { return toBeCalled;}
}
Class B {
main() {
A a = new A();
ToBeCalled toBeCalledInB = a.getToBecalled();
toBeCalledInB.doXXX();
C c = new C();
c.setToBeCalled(toBeCalledInB);
D d = new D();
d.start(c);
}
}
Class C {
ToBeCalled toBeCalledInC;
setToBeCalled(ToBeCalled theToBeCalled){
toBeCalledInC = theToBeCalled;
}
getToBeCalled() {
return toBeCalledInC;
}
}
Class D {
start(C c) {
ToBeCalled toBeCalledInD = c.getToBeCalled();
toBeCalledInD.doYYY();
}
}
调用 A.toBeCalled 的 List 方法
- ToBeCalled.doXXX()
- ToBeCalled.doYYY()
我已经调查了几个工具作为起点,但是,它们有点粗糙
- https://code.google.com/p/javaparser/wiki/UsingThisParser
- IntelliJ 的代码浏览器插件
- http://www.antlr.org/wiki/display/ANTLR4/ANTLR+4+文档
- http://spoon.gforge.inria.fr/Doc/FAQ
非常感谢您的帮助。