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