我有一个庞大的项目,有很多课程。我有一个非常特殊的类;让我们命名它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());
}