GS-reactor ― Annotations personnalisées

Il est possible de définir des annotations personnalisées en plus des annotations définies dans le réacteur. Afin de pouvoir être correctement interprétées par le réacteur, les annotations personnalisées doivent remplir un certain nombre de conditions :

  • Avoir @Retention(RetentionPolicy.RUNTIME) et @Target(ElementType.TYPE) ;
  • Être répétables, avec @Repeatable(...) ;
  • Définir les attributs path() et pos(), avec des tableaux vides comme valeur par défaut ;
  • Définir le traitement à effectuer pour l’annotation à l’aide de @Process.

Voici un exemple de définition d’annotation :

@Process

L’annotation @Process indique le traitement à effectuer sur un tag une fois que l’on a déterminé l’annotation qui s’y applique. Elle prend deux attributs :

  • value est une classe implémentant BiConsumer<Annotation, Tag>. Ce consumer effectue le traitement sur le tag, ici on indique que le style doit être hérité.
  • repeatable est un booléen indiquant si l’annotation est « répétable » pour le réacteur. Si repeatable vaut false, une seule annotation peut être appliquée à un tag donné (le consumer donné par value ne peut être appelé qu’une seule fois sur le tag). Si repeatable vaut true, plusieurs annotations (du même type) peuvent être appliquées au même tag. Par défaut, repeatable vaut false.

@CustomAnnotations

Pour indiquer au réacteur que l’on souhaite utiliser une ou des annotations personnalisées, il faut utiliser l’annotation @CustomAnnotations, uniquement sur la classe de la racine de l’application, qui doit implémenter RootTag. @CustomAnnotations sera ignorée si elle est utilisée ailleurs que sur la la racine. Par exemple, pour utiliser l’annotation définie ci-dessus dans l’application CarColor, on utilisera :