2015-06-26 4 views
0

У меня что-то вроде этогоПопадая необработанные данные аннотаций во время обработки аннотаций

@Value(name="values1", values = { R.string.first, R.string.second, R.string.third }) 

и это изменение

@Value(name="values2", values = { R.integer.first, R.integer.second, R.integer.third }) 

R.integer.* и R.string.* только Int константы, объявленные в соответствующих классах.

Итак, во время обработки аннотаций мне как-то нужно получить полные имена (например, «R.integer.first») вместо получения фактической ценности int R.integer.first.

Сейчас я только способен считывать значения:

Value debug = e.getAnnotation(Value.class); 
String name= debug.name(); 
int[] values = debug.values(); 

ответ

0

Кажется, я нашел ответ, так что из-за моего наблюдения можно получить доступ только конечные значения, вероятно, компилятор заменяет константы с фактическими значениями на ранних стадиях компиляции.

и механизм доступа к данным в аннотации заключается в следующем:

for (AnnotationMirror mirror : e.getAnnotationMirrors()) { 
    for (ExecutableElement el : mirror.getElementValues().keySet()) { 
     info("Element:" + el + " Value:" + elementValues.get(el)); 
    } 
} 

Где e является Element, полученный с помощью процессора аннотаций

Смежные вопросы