[
https://issues.jboss.org/browse/FORGE-1671?page=com.atlassian.jira.plugin...
]
Antonio Goncalves commented on FORGE-1671:
------------------------------------------
Another attempt... but looks like it's impossible to do with Roaster at the moment :
{code}
public class BeanValidationAnnotation {
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);
}
}
{code}
Add nested annotation to a constraint annotation
------------------------------------------------
Key: FORGE-1671
URL:
https://issues.jboss.org/browse/FORGE-1671
Project: Forge
Issue Type: Sub-task
Components: Java EE
Affects Versions: 2.2.0.Final
Reporter: Antonio Goncalves
Fix For: 2.x Future
At the moment a constraint annotation does not contain a {{List}} of constraints. So, at
the moment, the command {{constraint-new-annotation}} generates the following code :
{code}
@Documented
@Constraint(validatedBy = {})
@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@ReportAsSingleViolation
public @interface URL {
String message() default "Invalid value";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
{code}
It should add a nested annotation {{List}} of type array of constraint
{code}
@Documented
@Constraint(validatedBy = {})
@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@ReportAsSingleViolation
public @interface URL {
String message() default "Invalid value";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface List {
URL[] value();
}
}
{code}
See class : {{NewAnnotationCommand}}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira