2011-10-18 2 views
9

Pluggable Annotation Processing API를 사용하여 Java 주석을 처리 중입니다. 어쨌든 주석을 처리하는 것도 가능합니까 내부 방법 본체?메소드 본체 내부의 주석 처리

도움 주셔서 감사합니다. 피터

답변

4

내 생각, 내가 해결책을 발견했다. 내 생각에, 현재 javac에서는 불가능합니다. 로컬 주석은 단순한 주석이며 플러그 가능한 주석 처리 API로 처리되지 않습니다. 그러나 JSR308에는 유형 변수, 지역 변수, 주석 유형 검사 및 캐스팅의 매개 변수로서 놀라운 것을 지원하는 유형 주석을 처리하는 흥미로운 작업이 있습니다 ... 그리고 보이는 것처럼 그것은 openJDK 8에 통합됩니다. nice

그 대답에 대해
+0

JSR 308은 주석 처리를 직접 지원하지 않습니다 (로컬 변수 주석이 클래스 파일에 저장되지 않은 오랜 버그를 수정하더라도). [Checker Framework] (http://checkerframework.org)는 JSR 308을 기반으로하며 메서드 본문 내의 주석을 처리하는 편리한 방문자를 제공합니다. – mernst

1

JSR269에서, 관련 인터페이스는 주석을 액세스하기위한 getAnnotation(Class<A> annotationType)을 상속 javax.lang.model.element.VariableElement, 다음과 같습니다

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

고마워요. 그러나'methods'는 엘리먼트 집합의 의미이며, 주석이 달린 필드를 이미 포함해야합니다 (이는 메소드가 해당 집합에 나쁜 이름을 붙이게됩니다). 그래서'fieldsIn'은 "fields (= local variables) in method"를 반환하지 않고 단지 주어진 원소들을 필터링합니다. 그리고 그 문제는 API가 주석 처리 된 지역 변수를주지 못한다는 것입니다 ('process' 메소드의 매개 변수로서). 당분간, 나는 (주석이없는) 클래스를 모두 처리하고 수동으로 local-variable-annotations를 검색해야만하는 것처럼 보입니다. (정확하게는 모르겠지만). 또는 예제를 사용할 수있는 방법이 있습니까? – wrm