Estoy intentando escribir un procesador de anotaciones usando java. Este procesador de anotación necesita identificar clases anotadas anotadas dentro de una clase anotada como se ve a continuación. Procesaré las clases anotadas primero y luego procesaré sus anotaciones internas. Esto se realiza en tiempo de compilación y no tendré conocimiento de la clase que se está procesando. Es posible tener múltiples clases anidadas dentro de Foo. ¿Cómo se procesan las anotaciones de todas estas clases anidadas?APT Cómo procesar anotaciones de clases anotadas anidadas
@MyAnnotation(value="Something important")
public class Foo
{
private Integer A;
@MyMethodAnnotation(value="Something Else")
public Integer getA() { return this.A; }
@MyAnnotation(value="Something really important")
private class Bar
{
private Integer B;
@MyMethodAnnotation(value="Something Else that is very Important")
public Integer getB() { return this.B }
}
}
¿Cómo puedo obtener acceso a la clase anidada bar, que es la anotación 'MyAnnotation' y su 'MyMethodAnnotation' durante el proceso? El siguiente código solo imprime información sobre la clase Foo. ¿Cómo puedo procesar información sobre Bar?
for (Element element : env.getElementsAnnotatedWith(MyAnnotation.class)) {
if (element.getKind().equals(ElementKind.CLASS))
{
System.out.println(element.getKind().name() + " " + element.getSimpleName());
processInnerClassElement(element);
}
else
{
System.out.println(element.getKind().name() + " " + element.getSimpleName());
}
}
...
private void processInnerClassElement(Element element)
{
for (Element e : element.getEnclosedElements())
{
if (e.getKind().equals(ElementKind.CLASS))
{
System.out.println(e.getKind().name() + " " + e.getSimpleName());
processInnerClassElement(e);
}
else
{
System.out.println(e.getKind().name() + " " + e.getSimpleName() );
}
}
}
que intente acceder a un elemento de la barra de clase anidada usando para (elemento E: env.getElementsAnnotatedWith (EmfInfo.class)) { pero esto sólo se devuelve el exterior Foo más clase. – sholmes