我有一个包含很多课程的庞大项目。我有一个非常具体的课;我们将它命名为SuperFoo
。我需要使用equals()
类型的参数找到对方法Superfoo
的所有调用。希望很清楚。
那么,还有一次......在成千上万的java文件(或字节码?)中我想找到对方法java.lang.Object.equals(Object arg)
的所有调用,但是这个调用的参数必须是{{1}类型}}。例如:
SuperFoo
我检查了逐个浏览,分析字节码和Eclipse中的Java搜索,在我看来,这一切都没有。
答案 0 :(得分:1)
程序化方法是使用Aspect Oriented Programming(即AspectJ)。您将定义切入点以捕获感兴趣的方法调用
pointcut equals(Superfoo o) = call(boolean *.equals(Object)) && args(o);
然后使用建议选择每个匹配项并查询joinpoint对象以获取静态信息,即它出现在代码中的位置。
before(Superfoo o) : equals(o) {
System.out.println("An occurence at "+thisJoinPoint.getSourceLocation());
}
答案 1 :(得分:0)
所以,你试图找出
的引用public boolean equals(Object o)
在SuperFoo中重写。如果您有权访问源代码,可以在eclipse中完成。如果你去调用Hierarchy,eclipse会返回Object的equals()方法的所有出现。因此,您需要尝试以下方法:
打开SuperFoor。选择equals方法。右键点击。参考文献 - >项目。在结果搜索窗口的最右侧,单击三角形。选择“覆盖参考”。而已。最初返回的结果将被过滤, 包含在SuperFoo中重写的等号引用。
希望这有帮助。