我有一个庞大的项目,有很多课程。我有一个非常特殊的类;让我们命名它SuperFoo。我需要找到对参数类型为equals()的方法Superfoo的所有调用。希望一切都清楚。
所以,再来一次…在成千上万的Java文件(或字节码?)我想查找对方法java.lang.Object.equals(Object arg)的所有调用,但此调用的参数必须是SuperFoo类型。例如:

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

我查看了browse by query,分析了字节码,在eclipse中只进行了java搜索,在我看来这些都不起作用。

最佳答案

一种编程方法是使用Aspect Oriented Programming(即AspectJ)。您可以定义一个切入点来捕获感兴趣的方法调用

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

然后使用advice选择每个匹配项并查询joinpoint对象以获取静态信息,即它在代码中的显示位置。
before(Superfoo o) : equals(o) {
  System.out.println("An occurence at "+thisJoinPoint.getSourceLocation());
}

09-30 11:39