기존 "프로토 타입"클래스를 기반으로 새로운 클래스를 생성하는 주석 프로세서를 구현하고 싶습니다.Java 정적 메타 프로그래밍
import java.util.List
@MyAnnotation
class MySuperClassPrototype {
static MySuperClassPrototype createInstance() {
return new MySuperClassPrototype();
}
}
아래 코드의 결과. 다음과 같은 새로운 소스 파일 (컴파일 단위)가 생성됩니다
import java.util.List
class MySuperClass {
static MySuperClass createInstance() {
return new MySuperClass();
}
public void specialAddedMethod() {
/*...*/
}
}
나는 모든 최상위 import 문 및 정적 회원들과 프로토 타입 수준이 아닌 정적 멤버를 복사하고 싶습니다. 필자는 Compiler Tree API (com.sun.source.tree)로 꽤 이동했습니다. 이전 클래스에 새 클래스 이름을 대체하면서 Tree 데이터 유형을 인쇄 할 수 있습니다. 하지만 꽤 어려워 보이는 문제가 있습니다.
트리에서 Tree.Kind.IDENTIFIER를 얻으면 참조하는 실제 클래스를 어떻게 찾을 수 있습니까? MySuperClassPrototype 식별자의 모든 항목을 MySuperClass 식별자로 바꾸고 전체 트리를 인쇄해야합니다.
실현 가능합니까?
마찬가지로 @MyAnnotation 주석을 필터링해야하며 다시 Tree.Kind.IDENTIFIER 또는 Tree.Kind.MEMBER_SELECT로 표시됩니다.
이 식별자로 참조되는 실제 주석 클래스를 어떻게 확인할 수 있습니까?
또 다른 문제는 트리를 인쇄하는 것입니다. toString 메서드를 사용하면 괜찮은 결과를 얻었지만 생성자는 클래스와 동일한 이름의 메서드 대신 "<init>"이라는 메서드로 인쇄되므로 모든 종류의 Tree 노드를 수동으로 인쇄해야합니다.