所以,再一次在数千个java文件(或字节码?)中我想找到所有调用方法 java.lang.Object.equals(Object arg),但此调用的参数必须为 SuperFoo 类型。例如:
public void doItWith(SuperFoo foo){ if(otherFoo.equals(foo)){ //做某事} ... }解决方案
程序化的方法是使用面向方面的编程(即 AspectJ )。您将定义一个切入点来捕获感兴趣的方法调用
pointcut equals(Superfoo o)= call(boolean * .equals(对象))&& ARGS(O);然后使用建议来选择每个事件并查询连接点对象以获取静态信息,即它在哪里
before(Superfoo o):equals(o){ System.out.println 发生在+ thisJoinPoint.getSourceLocation()); }
I've a huge project with many classes. I've a very specific class; let's name it SuperFoo. I need to find all calls to the method equals() with argument of type Superfoo. Hope it's clear.
So, one more time... in thousands of java files (or bytecode?) I'd like to find all calls to the method java.lang.Object.equals(Object arg) but the argument to this call must be of type SuperFoo. For example:
public void doItWith(SuperFoo foo) { if (otherFoo.equals(foo)){ // do something } ... }I checked out Browse-by-query, analyzing bytecode and just Java Search in Eclipse and in my opinion none of this works.
解决方案A programmatic approach would be to use Aspect Oriented Programming (i.e. AspectJ). You would define a pointcut to capture the method call of interest
pointcut equals(Superfoo o) = call(boolean *.equals(Object)) && args(o);and then use advice to select each occurrence and query the joinpoint object to get the static information i.e. where it appears in your code.
before(Superfoo o) : equals(o) { System.out.println("An occurence at "+thisJoinPoint.getSourceLocation()); }
更多推荐
在java类中查找方法的所有调用
发布评论