Annotationen
Jedes Element des Modells ist Annotated. Der Unterschied zwischen annotations und declaredAnnotations ist, wo die Suche endet, und scala-universe sucht weiter als einfache Reflection.
findAnnotation
findAnnotation liefert die Annotation genau dieses Typs oder null. findDeclaredAnnotation schaut nur auf das Element selbst.
Wohin Annotationen wandern
annotations folgt der Hierarchie für jede Art von Element. Das ist unabhängig von Javas @Inherited, das nur für Klassenannotationen von Oberklassen gilt.
- ResolvedClass
- Die eigenen plus die jeder Oberklasse und jedes Interfaces.
- ResolvedMethod
- Die eigenen plus die jeder Methode, die sie überschreibt.
- ResolvedField
- Die eigenen plus die der Felder, die es verdeckt.
- ResolvedParameter
- Die eigenen plus die desselben Parameters in überschriebenen Methoden.
- AbstractProperty
- Die von Feld, Getter und Setter zusammen.
Welche Annotationen zur Laufzeit existieren
Nur Java-Annotationen mit RetentionPolicy.RUNTIME landen so in der Klassendatei, dass Reflection sie lesen kann. Scala-Annotationen, die StaticAnnotation erweitern, sind hier unsichtbar.
Eine Scala-var oder -val ist ein Feld plus Accessoren. @field, @getter und @setter sagen, welcher Teil die Annotation trägt; Properties finden sie so oder so, weil sie Feld und Accessoren zusammenführen.