Java kullanarak bir ek açıklama işlemci yazmayı deniyorum. Bu ek açıklama işlemcisinin, aşağıda görüldüğü gibi açıklamalı bir sınıf içerisindeki açıklamalı iç içe geçmiş sınıfları tanımlaması gerekir. Önce açıklamalı dersleri işleyeceğim ve içsel açıklamalarını işleyeceğim. Bu derleme zamanında yapılır ve işlenen sınıf hakkında mevcut bilgim olmaz. Foo'da çoklu iç içe geçmiş sınıflara sahip olmak mümkündür. Tüm bu iç içe geçmiş sınıfların açıklamalarını nasıl işleyebilirim.APT Yuvalanmış açıklamalı sınıfların ek açıklamaları nasıl işlenir
@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 }
}
}
nasıl işleme sırasında, bu açıklama 'MyAnnotation' var ve onun 'MyMethodAnnotation' iç içe Bar sınıfına erişebilirsiniz? Aşağıdaki kod yalnızca Foo sınıfı hakkında bilgi yazdırır. Bar hakkındaki bilgileri nasıl işleyebilirim?
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() );
}
}
}
I (Eleman e: env.getElementsAnnotatedWith (EmfInfo.class)) için kullanarak iç içe sınıf Bar unsurunu erişen deneyin { ama bu sadece dış çoğu sınıf Foo döndürür. – sholmes