Companions und Klassenpfad
Zwei Helfer rund um Typen: das Companion-Objekt einer Scala-Klasse und ein Annotationsindex über ein Paket.
Von der Klasse zu ihrem Objekt
companionClass findet die Klasse Name$, companionInstance ihre MODULE$-Instanz, geprüft gegen den erwarteten Typ. Beide geben null zurück, wenn es keine gibt.
So findet json-mapper das Schema einer Entity: den Companion, der SchemaProvider implementiert. Weil companionInstance den Typ prüft, kommt ein Companion anderer Art als null zurück, statt später zu scheitern.
Ein Annotationsindex
process lädt jede Klasse unterhalb eines Paketpräfixes und indexiert die Annotationen an Klassen, Konstruktoren, deren Parametern, Feldern und Methoden. findAnnotation liefert jede Annotation mit dem Element, das sie trägt.
ClassPathResolver ist auch eine CDI-Extension. In META-INF/services registriert, sammelt sie jeden Typ, den der Container entdeckt, und baut nach dem Deployment denselben Index.
findAnnotation wirft NoSuchElementException für eine Annotation, die nie indexiert wurde. Führe process aus oder lass die CDI-Extension laufen, bevor du nachschlägst.