Скажем, я определяю пользовательскую аннотацию под названием @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
в моем примере), чем объекты, которые ссылаются на аннотированные элементы.
Этот вопрос предоставляет технику для его достижения в виде отдельного этапа сборки с использованием ASM. Но мне интересно, могу ли я сделать это более естественным образом с обработкой javac и аннотацией?