我是反思的新手。有没有办法检测特定方法在哪里被调用?例如:
public class MyClass {
public static void method(){
//DO SOMETHING
}
}
public class Test {
public test(){
MyClass.method();
}
}
public class MyProcessor extends AbstractProcessor {
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Method method = MyClass.class.getDeclaredMethod("method");
Class classWhereMethodIsInvoked = obtainClassWhereMethodIsInvoked(method);
}
public Class obtainClassWhereMethodIsInvoked(Method method) {
//here I want to search one class that invoke that method, in this case Test.class
}
}
这样的事情可能吗,或者我要疯了?
正如评论中提到的,Apache BCEL 适合您的问题。此类库通常特别用于根据生成的字节码确定编译时信息,例如方法使用和控制流分析,并且使用反射来检索此类信息即使不是不可能,也是很困难的。如果您使用 BCEL 解决方案,您可能不再需要自定义注释处理器。
但由于您似乎已经在使用自定义注释处理器,因此它的重点是能够处理源文件中的注释。因此,一种方法是定义一个自定义注释来标记正在调用的方法,并让自定义处理器读取这些注释以了解哪些类调用哪些方法:
@CallerClass("MyClass.method")
public class Test {
public test() {
MyClass.method();
}
}
在上面的(简单的)示例中,自定义CallerClass
注释标记一个类调用括号内注释元素中指定的方法。注释处理器可以读取该注释并构造调用者信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)