Pluggable Annotation Processing API를 사용하여 Java 주석을 처리 중입니다. 어쨌든 주석을 처리하는 것도 가능합니까 내부 방법 본체?메소드 본체 내부의 주석 처리
도움 주셔서 감사합니다. 피터
Pluggable Annotation Processing API를 사용하여 Java 주석을 처리 중입니다. 어쨌든 주석을 처리하는 것도 가능합니까 내부 방법 본체?메소드 본체 내부의 주석 처리
도움 주셔서 감사합니다. 피터
내 생각, 내가 해결책을 발견했다. 내 생각에, 현재 javac에서는 불가능합니다. 로컬 주석은 단순한 주석이며 플러그 가능한 주석 처리 API로 처리되지 않습니다. 그러나 JSR308에는 유형 변수, 지역 변수, 주석 유형 검사 및 캐스팅의 매개 변수로서 놀라운 것을 지원하는 유형 주석을 처리하는 흥미로운 작업이 있습니다 ... 그리고 보이는 것처럼 그것은 openJDK 8에 통합됩니다. nice
그 대답에 대해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) {
// ...
}
}
고마워요. 그러나'methods'는 엘리먼트 집합의 의미이며, 주석이 달린 필드를 이미 포함해야합니다 (이는 메소드가 해당 집합에 나쁜 이름을 붙이게됩니다). 그래서'fieldsIn'은 "fields (= local variables) in method"를 반환하지 않고 단지 주어진 원소들을 필터링합니다. 그리고 그 문제는 API가 주석 처리 된 지역 변수를주지 못한다는 것입니다 ('process' 메소드의 매개 변수로서). 당분간, 나는 (주석이없는) 클래스를 모두 처리하고 수동으로 local-variable-annotations를 검색해야만하는 것처럼 보입니다. (정확하게는 모르겠지만). 또는 예제를 사용할 수있는 방법이 있습니까? – wrm
JSR 308은 주석 처리를 직접 지원하지 않습니다 (로컬 변수 주석이 클래스 파일에 저장되지 않은 오랜 버그를 수정하더라도). [Checker Framework] (http://checkerframework.org)는 JSR 308을 기반으로하며 메서드 본문 내의 주석을 처리하는 편리한 방문자를 제공합니다. – mernst