Estoy tratando de descubrir si el valor de un rasgo tiene una anotación asociada. Después de revisar la API de reflexión Scala 2.10-M7 pensé que el getAnnotations método (que se encuentra en Símbolo) podría ser un gran candidato, pero se está volviendo una lista vacía, como se muestra en la siguiente sesión REPL:¿Cómo se reflejan las anotaciones en Scala 2.10?
scala> class W extends scala.annotation.Annotation
defined class W
scala> trait A { @W val a: Int }
defined trait A
scala> typeOf[A].members.last
res0: $r.intp.global.Symbol = value a
scala> res0.getAnnotations
res1: List[$r.intp.global.AnnotationInfo] = List()
¿Son esas "anotaciones" las mismas anotaciones con las que trato de lidiar? ¿Cómo puedo saber si a está anotado con W?
Pensé que las anotaciones de Scala no se conservaron en tiempo de ejecución? –
No se supone que sean visibles mediante la reflexión de Java, pero deben almacenarse encurtidos Scala. Sin embargo, lo que pasé por alto es que necesita subclasar 'StaticAnnotation' o' ClassfileAnnotation' para que funcione. Subclasificar solo 'Annotation' no lo reducirá, al menos según Scaladoc. –
En unos días, cuando tenga tiempo, aclararé el comportamiento previsto, aplicaré correcciones si es necesario y actualizaré la respuesta en consecuencia. –