Próbuję napisać procesor adnotacji przy użyciu java. Ten procesor adnotacji musi zidentyfikować opisywane zagnieżdżone klasy w ramach opisanej klasy, jak widać poniżej. Najpierw przetworzę przypisane klasy, a następnie przetworzę ich wewnętrzne adnotacje. Jest to wykonywane w czasie kompilacji i nie będę posiadał żadnej wiedzy na temat przetwarzanej klasy. Możliwe jest posiadanie wielu klas zagnieżdżonych w Foo. Jak przetwarzać adnotacje wszystkich zagnieżdżonych klas.APT Jak przetwarzać adnotacje zagnieżdżonych opisów klas
@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 }
}
}
Jak mogę uzyskać dostęp do pod-klasy Bar, to adnotacja „MyAnnotation” i jego „MyMethodAnnotation” podczas przetwarzania? Poniższy kod wyświetla jedynie informacje o klasie Foo. Jak mogę przetworzyć informacje o barze?
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() );
}
}
}
Staram dostępu element na zagnieżdżonych klasy kreskowego przy dla (element E: env.getElementsAnnotatedWith (EmfInfo.class)) { ale to tylko zwraca zewnętrzną najbardziej class Foo. – sholmes