From 21a6d7df236264f4589d704f1318dcbd11354888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 2 Sep 2010 12:21:19 +0000 Subject: [PATCH] added support for array annotation values updated version to 0.2.4 --- pom.xml | 9 +++- .../java/com/mysema/codegen/JavaWriter.java | 16 ++++++- .../com/mysema/codegen/AnnotationTest.java | 18 ++++++++ src/test/java/com/mysema/codegen/MaxImpl.java | 46 +++++++++++++++++++ src/test/java/com/mysema/codegen/MinImpl.java | 46 +++++++++++++++++++ .../java/com/mysema/codegen/NotNullImpl.java | 35 ++++++++++++++ 6 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/MaxImpl.java create mode 100644 src/test/java/com/mysema/codegen/MinImpl.java create mode 100644 src/test/java/com/mysema/codegen/NotNullImpl.java 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[] payload() { + return new Class[0]; + } + + @Override + public long value() { + return value; + } + + @Override + public Class 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[] payload() { + return new Class[0]; + } + + @Override + public long value() { + return value; + } + + @Override + public Class 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[] payload() { + return new Class[0]; + } + + @Override + public Class annotationType() { + return NotNull.class; + } + +}