+-
使用带注释的方法时使java编译器发出警告(如@deprecated)
假设我定义了一个名为@Unsafe的自定义注释.

我想提供一个注释处理器,它将检测对使用@Unsafe注释的方法的引用并打印警告.

例如,鉴于此代码……

public class Foo {
  @Unsafe
  public void doSomething() { ... }
}

public class Bar {
  public static void main(String[] args) {
    new Foo().doSomething();
  }
}

…我希望编译器打印如下:

WARN > Bar.java, line 3 : Call to Unsafe API - Foo.doSomething()

它在精神上与@Deprecated非常相似,但我的注释是在传达不同的东西,所以我不能直接使用@Deprecated.有没有办法用注释处理器实现这一目标?注释处理器API似乎更关注应用注释的实体(在我的示例中为Foo.java),而不是引用注释成员的实体.

This question提供了一种使用ASM作为单独构建步骤实现它的技术.但是我想知道我是否能够以更自然的方式使用javac&注释处理?

最佳答案
是的,这可以使用注释处理.

一个复杂因素是标准注释处理器不会进入方法体(它只检查方法声明).您需要一个能够检查每行代码的注释处理器.

Checker Framework旨在构建此类注释处理器.您只需定义一个回调,在给定方法调用的情况下,如果调用不可接受,则发出javac警告. (在您的情况下,只是方法的声明是否具有@Unsafe注释.)Checker Framework在程序中的每个方法调用上运行该回调.

点击查看更多相关文章

转载注明原文:使用带注释的方法时使java编译器发出警告(如@deprecated) - 乐贴网