在java类中查找方法的所有调用 [英] Find all calls to method in java classes

查看:742
本文介绍了在java类中查找方法的所有调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很多课程的大项目。我有一个非常具体的课程让我们命名为 SuperFoo 。我需要找到所有调用方法 equals(),参数类型为 Superfoo 。希望很清楚。



所以,再一次在数千个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类中查找方法的所有调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆