[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