我正在嘗試使用java編寫註釋處理器。如下所示,該註釋處理器需要識別註釋類內的帶註釋的嵌套類。我將首先處理帶註釋的類,然後處理它們的內部註釋。這是在編譯時執行的,並且我將不知道正在處理的類。在Foo中可能有多個嵌套類。我如何處理所有這些嵌套類的註釋。APT如何處理嵌套註釋類的註釋
@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 }
}
}
我怎樣才能在處理過程中可以訪問到嵌套欄類,它的註解「MyAnnotation」和「MyMethodAnnotation」?以下代碼僅打印有關Foo類的信息。我如何處理有關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() );
}
}
}
我嘗試使用 爲(元件E:env.getElementsAnnotatedWith(EmfInfo.class))嵌套類欄訪問的元素 { 但這僅返回最外類Foo。 – sholmes