2011-10-18 14 views

Respuesta

4

pienso, he encontrado la solución. Como pensé, no es posible con el javac actual. las anotaciones locales son comentarios simples y no se procesarán con la API de procesamiento de anotación conectable. PERO hay esfuerzos interesantes en JSR308, manejo de anotaciones de tipo que soportan cosas maravillosas como parámetros en variables de tipo, variables locales, revisión de tipo anotado y fundición ... y como se ve, se incorporará en openJDK 8. nice

+0

JSR 308 no admite directamente el proceso de anotación (aunque corrige un error de larga data en el que las anotaciones de variables locales no se almacenaban en el archivo de clase). Tiene las otras características que menciona, y es parte de Java 8. El [Checker Framework] (http://checkerframework.org) se basa en JSR 308 y proporciona visitantes convenientes que procesan las anotaciones dentro de los cuerpos del método. – mernst

1

En JSR269, la interfaz relevante sería javax.lang.model.element.VariableElement, que hereda getAnnotation(Class<A> annotationType) para acceder a este tipo de anotaciones:

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

gracias por esa respuesta. Pero 'methods' es un conjunto de elementos que significa que ya debe contener los campos anotados (lo que hace que el método sea un mal nombre para ese conjunto). por lo tanto, 'fieldsIn' does not return" fields (= variables locales) en un método "pero solo filtra un conjunto de elementos dados. Y el problema con eso es que la API no me dará variables locales anotadas (como parámetro del método 'process'). Por ahora, parece que tengo que procesar TODAS las clases (no solo anotadas) y buscar anotaciones de variables locales manualmente (aunque no sé exactamente cómo). o hay una forma de usar tu ejemplo? – wrm

Cuestiones relacionadas