Как получить параметр аннотации в процессоре аннотаций - PullRequest
0 голосов
/ 02 марта 2019

Я пишу свой собственный процессор аннотаций и пытаюсь получить параметр моей аннотации, как показано в коде ниже, в методе процесса:

roundEnv.getElementsAnnotatedWith(annotation).forEach {
        val annotation = it.getAnnotation(annotation)
        annotation.interfaces
}

В процессе сборки я получаю An exception occurred: javax.lang.model.type.MirroredTypesException: Attempt to access Class objects for TypeMirrors [].Кто-нибудь знает, как получить данные аннотации?

1 Ответ

0 голосов
/ 03 марта 2019

Документация по методу getAnnotation объясняет, почему объекты Class<?> проблематичны для процессора аннотаций:

Аннотация, возвращаемая этим методом, может содержать элемент, значение которого имеет тип Class.Это значение не может быть возвращено напрямую: информация, необходимая для определения местоположения и загрузки класса (например, используемого загрузчика классов), недоступна, и класс может вообще не быть загружаемым.Попытка чтения объекта Class путем вызова соответствующего метода в возвращенной аннотации приведет к исключению MirroredTypeException, из которого может быть извлечено соответствующее TypeMirror.Аналогичным образом, попытка прочитать элемент с классом [] приведет к исключению MirroredTypesException.

Для доступа к элементам аннотаций, таким как классы, вместо этого необходимо использовать Element.getAnnotationMirrors() и вручную найти интересующую аннотацию.Эти зеркала аннотаций будут содержать элементы, представляющие фактические значения, но не требующие присутствия рассматриваемых классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...