2017-03-12 11 views
1

나는 어노테이션과 기본 클래스를 포함하는 두 개의 패키지를 라이브러리에 가지고있다. 이 질문의 컨텍스트에서 javax.annotation.processing.AbstractProcessor를 확장합니다.주석 처리 환경에서 패키지의 모든 TypeElements를 가져올 수 있습니까?

패키지에 선언 된 모든 유형에 대해 java.lang.TypeElement의 List/Array/Set을 가져 오는 방법이 있습니까? 또는 심지어 요소?

현재 라이브러리의 관련 개체 그룹을 나타 내기 위해 존재하는 Type의 주석을 사용하여 클래스를 그룹으로 표시하는 해결 방법이 있습니다. 명시 적 선언이 아닌 패키지 (유형)별로 유형을 그룹화하는 간단한 방법이 있습니까?

답변

2

답을 찾을 수 - 정말 도움이 요소/유형/패키지 액세스를 수행 할 javax.lang.model.util.Elements 인스턴스를 얻기 위해 (내 AbstractProcessor 서브 클래스)를 ProcessingEnvironment 인스턴스 변수를 사용하십시오 javadoc에 따라,

List<TypeMirror> typeMirrorsInPackage = processingEnv.getElementUtils() 
       .getPackageElement("com.example.sample.annotations") 
       .getEnclosedElements() 
       .stream() 
       .map(Element::asType) 
       .filter(mirror -> mirror.getKind() == TypeKind.DECLARED) 
       .collect(Collectors.toList()); 

가주의를 : 이것이 일반 요소 인 경우 프로토 타입이 반환됩니다. 이것은 자신의 공식 형식 매개 변수에 해당하는 유형 변수에 대한 요소의 호출입니다. 분명히 Types 클래스에는 제네릭을 처리하는 데 유용한 유틸리티 메서드가 있습니다.