[jboss-cvs] JBossAS SVN: r59375 - in projects/microcontainer/trunk/container/src/main/org/jboss: metadata/spi/signature reflect/plugins

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 5 11:48:01 EST 2007


Author: kabir.khan at jboss.com
Date: 2007-01-05 11:47:58 -0500 (Fri, 05 Jan 2007)
New Revision: 59375

Modified:
   projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/signature/Signature.java
   projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ArrayInfoImpl.java
Log:
Fix signatures for primitive arrays

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/signature/Signature.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/signature/Signature.java	2007-01-05 12:21:33 UTC (rev 59374)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/signature/Signature.java	2007-01-05 16:47:58 UTC (rev 59375)
@@ -56,6 +56,7 @@
 
    /** The primitive types indexed by names */
    private static final Map<String, Class> primitiveTypes = new HashMap<String, Class>();
+   private static final Map<String, String> primitiveArrayTypes = new HashMap<String, String>();
    static
    {
       primitiveTypes.put(Byte.TYPE.getName(), Byte.TYPE);
@@ -66,6 +67,15 @@
       primitiveTypes.put(Integer.TYPE.getName(), Integer.TYPE);
       primitiveTypes.put(Long.TYPE.getName(), Long.TYPE);
       primitiveTypes.put(Short.TYPE.getName(), Short.TYPE);
+      
+      primitiveArrayTypes.put(Byte.TYPE.getName(), "B");
+      primitiveArrayTypes.put(Boolean.TYPE.getName(), "Z");
+      primitiveArrayTypes.put(Character.TYPE.getName(), "C");
+      primitiveArrayTypes.put(Double.TYPE.getName(), "D");
+      primitiveArrayTypes.put(Float.TYPE.getName(), "F");
+      primitiveArrayTypes.put(Integer.TYPE.getName(), "I");
+      primitiveArrayTypes.put(Long.TYPE.getName(), "J");
+      primitiveArrayTypes.put(Short.TYPE.getName(), "S");
    }
    
    /**
@@ -126,16 +136,31 @@
       Class[] result = new Class[parameters.length];
       for (int i = 0; i < result.length; ++i)
       {
-         Class primitive = primitiveTypes.get(parameters[i]);
-         if (primitive != null)
+         String param = parameters[i]; 
+         int index = param.lastIndexOf('[');
+         if (index >= 0)
          {
-            result[i] = primitive;
-            continue;
+            //For arrays we will want to load the class, the ArrayInfoImpl generates names in an invalid format, resolve this here
+            String primitiveCandidate = param.substring(index + 1);
+            String componentType = primitiveArrayTypes.get(primitiveCandidate);
+            if (componentType != null)
+            {
+               param = param.substring(0, index + 1) + componentType;
+            }
          }
+         else
+         {
+            Class primitive = primitiveTypes.get(param);
+            if (primitive != null)
+            {
+               result[i] = primitive;
+               continue;
+            }
+         }
          
          try
          {
-            result[i] = cl.loadClass(parameters[i]);
+            result[i] = cl.loadClass(param);
          }
          catch (ClassNotFoundException e)
          {

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ArrayInfoImpl.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ArrayInfoImpl.java	2007-01-05 12:21:33 UTC (rev 59374)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/ArrayInfoImpl.java	2007-01-05 16:47:58 UTC (rev 59375)
@@ -23,6 +23,7 @@
 
 import org.jboss.reflect.spi.AnnotationValue;
 import org.jboss.reflect.spi.ArrayInfo;
+import org.jboss.reflect.spi.PrimitiveInfo;
 import org.jboss.reflect.spi.TypeInfo;
 
 /**
@@ -65,7 +66,14 @@
          builder.append("[");
          temp = ((ArrayInfo) temp).getComponentType();
       }
-      builder.append("L").append(temp.getName()).append(";");
+      if (temp.getClass().equals(PrimitiveInfo.class))
+      {
+         builder.append(temp.getName());
+      }
+      else
+      {
+         builder.append("L").append(temp.getName()).append(";");
+      }
       name = builder.toString();
       calculateHash();
    }




More information about the jboss-cvs-commits mailing list