2014-05-12 4 views
0

단위 테스트를위한 통계를 얻기 위해 커스터마이징 된 주석을 사용하려고합니다. 다른 사람이 다음과 같이 맞춤 주석을 정의했습니다.자바의 소스 코드에서 커스터마이징 주석을 얻는 방법은 무엇입니까?

@Retention(RetentionPolicy.SOURCE) 
@Target({ ElementType.METHOD, ElementType.TYPE}) 
public @interface TimsID { 
    String id(); 
    String description() default ""; 
} 

내가해야 할 일은 프로젝트의 모든 단위 테스트에서이 주석을 추출하는 것입니다.

는 여기에 문제가 온다 :

RetentionPolicy는 SOURCE으로 정의된다, 내가 단위 테스트에 그것을 얻을하는 방법을 모르겠어요.
나는 그것이 RUNTIME을의 경우,이 같은 반 성적 읽을 수 있다는 것을 알고

Class<TestExample> obj = TestExample.class; 

    // Process @TimsID 
    if (obj.isAnnotationPresent(TimsID.class)) { 

     Annotation annotation = obj.getAnnotation(TimsID.class); 
     TimsID TimsID = (TimsID) annotation; 
    } 

을하지만 지금은 주석 컴파일러에 의해 클래스 파일에 기록 또는에서 VM에 의해 유지되지 않습니다, 'SOURCE'입니다 실행 시간, 그래서 그들은 반사적으로 읽을 수 없습니다.

사용자 정의 주석을 정의한 사람이 "소스"를 선택하는 이유는 소스 코드에서이 주석을 통계해야하기 때문에 이러한 사용자 지정 주석을 클래스 파일이나 런타임에도 쓸 필요가 없다는 것입니다. 소스 코드에서만 주석 분석이 필요합니다.

저는이 작업을 완료했으며 here is the step and code입니다.

답변

1

SOURCE 보유는 컴파일 과정에서만 사용하기위한 것입니다. 이러한 종류의 컴파일 타임 주석 처리 로직을 수행하는 방법에 대한 자세한 내용은 APT (Annotation Processing Tool)를 참조하십시오. (그러나 나는 그것이 당신이 원하는 것을 할 수 있는지 궁금합니다)

0

불행히도 소스 코드에서 RetentionPolicy을 변경해야합니다. 어노테이션을 런타임시에도 리플렉션에 사용할 수있는 다른 방법은 없습니다.

+0

예, 그들은 반사에서 얻을 수 없습니다. .class 또는 .java 파일에서 가져 오는 다른 방법을 알고 있습니까? –

+0

javadoc [doclet] (http://docs.oracle.com/javase/6/docs/technotes/guides/javadoc/doclet/overview.html)을 작성해보십시오. 나는 과거에 이런 종류의 일을 성공적으로 해왔다. 일회적으로 데이터를 추출하는 데 사용할 수 있습니다. 나는 그것이 당신의 빌드 프로세스와 지속적으로 통합 될 것이라고 생각하지 않습니다. – sigpwned

관련 문제