Sto provando a scrivere un processore di annotazione utilizzando java. Questo elaboratore di annotazioni deve identificare classi annidate annotate all'interno di una classe annotata come mostrato di seguito. Elaborerò prima le classi annotate e poi elaborerò le loro annotazioni interne. Questo viene eseguito in fase di compilazione e non avrò alcuna conoscenza della classe in elaborazione. È possibile avere più classi annidate all'interno di Foo. Come posso elaborare le annotazioni di tutte queste classi annidate.APT Come elaborare annotazioni di classi annotate nidificate
@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 }
}
}
Come posso ottenere l'accesso alla classe Bar nidificato, è l'annotazione 'MyAnnotation' e il suo 'MyMethodAnnotation' durante la lavorazione? Il seguente codice stampa solo informazioni sulla classe Foo. Come posso elaborare le informazioni su 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() );
}
}
}
provo si accede a un elemento della classe Bar nidificato utilizzando per (Element e: env.getElementsAnnotatedWith (EmfInfo.class)) { ma questo restituisce solo l'esterno più classe Foo. – sholmes