[forge-dev] [Roaster] Don't know how to add an annotation inside another one

Antonio Goncalves antonio.mailing at gmail.com
Sat Mar 22 02:25:31 EDT 2014


Hi,

This is a Roaster question. I've been trying to create a Bean Validation
constraint properly... in vain. What I want to achieve is the following
(notice the @List annotation) :

@Target({*METHOD*, *FIELD*, *ANNOTATION_TYPE*, *CONSTRUCTOR*, *PARAMETER*})
@Retention(*RUNTIME*)
@Documented
@Constraint(validatedBy = {})
*public *@*interface *Email {

  String message() *default **"wrong email address"*;

  Class<?>[] groups() *default *{};

  Class<? *extends *Payload>[] payload() *default *{};

  @Target({*METHOD*, *FIELD*, *ANNOTATION_TYPE*, *CONSTRUCTOR*, *PARAMETER*
})
  @Retention(*RUNTIME*)
  @*interface **List* {
    Email[] value();
  }
}


This is the code I've written. Both annotation are generated separately...
but I don't know how to add listAnnotation inside emailAnnotation. Any idea
?

Thanks


public class Main {
    public static void main(String[] args) {

        // This is the inner annotation List
        final JavaAnnotationSource listAnnotation =
Roaster.create(JavaAnnotationSource.class);
        listAnnotation.setName("List");
        listAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
        listAnnotation.addAnnotation(Target.class).setEnumValue(METHOD,
FIELD, PARAMETER, TYPE);
        listAnnotation.addAnnotationElement("Email[] value()");
        System.out.println(listAnnotation);

        // This is the annotation @Email
        final JavaAnnotationSource emailAnnotation =
Roaster.create(JavaAnnotationSource.class);
        emailAnnotation.setPackage("org.agoncal.proj.constraints").setName("Email");
        emailAnnotation.addImport(Payload.class);
        emailAnnotation.addAnnotation(Documented.class);
        emailAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
        emailAnnotation.addAnnotation(Target.class).setEnumValue(METHOD,
FIELD, PARAMETER, TYPE);
        emailAnnotation.addAnnotation(Constraint.class).setLiteralValue("validatedBy",
"{}");
        emailAnnotation.addAnnotationElement("String message() default
\"wrong email address\"");
        emailAnnotation.addAnnotationElement("Class<?>[] groups() default {}");
        emailAnnotation.addAnnotationElement("Class<? extends
Payload>[] payload() default {}");
                // I was expecting to have a method like that so I
could add annotation inside another one
        // emailAnnotation.addAnnotationElement(emailAnnotation);
                System.out.println(emailAnnotation);

    }

}




-- 
Antonio Goncalves
Software architect and Java Champion

Web site <http://www.antoniogoncalves.org/> |
Twitter<http://twitter.com/agoncal>
 | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris
JUG<http://www.parisjug.org/>
 | Devoxx France <http://www.devoxx.fr/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20140322/435392b8/attachment.html 


More information about the forge-dev mailing list