在java类中查找方法的所有调用

编程入门 行业动态 更新时间:2024-10-27 09:37:47
本文介绍了在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类中查找方法的所有调用

本文发布于:2023-11-29 22:13:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1647778.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类中   方法   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!