查找第三方库处理RUNTIME注释的位置



我经常发现自己试图弄清楚一个特定的注释是如何在后台工作的。在IDE中对注释执行"查找用法"(如IntelliJ(通常只会将注释带到实际使用的位置。然而,我看不出有什么简单的方法可以找到处理注释的逻辑。

我知道,由于注释的性质,很难看到它们在哪里被处理,但同时,当它们被使用时,必须导入特定的注释,这样才能建立链接。

以为例

SomeAnnotation.java

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {
}

并在AnnotationSumer.java 中消费

import com.annotations.SomeAnnotation
public class AnnotationProcessor {
public AnnotationProcessor() {
if (currentClass.isAnnotationPresent(SomeAnnotation.class)) {
// do some logic
}
}
}

通常,某些代码会被标记为@SomeAnnotation。

我想做的是找到正在处理SomeAnnotation的AnnotationProcessor类。

到目前为止,我搜索到的任何内容都只是引导我走上如何处理注释的道路,而不是在哪里处理注释。

如果是关于运行时注释处理器,则在IDEA中调试应用程序,在Class.isAnnotationPresent(Class<? extends Annotation> a)方法上设置条件断点。

条件为CCD_ 2。

由于条件断点的原因,调试会很慢,但当断点到达时,您可能会发现调用堆栈。

您没有指定是考虑编译时注释处理还是运行时注释处理。

对于编译时注释处理,注释处理器要么列在-processor标志之后的命令行上,要么(对于自动发现(列在搜索路径上名为META-INF/services/javax.annotation.processing.Processor的文件中。看见https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html。

最新更新