[weld-commits] Weld SVN: r5189 - in extensions/trunk/core/src: test/java/org/jboss/weld/test and 2 other directories.
weld-commits at lists.jboss.org
weld-commits at lists.jboss.org
Wed Dec 2 06:39:20 EST 2009
Author: pete.muir at jboss.org
Date: 2009-12-02 06:39:20 -0500 (Wed, 02 Dec 2009)
New Revision: 5189
Added:
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotatedClass.java
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotationInstanceProviderTest.java
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/IntMemberAnnotation.java
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/MultipleMembers.java
extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/SimpleAnnotation.java
Modified:
extensions/trunk/core/src/main/java/org/jboss/weld/extensions/util/AnnotationInvocationHandler.java
Log:
WELDX-53, thanks to Stuart Douglas
Modified: extensions/trunk/core/src/main/java/org/jboss/weld/extensions/util/AnnotationInvocationHandler.java
===================================================================
--- extensions/trunk/core/src/main/java/org/jboss/weld/extensions/util/AnnotationInvocationHandler.java 2009-12-02 11:27:44 UTC (rev 5188)
+++ extensions/trunk/core/src/main/java/org/jboss/weld/extensions/util/AnnotationInvocationHandler.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -86,44 +86,50 @@
else
{
Object val = valueMap.get(method.getName());
- if (val != null)
+ Class<?> r = method.getReturnType();
+ val = performTypeCoercion(val, r);
+ return val;
+ }
+
+ }
+
+ private Object performTypeCoercion(Object val, Class<?> type)
+ {
+ if (val != null)
+ {
+ if (Integer.class.isAssignableFrom(type) || type == int.class)
{
- Class r = method.getReturnType();
- if (Integer.class.isAssignableFrom(r) || r == int.class)
+ return ((Number) val).intValue();
+ }
+ else if (Long.class.isAssignableFrom(type) || type == long.class)
+ {
+ return ((Number) val).longValue();
+ }
+ else if (Short.class.isAssignableFrom(type) || type == short.class)
+ {
+ return ((Number) val).shortValue();
+ }
+ else if (Byte.class.isAssignableFrom(type) || type == byte.class)
+ {
+ return ((Number) val).byteValue();
+ }
+ else if (Double.class.isAssignableFrom(type) || type == double.class)
+ {
+ return ((Number) val).doubleValue();
+ }
+ else if (Float.class.isAssignableFrom(type) || type == float.class)
+ {
+ return ((Number) val).floatValue();
+ }
+ else if (Character.class.isAssignableFrom(type) || type == char.class)
+ {
+ if (String.class.isAssignableFrom(val.getClass()))
{
- val = ((Number) val).intValue();
+ return val.toString().charAt(0);
}
- else if (Long.class.isAssignableFrom(r) || r == long.class)
- {
- val = ((Number) val).longValue();
- }
- else if (Short.class.isAssignableFrom(r) || r == short.class)
- {
- val = ((Number) val).shortValue();
- }
- else if (Byte.class.isAssignableFrom(r) || r == byte.class)
- {
- val = ((Number) val).shortValue();
- }
- else if (Double.class.isAssignableFrom(r) || r == double.class)
- {
- val = ((Number) val).doubleValue();
- }
- else if (Float.class.isAssignableFrom(r) || r == float.class)
- {
- val = ((Number) val).floatValue();
- }
- else if (Character.class.isAssignableFrom(r) || r == char.class)
- {
- if (String.class.isAssignableFrom(val.getClass()))
- {
- val = val.toString().charAt(0);
- }
- }
}
- return val;
}
-
+ return val;
}
@Override
@@ -134,7 +140,7 @@
for (int i = 0; i < members.length; i++)
{
string.append(members[i].getName()).append('=');
- Object value = invoke(members[i], this);
+ Object value = performTypeCoercion(valueMap.get(members[i].getName()), members[i].getReturnType());
if (value instanceof boolean[])
{
appendInBraces(string, Arrays.toString((boolean[]) value));
@@ -226,7 +232,7 @@
{
for (Method member : members)
{
- Object thisValue = valueMap.get(member.getName());
+ Object thisValue = performTypeCoercion(valueMap.get(member.getName()), member.getReturnType());
Object thatValue = invoke(member, that);
if (thisValue instanceof byte[] && thatValue instanceof byte[])
{
@@ -276,7 +282,9 @@
else
{
if (!thisValue.equals(thatValue))
+ {
return false;
+ }
}
}
return true;
@@ -292,7 +300,7 @@
for (Method member : members)
{
int memberNameHashCode = 127 * member.getName().hashCode();
- Object value = valueMap.get(member.getName());
+ Object value = performTypeCoercion(valueMap.get(member.getName()), member.getReturnType());
int memberValueHashCode;
if (value instanceof boolean[])
{
Added: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotatedClass.java
===================================================================
--- extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotatedClass.java (rev 0)
+++ extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotatedClass.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -0,0 +1,9 @@
+package org.jboss.weld.test.extensions.util;
+
+ at SimpleAnnotation
+ at IntMemberAnnotation(someMember = 0, value = 1)
+ at MultipleMembers(booleanMember = true, byteMember = 1, charMember = 'c', doubleMember = 0, floatMember = 0, intMember = 1, intArrayMember = { 0, 1 }, longMember = 1, shortMember = 1)
+public class AnnotatedClass
+{
+
+}
Property changes on: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotatedClass.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotationInstanceProviderTest.java
===================================================================
--- extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotationInstanceProviderTest.java (rev 0)
+++ extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotationInstanceProviderTest.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -0,0 +1,90 @@
+package org.jboss.weld.test.extensions.util;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test of dynamic annotation creation
+ *
+ * @author Stuart Douglas
+ *
+ */
+public class AnnotationInstanceProviderTest
+{
+
+ /**
+ * basic test to make sure the annotation creator can create an annotation
+ */
+ @Test
+ public void testSimpleAnnotationCreation()
+ {
+ AnnotationInstanceProvider provider = new AnnotationInstanceProvider();
+ SimpleAnnotation an = provider.get(SimpleAnnotation.class, Collections.<String, Object>emptyMap());
+ assert an != null : "Annotation was null";
+ assert an.annotationType() == SimpleAnnotation.class : "Annotation returned wrong result for annotationType()";
+ SimpleAnnotation realAn = AnnotatedClass.class.getAnnotation(SimpleAnnotation.class);
+ assert an.equals(realAn) : "Equality between declared annotation failed";
+ }
+
+ /**
+ * Test with int members
+ */
+ @Test
+ public void testIntMemberAnnotationCreation()
+ {
+ AnnotationInstanceProvider provider = new AnnotationInstanceProvider();
+ Map<String, Object> values = new HashMap<String, Object>();
+ values.put("value", Long.valueOf(1));
+ values.put("someMember", Integer.valueOf(0));
+ IntMemberAnnotation an = provider.get(IntMemberAnnotation.class, values);
+ assert an != null : "Annotation was null";
+ assert an.annotationType() == IntMemberAnnotation.class : "Annotation returned wrong result for annotationType()";
+ IntMemberAnnotation realAn = AnnotatedClass.class.getAnnotation(IntMemberAnnotation.class);
+ assert an.equals(realAn) : "Equality between declared annotation failed";
+ }
+
+ /**
+ * Test with int members
+ */
+ @Test
+ public void testNotEqualIntMemberAnnotationCreation()
+ {
+ AnnotationInstanceProvider provider = new AnnotationInstanceProvider();
+ Map<String, Object> values = new HashMap<String, Object>();
+ values.put("value", Long.valueOf(6));
+ values.put("someMember", Integer.valueOf(0));
+ IntMemberAnnotation an = provider.get(IntMemberAnnotation.class, values);
+ assert an != null : "Annotation was null";
+ assert an.annotationType() == IntMemberAnnotation.class : "Annotation returned wrong result for annotationType()";
+ IntMemberAnnotation realAn = AnnotatedClass.class.getAnnotation(IntMemberAnnotation.class);
+ assert !an.equals(realAn) : "Equality between declared annotation failed, annotations were not equal but equals returned true";
+ }
+
+ /**
+ * Test with multiple members
+ */
+ @Test
+ public void testMultipleMemberAnnotationCreation()
+ {
+ AnnotationInstanceProvider provider = new AnnotationInstanceProvider();
+ Map<String, Object> values = new HashMap<String, Object>();
+ values.put("intMember", 1);
+ values.put("longMember", 1);
+ values.put("shortMember", 1);
+ values.put("floatMember", 0);
+ values.put("doubleMember", 0);
+ values.put("byteMember", ((byte) 1));
+ values.put("charMember", 'c');
+ values.put("booleanMember", true);
+ values.put("intArrayMember", new int[] { 0, 1 });
+ MultipleMembers an = provider.get(MultipleMembers.class, values);
+ assert an != null : "Annotation was null";
+ assert an.annotationType() == MultipleMembers.class : "Annotation returned wrong result for annotationType()";
+ MultipleMembers realAn = AnnotatedClass.class.getAnnotation(MultipleMembers.class);
+ assert an.equals(realAn) : "Equality between declared annotation failed";
+ }
+}
Property changes on: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/AnnotationInstanceProviderTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/IntMemberAnnotation.java
===================================================================
--- extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/IntMemberAnnotation.java (rev 0)
+++ extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/IntMemberAnnotation.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -0,0 +1,12 @@
+package org.jboss.weld.test.extensions.util;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface IntMemberAnnotation
+{
+ int value();
+
+ int someMember();
+}
Property changes on: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/IntMemberAnnotation.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/MultipleMembers.java
===================================================================
--- extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/MultipleMembers.java (rev 0)
+++ extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/MultipleMembers.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -0,0 +1,26 @@
+package org.jboss.weld.test.extensions.util;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface MultipleMembers
+{
+ int intMember();
+
+ long longMember();
+
+ short shortMember();
+
+ float floatMember();
+
+ double doubleMember();
+
+ byte byteMember();
+
+ char charMember();
+
+ boolean booleanMember();
+
+ int[] intArrayMember();
+}
Property changes on: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/MultipleMembers.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/SimpleAnnotation.java
===================================================================
--- extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/SimpleAnnotation.java (rev 0)
+++ extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/SimpleAnnotation.java 2009-12-02 11:39:20 UTC (rev 5189)
@@ -0,0 +1,10 @@
+package org.jboss.weld.test.extensions.util;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface SimpleAnnotation
+{
+
+}
Property changes on: extensions/trunk/core/src/test/java/org/jboss/weld/test/extensions/util/SimpleAnnotation.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
More information about the weld-commits
mailing list