【问题标题】:Matching between annotation and processor注释和处理器之间的匹配
【发布时间】:2014-07-10 09:55:29
【问题描述】:

如何为注解找到对应的处理器?例如,考虑来自 JUnit 的 @Before 注解。

Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Before {
}

我使用了 IDEA,通过搜索 @Before 它只找到了用法。并且无法在注释处断点。

【问题讨论】:

  • 我会右击Before 并在我的IDE 中选择“Find Usages”。
  • 注解是什么意思?
  • @PeterLawrey,它找到处理它的地方没有使用吗?
  • @singe31,Java 注释。
  • @NikolayKuznetsov 它可以在您的源代码中找到使用它的任何地方,如果您没有它,它将找不到源代码。您可以假设它在某处的 junit 源中,只要您能看到它,例如通过maven,它会找到它用于处理的地方。

标签: java junit intellij-idea annotations annotation-processing


【解决方案1】:

我认为应该可以使用断点找到处理器,但它有点复杂。本文介绍如何在注解处理器上设置断点:
Debugging an annotation processor in every IDE

基本上你必须设置一些编译器标志来使编译器使用的JVM在调试模式下运行:

-J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005

我已尝试按照文章中的说明在 Eclipse 中设置标志,但似乎此选项已被删除。我不知道这在IDEA中是否可行。

如果您不想调试特定的处理器,您可以尝试在javax.annotation.processing.AbstractProcessorinit 方法上设置断点 - 虽然不能保证每个处理器都会使用这个抽象类,但有些处理器可能有自己的javax.annotation.processing.Processor 的自己的实现。也不能保证注解只能由处理器处理,编译器可能会直接处理一些注解。 Annotation 也可以在运行时处理,您可能需要在 Annotation 类本身中添加一些断点。

要在标准库类中设置断点,我必须attach the source in eclipse

【讨论】:

  • Peter Lawrey 的实际解决方案有效。我可以通过搜索库中的用法找到处理器。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多