3

我有一个包含许多课程的庞大项目。我有一个非常具体的课程;让我们命名它SuperFoo。我需要找到对equals()带有 type 参数的方法的所有调用Superfoo。希望很清楚。

所以,再一次......在数千个 java 文件(或字节码?)中,我想找到对该方法的所有调用,java.lang.Object.equals(Object arg)但此调用的参数必须是 type SuperFoo。例如:

public void doItWith(SuperFoo foo) {
    if (otherFoo.equals(foo)){
         // do something
    }
...
}

我检查了 Browse-by-query、分析字节码和 Eclipse 中的 Java 搜索,在我看来这些都不起作用。

4

2 回答 2

1

一种编程方法是使用面向方面的编程(即AspectJ)。您将定义一个切入点来捕获感兴趣的方法调用

pointcut equals(Superfoo o) = call(boolean *.equals(Object)) && args(o);

然后使用建议来选择每次出现并查询连接点对象以获取静态信息,即它出现在代码中的位置。

before(Superfoo o) : equals(o) {
  System.out.println("An occurence at "+thisJoinPoint.getSourceLocation());
}
于 2013-06-08T08:01:26.010 回答
0

所以,你正试图找出参考

public boolean equals(Object o) 

在 SuperFoo 中被覆盖。如果您可以访问源代码,这可以在 eclipse 中完成。如果你选择 Call Hierarchy,eclipse 会返回所有出现的 Object 的 equals() 方法。因此,您需要尝试以下操作:

打开 SuperFoor。选择等号方法。右键点击。参考——> 项目。在生成的搜索窗口中,在最右侧,单击三角形。选择“要覆盖的引用”。而已。最初返回的结果将被过滤,它将主要包含在 SuperFoo 中覆盖的等号引用。

希望这可以帮助。

于 2013-06-12T15:11:15.273 回答