2017-03-06 6 views
2

J'utilise Immutables (http://immutables.org) dans mon interface Java pour générer des générateurs et des objets immuables. J'ai créé une annotation de niveau de méthode personnalisée appelée @Primary (indiquant quel attribut est le champ principal) que j'ai utilisé pour annoter l'une de mes méthodes dans l'interface Immutable. Je ne vois pas l'annotation dans la classe Java générée créée par immutables. J'ai essayé de regarder BYOA (apportez votre propre annotation) mais cela n'aide pas.Transférer l'annotation de l'interface à la classe Java générée lors de l'utilisation de Immutables

Existe-t-il un moyen d'obtenir l'annotation @Primary sur la classe Java immutable générée?

MISE À JOUR (Basé sur la suggestion de Sean ci-dessous)

J'ai maintenant une configuration ci-dessous basé sur

package-info.java

package com.mypackage; 


import com.mercuria.recon.custom.annotation.Primary; 
import org.immutables.value.Value; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target({ElementType.PACKAGE, ElementType.TYPE}) 
@Retention(RetentionPolicy.CLASS) // Make it class retention for incremental compilation 
@Value.Style(passAnnotations=Primary.class) 
public @interface MyStyle {} 

Annotation primaire

package com.mypackage.custom.annotation; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Primary { 

} 

Je vois une erreur dans package-info.json où il est dit que MyStyle doit être déclaré dans son propre fichier. Je ne suis pas sûr que la configuration ci-dessus est correcte. S'il vous plaît pouvez-vous conseiller où je vais mal?

+0

package-info.json? Le fichier est supposé s'appeler package-info.java. Et vous ne devriez pas définir une annotation personnalisée ici, mais plutôt annoter le paquet (voir ma réponse) –

Répondre

1

Vous pouvez configurer les annotations à transmettre avec l'annotation @Style, que vous pouvez utiliser au niveau du package.

E.g. créer un fichier appelé package-info.java dans un paquet et annoter avec

@Style(passAnnotations=Primary.class) 

Voir: Style customization (explique sur l'endroit où stocker une annotation @Style, mais ne mentionne pas le mécanisme passAnnotations)

Voici un fichier package-info.java exemple:

@Style(passAnnotations = YourAnnotation.class) 
package com.yourapp; 

import com.yourapp.annotations.YourAnnotation; 
import org.immutables.value.Value.Style; 

noter que les annotations sont au-dessus de la déclaration package et les import s ci-dessous.

+0

Salut, Merci de m'avoir indiqué Styles. Je ne suis pas sûr d'avoir tout compris. J'ai mis à jour mon message initial avec la façon dont j'ai configuré. S'il vous plaît pouvez-vous me dire où je pourrais me tromper? – megan

+0

L'annotation Styles configure votre génération de code. Vous pouvez annoter votre classe directement avec elle ou, si vous souhaitez appliquer les mêmes paramètres à plusieurs classes, annoter le package. –

+0

Je crois que je ne configure pas correctement le fichier package-info.java. Quel devrait être le contenu de ce fichier. Pouvez-vous s'il vous plaît laissez-moi savoir ce qui est incorrect dans l'échantillon que j'ai collé ci-dessus? – megan