Я работаю над своим первым процессором аннотаций.Я пытаюсь получить поля класса с помощью аннотации на объявленный объект (это поле метода).Например:
public class Person {
private String name;
private String surname;
}
...
public void myMethod(@MyAnnotation Person person) {
/*...*/
}
...
Через @MyAnnotation я хочу получить поля 'имя' и 'фамилия'.
Возможно ли это?Я сделал что-то похожее с полем метода:
...
for (Element element : roundEnvironment.getElementsAnnotatedWith(AnnotationOnMethod.class)) {
ExecutableElement method = (ExecutableElement) element;
List<? extends VariableElement> parameters = method.getParameters();
parameters.forEach(p -> {
/*code here for parameter*/
});
}
...
Заранее спасибо, Лука.
Решение: Для моего решения я предполагаю, что аннотация на метод, а не на параметр метода.Правильный ответ на мой вопрос - ответ, опубликованный rjeeb.Вы можете увидеть это ниже.
Set<? extends Element> elements = roundEnvironment.getElementsAnnotatedWith(AnnotationOnMethod.class);
for (Element element : elements) {
ExecutableElement executableElement = (ExecutableElement) element;
List<? extends VariableElement> parameters = executableElement.getParameters();
for (VariableElement parameter : parameters) {
DeclaredType declaredType = (DeclaredType) parameter.asType();
TypeElement clazz = (TypeElement) declaredType.asElement();
clazz.getEnclosedElements().forEach(o -> {
if (o.getKind().isField()) {
log.info("Simple name of field: " + o.getSimpleName());
}
});
}
}