如何获取 Java 源代码的完整调用层次结构?
这有点难以解释。我有一个A类:
public class A {
private Integer a1;
private Integer a2;
// getters and setters.
}
有一个静态类 B 返回我的类 A:
public static class B {
public static A getCurrentA() {
return a;
}
}
我需要找到 B 返回的类 A 的所有用法。因此,假设类C调用,然后进一步有一个调用,我想找到所有这些。c.setA(B.getCurrentA())
c.getA().getA2();
在实际场景中,我有 217 个不同的类调用 .我无法手动跟踪 Eclipse 中的所有调用并找出哪些方法被调用。B.getCurrentA()
Eclipse 调用层次结构视图仅显示对 的所有调用。B.getCurrentA()
我怎样才能做到这一点?
编辑
克里斯·海耶斯明白我想做什么。为了重构一些非常糟糕的遗留代码而不会破坏整个系统,我需要首先使用Hibernate的投影微调一些查询(系统中的每个映射实体都急切地加载,并且许多实体是相关的,所以有些查询需要很长时间才能获取所有内容)。但首先,我需要找到使用了哪些属性,这样我就不会在某个地方得到NullPointerException......
以下是我必须手动执行的操作的示例:
- 使用 Eclipse 的 Search 查找对 B.getCurrentA() 的所有调用;
-
打开找到的第一种方法,假设它是下面的方法:
public class CController { C c = new C(); CFacade facade = new CFacade(); List<C> Cs = new ArrayList<C>(); public void getAllCs() { c.setA(B.getCurrentA()); // found it! facade.search(c); } }
-
在 CFacade 类中打开搜索方法:
public class CFacade { CBusinessObject cBo = new CBusinessObject(); public List<C> search(C c) { // doing stuff... cBo.verifyA(c); cBo.search(c); // yes, the system is that complicated } }
-
打开 CBusinessObject 类中的 verifyA 方法,并确定使用了字段 a2:
public class CBusinessObject { public void verifyA(c) { if (Integer.valueOf(1).equals(c.getA().getA2())) { // do stuff else { // something else } } }
在接下来的 216 场比赛中重复步骤 2-4...耶。
请帮忙。