Java を使用して注釈プロセッサを作成しようとしています。この注釈プロセッサは、以下に示すように、注釈付きクラス内の注釈付きネストされたクラスを識別する必要があります。最初にアノテーション付きクラスを処理してから、それらの内部アノテーションを処理します。これはコンパイル時に実行されるため、処理中のクラスに関する既存の知識はありません。Foo 内に複数のネストされたクラスを持つことができます。これらすべてのネストされたクラスの注釈を処理するにはどうすればよいですか。
@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 }
}
}
処理中に、ネストされた Bar クラスにアクセスするにはどうすればよいですか? 次のコードは、クラス Foo に関する情報のみを出力します。バーに関する情報を処理するにはどうすればよいですか?
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() );
}
}
}