diff --git a/pom.xml b/pom.xml
index e5f9bbc1d..9f88be34d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.mysema.codegen
codegen
- 0.2.3-SNAPSHOT
+ 0.2.4
Codegen
Code generation and compilation for Java
@@ -58,6 +58,13 @@
1.3.2
test
+
+
+ javax.validation
+ validation-api
+ 1.0.CR3
+ test
+
diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java
index b3d4a468f..f53cb4fe2 100644
--- a/src/main/java/com/mysema/codegen/JavaWriter.java
+++ b/src/main/java/com/mysema/codegen/JavaWriter.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -102,6 +103,8 @@ public final class JavaWriter extends AbstractCodeWriter{
Object value = method.invoke(annotation);
if (value == null || value.equals(method.getDefaultValue())){
continue;
+ }else if (value.getClass().isArray() && Arrays.equals((Object[])value, (Object[])method.getDefaultValue())){
+ continue;
}else if (!first){
append(COMMA);
}else{
@@ -133,7 +136,18 @@ public final class JavaWriter extends AbstractCodeWriter{
@SuppressWarnings("unchecked")
private void annotationConstant(Object value) throws IOException{
- if (value instanceof Class){
+ if (value.getClass().isArray()){
+ append("{");
+ boolean first = true;
+ for (Object o : (Object[])value){
+ if (!first){
+ append(", ");
+ }
+ annotationConstant(o);
+ first = false;
+ }
+ append("}");
+ }else if (value instanceof Class){
appendType((Class)value).append(".class");
}else if (value instanceof Number || value instanceof Boolean){
append(value.toString());
diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java
index db32d646c..018560e04 100644
--- a/src/test/java/com/mysema/codegen/AnnotationTest.java
+++ b/src/test/java/com/mysema/codegen/AnnotationTest.java
@@ -46,5 +46,23 @@ public class AnnotationTest {
writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class));
assertEquals("@org.junit.Test", w.toString().trim());
}
+
+ @Test
+ public void testMin() throws IOException{
+ writer.annotation(new MinImpl(10));
+ assertEquals("@javax.validation.constraints.Min(value=10)", w.toString().trim());
+ }
+
+ @Test
+ public void testMax() throws IOException{
+ writer.annotation(new MaxImpl(10));
+ assertEquals("@javax.validation.constraints.Max(value=10)", w.toString().trim());
+ }
+
+ @Test
+ public void testNotNull() throws IOException{
+ writer.annotation(new NotNullImpl());
+ assertEquals("@javax.validation.constraints.NotNull", w.toString().trim());
+ }
}
diff --git a/src/test/java/com/mysema/codegen/MaxImpl.java b/src/test/java/com/mysema/codegen/MaxImpl.java
new file mode 100644
index 000000000..e7917a2e8
--- /dev/null
+++ b/src/test/java/com/mysema/codegen/MaxImpl.java
@@ -0,0 +1,46 @@
+package com.mysema.codegen;
+
+import java.lang.annotation.Annotation;
+
+import javax.validation.ConstraintPayload;
+import javax.validation.constraints.*;
+
+/**
+ * @author tiwe
+ *
+ */
+@SuppressWarnings("all")
+public class MaxImpl implements Max{
+
+ private final long value;
+
+ public MaxImpl(long value) {
+ this.value = value;
+ }
+
+ @Override
+ public Class>[] groups() {
+ return new Class[0];
+ }
+
+ @Override
+ public String message() {
+ return "{javax.validation.constraints.Max.message}";
+ }
+
+ @Override
+ public Class extends ConstraintPayload>[] payload() {
+ return new Class[0];
+ }
+
+ @Override
+ public long value() {
+ return value;
+ }
+
+ @Override
+ public Class extends Annotation> annotationType() {
+ return Max.class;
+ }
+
+}
diff --git a/src/test/java/com/mysema/codegen/MinImpl.java b/src/test/java/com/mysema/codegen/MinImpl.java
new file mode 100644
index 000000000..a3058dcd1
--- /dev/null
+++ b/src/test/java/com/mysema/codegen/MinImpl.java
@@ -0,0 +1,46 @@
+package com.mysema.codegen;
+
+import java.lang.annotation.Annotation;
+
+import javax.validation.ConstraintPayload;
+import javax.validation.constraints.*;
+
+/**
+ * @author tiwe
+ *
+ */
+@SuppressWarnings("all")
+public class MinImpl implements Min{
+
+ private final long value;
+
+ public MinImpl(long value) {
+ this.value = value;
+ }
+
+ @Override
+ public Class>[] groups() {
+ return new Class[0];
+ }
+
+ @Override
+ public String message() {
+ return "{javax.validation.constraints.Min.message}";
+ }
+
+ @Override
+ public Class extends ConstraintPayload>[] payload() {
+ return new Class[0];
+ }
+
+ @Override
+ public long value() {
+ return value;
+ }
+
+ @Override
+ public Class extends Annotation> annotationType() {
+ return Min.class;
+ }
+
+}
diff --git a/src/test/java/com/mysema/codegen/NotNullImpl.java b/src/test/java/com/mysema/codegen/NotNullImpl.java
new file mode 100644
index 000000000..be7048914
--- /dev/null
+++ b/src/test/java/com/mysema/codegen/NotNullImpl.java
@@ -0,0 +1,35 @@
+package com.mysema.codegen;
+
+import java.lang.annotation.Annotation;
+
+import javax.validation.ConstraintPayload;
+import javax.validation.constraints.*;
+
+/**
+ * @author tiwe
+ *
+ */
+@SuppressWarnings("all")
+public class NotNullImpl implements NotNull{
+
+ @Override
+ public Class>[] groups() {
+ return new Class[0];
+ }
+
+ @Override
+ public String message() {
+ return "{javax.validation.constraints.NotNull.message}";
+ }
+
+ @Override
+ public Class extends ConstraintPayload>[] payload() {
+ return new Class[0];
+ }
+
+ @Override
+ public Class extends Annotation> annotationType() {
+ return NotNull.class;
+ }
+
+}