Проверка корректности аннотации в AnnotationProcessore

 
 
 
Сообщения:189
Всем привет!

Не совсем про рефлекшн, но все же.

У меня есть кастомная аннотация на метод, и при компиляции надо проверить, что параметр этой аннотации соответствует аргументам метода.

Типа такого:
@MyAnnotation(value = SomeMyClass.class)
public String someMethod(String value) {
}

class SomeMyClass implements SomeInterface<String>{
}


Вот надо проверить, что SomeMyClass имплементирует интерфейс, который параметризован тем же типом, который имеет первый аргумент метода =)))

Соответственно две задачи для AnnatationProcessora:
1. Вытащить параметр из аннотации и далее либо посмотреть на то, чем параметризован интерфейс, или посмотреть на сигнатуру метода и взять оттуда аргумент.
2. Вытащить из метода (думается это будет ExecutableElement) тип аргумента.

Подскажите, кто работал с кастомными аннотациями, это вообще возможно, или бред полный? =)
Какие могут быть пути и какие инструменты использовать?

Спасибо!

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:297
MuH3gPaB:
Подскажите, кто работал с кастомными аннотациями, это вообще возможно, или бред полный? =)
Какие могут быть пути и какие инструменты использовать?


Да вроде можно. Причем обоими способами (и через параметры интерфейса и через тип параметра метода). Инструменты стандартные: внимательно чтение документации и эксперименты.

Начать можно с чтения ProcessingEnvironment и артефактов, которые с ее помощью можно получить. Например, в Elements и Types содержится много полезных методов, которые вам будут нужны при решении задачи. Ну а потом - RoundEnvironment, Element (.getKind и известные дочерние интерфейсы). Конечно ExecutableElement и унаследованные методы. И очень внимательное чтение документации на Element.getAnnotation. Может быть, посмотреть на getAnnotationMirrors/getAllAnnotationMirrors. Для запуска - справку по javac (что-нибудь вроде https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html)

В общем, все как вы описали, только некоторые полезные методы в необычном месте находятся :)
 
 
Сообщения:189
Так и есть, спасибо, все получилось! =)

API там конечно "своеобразный".

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет