[jboss-cvs] JBossAS SVN: r72880 - projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 29 19:28:39 EDT 2008


Author: alesj
Date: 2008-04-29 19:28:39 -0400 (Tue, 29 Apr 2008)
New Revision: 72880

Modified:
   projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/ConstructorSignature.java
   projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/FieldSignature.java
   projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodParametersSignature.java
   projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodSignature.java
   projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/Signature.java
Log:
Javassist Signatures.
TODO on tests.

Modified: projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/ConstructorSignature.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/ConstructorSignature.java	2008-04-29 23:02:22 UTC (rev 72879)
+++ projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/ConstructorSignature.java	2008-04-29 23:28:39 UTC (rev 72880)
@@ -23,6 +23,8 @@
 
 import java.lang.reflect.Constructor;
 
+import javassist.CtConstructor;
+import javassist.NotFoundException;
 import org.jboss.reflect.spi.ConstructorInfo;
 
 /**
@@ -65,6 +67,17 @@
 
    /**
     * Create a new Signature.
+    *
+    * @param constructor the constructor
+    * @throws NotFoundException for any errors
+    */
+   public ConstructorSignature(CtConstructor constructor) throws NotFoundException
+   {
+      super(convertParameters(constructor.getParameterTypes()));
+   }
+
+   /**
+    * Create a new Signature.
     * 
     * @param constructor the constructor
     */

Modified: projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/FieldSignature.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/FieldSignature.java	2008-04-29 23:02:22 UTC (rev 72879)
+++ projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/FieldSignature.java	2008-04-29 23:28:39 UTC (rev 72880)
@@ -23,6 +23,7 @@
 
 import java.lang.reflect.Field;
 
+import javassist.CtField;
 import org.jboss.reflect.spi.FieldInfo;
 
 /**
@@ -55,6 +56,16 @@
 
    /**
     * Create a new Signature.
+    *
+    * @param field the field
+    */
+   public FieldSignature(CtField field)
+   {
+      super(field.getName());
+   }
+
+   /**
+    * Create a new Signature.
     * 
     * @param field the field
     */

Modified: projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodParametersSignature.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodParametersSignature.java	2008-04-29 23:02:22 UTC (rev 72879)
+++ projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodParametersSignature.java	2008-04-29 23:28:39 UTC (rev 72880)
@@ -23,6 +23,8 @@
 
 import java.lang.reflect.Method;
 
+import javassist.CtMethod;
+import javassist.NotFoundException;
 import org.jboss.reflect.spi.MethodInfo;
 
 /**
@@ -80,6 +82,20 @@
    /**
     * Create a new Signature.
     *
+    * @param method the method
+    * @param param the parameter number
+    * @throws NotFoundException for any error
+    */
+   public MethodParametersSignature(CtMethod method, int param) throws NotFoundException
+   {
+      super(method.getName(), convertParameters(method.getParameterTypes()));
+      this.param = param;
+      checkParam();
+   }
+
+   /**
+    * Create a new Signature.
+    *
     * @param method the method info
     * @param param the parameter number
     */

Modified: projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodSignature.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodSignature.java	2008-04-29 23:02:22 UTC (rev 72879)
+++ projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/MethodSignature.java	2008-04-29 23:28:39 UTC (rev 72880)
@@ -24,6 +24,8 @@
 import java.lang.reflect.Method;
 
 import org.jboss.reflect.spi.MethodInfo;
+import javassist.CtMethod;
+import javassist.NotFoundException;
 
 /**
  * Method Signature.
@@ -67,6 +69,17 @@
 
    /**
     * Create a new Signature.
+    *
+    * @param method the method
+    * @throws NotFoundException for any error
+    */
+   public MethodSignature(CtMethod method) throws NotFoundException
+   {
+      super(method.getName(), convertParameters(method.getParameterTypes()));
+   }
+
+   /**
+    * Create a new Signature.
     * 
     * @param method the method
     */

Modified: projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/Signature.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/Signature.java	2008-04-29 23:02:22 UTC (rev 72879)
+++ projects/jboss-mdr/trunk/src/main/org/jboss/metadata/spi/signature/Signature.java	2008-04-29 23:28:39 UTC (rev 72880)
@@ -28,6 +28,13 @@
 import java.lang.reflect.Method;
 import java.util.Arrays;
 
+import javassist.CtClass;
+import javassist.CtConstructor;
+import javassist.CtField;
+import javassist.CtMember;
+import javassist.CtMethod;
+import javassist.NotFoundException;
+import javassist.CtPrimitiveType;
 import org.jboss.reflect.spi.ConstructorInfo;
 import org.jboss.reflect.spi.FieldInfo;
 import org.jboss.reflect.spi.MemberInfo;
@@ -94,6 +101,36 @@
    }
 
    /**
+    * Get a signature for a member
+    *
+    * @param member the member
+    * @return the result
+    * @throws NotFoundException for any error
+    */
+   public static Signature getSignature(CtMember member) throws NotFoundException
+   {
+      if (member == null)
+         throw new IllegalArgumentException("Null member");
+
+      if (member instanceof CtMethod)
+      {
+         CtMethod method = CtMethod.class.cast(member);
+         return new MethodSignature(method);
+      }
+      if (member instanceof CtField)
+      {
+         CtField field = CtField.class.cast(member);
+         return new FieldSignature(field);
+      }
+      if (member instanceof CtConstructor)
+      {
+         CtConstructor constructor = CtConstructor.class.cast(member);
+         return new ConstructorSignature(constructor);
+      }
+      throw new IllegalArgumentException("Unknown member: " + member);
+   }
+
+   /**
     * Get a signature for a member info
     * 
     * @param member the member
@@ -139,6 +176,76 @@
       return paramTypes;
    }
 
+   public static String[] convertParameters(CtClass[] classes)
+   {
+      if (classes == null || classes.length == 0)
+         return NO_PARAMETERS;
+
+      String[] paramTypes = new String[classes.length];
+      for (int i = 0; i < classes.length; ++i)
+         paramTypes[i] = convertName(classes[i]);
+      return paramTypes;
+   }
+
+   /**
+    * Convert ct class to full classname.
+    *
+    * @param clazz the ct class
+    * @return class name
+    */
+   protected static String convertName(CtClass clazz)
+   {
+      if (clazz == null)
+         throw new IllegalArgumentException("Null CtClass");
+
+      CtClass temp = clazz;
+      if (temp.isArray())
+      {
+         StringBuilder buffer = new StringBuilder();
+         try
+         {
+            while (temp.isArray())
+            {
+               buffer.append('[');
+               temp = temp.getComponentType();
+            }
+            if (temp.isPrimitive())
+            {
+               CtPrimitiveType primitive = (CtPrimitiveType) temp;
+               buffer.append(Character.toString(primitive.getDescriptor()));
+            }
+            else
+            {
+               buffer.append('L');
+               buffer.append(temp.getName());
+               buffer.append(';');
+            }
+            return buffer.toString();
+         }
+         catch (NotFoundException e)
+         {
+            throw raiseClassNotFound(clazz.getName(), e);
+         }
+      }
+      return clazz.getName();
+   }
+
+   /**
+    * Raise NCDFE exception.
+    *
+    * @param name the classname
+    * @param e javassist exception
+    * @return NCDFE instance
+    * @throws NoClassDefFoundError transform e param into NCDFE
+    */
+   protected static NoClassDefFoundError raiseClassNotFound(String name, NotFoundException e) throws NoClassDefFoundError
+   {
+      NoClassDefFoundError ex = new NoClassDefFoundError("Unable to find class " + name);
+      if (e.getCause() != null)
+         ex.initCause(e.getCause()); // Hide the javassist error
+      throw ex;
+   }
+
    @SuppressWarnings("deprecation")
    public static Class<?>[] convertParameterTypes(TypeInfo[] typeInfos)
    {
@@ -150,7 +257,7 @@
          paramTypes[i] = typeInfos[i].getType();
       return paramTypes;
    }
-   
+
    /**
     * Convert classes to string
     * 
@@ -345,7 +452,7 @@
       for (int i = 0; i < this.parameters.length; ++i)
       {
          if (this.parameters[i] == null)
-            throw new IllegalArgumentException("Null parameter");
+            throw new IllegalArgumentException("Null parameter, index: " + i);
       }
    }
    




More information about the jboss-cvs-commits mailing list