[jboss-cvs] JBossAS SVN: r85903 - in projects/jboss-reflect/trunk/src: main/java/org/jboss/reflect/spi and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 16 07:36:43 EDT 2009


Author: stalep
Date: 2009-03-16 07:36:43 -0400 (Mon, 16 Mar 2009)
New Revision: 85903

Added:
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/JavassistUtilTestCase.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/Pojo.java
Modified:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/AbstractJavassistBody.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/DefaultJavassistBody.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertAfterJavassistBody.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertBeforeJavassistBody.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableClassInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableConstructorInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableFieldInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableMethodInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/NotFoundException.java
Log:
[JBREFLECT-49]
JavassistField/Method/Constructor/Type now all implements its mutable
interaces.
raw implementation of some of these interfaces are done. - no tests atm
so i cant ferify that i anything works yet :)

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -24,14 +24,20 @@
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
 
+import javassist.CannotCompileException;
 import javassist.CtClass;
 import javassist.CtConstructor;
 import javassist.NotFoundException;
 
 import org.jboss.reflect.plugins.AnnotationHelper;
+import org.jboss.reflect.spi.AbstractJavassistBody;
 import org.jboss.reflect.spi.AnnotationValue;
+import org.jboss.reflect.spi.Body;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.ConstructorInfo;
+import org.jboss.reflect.spi.ModifierInfo;
+import org.jboss.reflect.spi.MutableClassInfo;
+import org.jboss.reflect.spi.MutableConstructorInfo;
 import org.jboss.reflect.spi.ParameterInfo;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
@@ -42,7 +48,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class JavassistConstructorInfo extends JavassistAnnotatedParameterInfo implements ConstructorInfo
+public class JavassistConstructorInfo extends JavassistAnnotatedParameterInfo implements MutableConstructorInfo
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = -2255405601790592604L;
@@ -208,4 +214,83 @@
          throw new RuntimeException(e);
       }
    }
+   
+   protected CtConstructor getCtConstructor()
+   {
+      return ctConstructor;
+   }
+
+   public void setBody(Body body)
+   {
+      if (body instanceof AbstractJavassistBody == false)
+      {
+         throw new IllegalArgumentException("Body is not an instance of AbstractJavassistBody");
+      }
+      ((AbstractJavassistBody)body).createBody(ctConstructor);
+      typeInfo.clearConstructorCache();
+   }
+
+   public void setExceptions(String[] exceptions)
+   {
+      try
+      {
+         ctConstructor.setExceptionTypes(JavassistUtil.toCtClass(exceptions));
+      }
+      catch (NotFoundException e)
+      {
+         throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+      }
+      typeInfo.clearConstructorCache();
+   }
+
+   public void setExceptions(ClassInfo[] exceptions)
+   {
+      try
+      {
+         ctConstructor.setExceptionTypes(JavassistUtil.toCtClass(exceptions));
+      }
+      catch (NotFoundException e)
+      {
+         throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+      }
+      typeInfo.clearConstructorCache();
+   }
+
+   public void setModifier(ModifierInfo mi)
+   {
+      typeInfo.clearMethodCache();
+      ctConstructor.setModifiers(mi.getModifiers());
+   }
+
+   public void setParameters(String[] parameters)
+   {
+      for(String p : parameters)
+      {
+         try
+         {
+            ctConstructor.addParameter(JavassistUtil.toCtClass(p));
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
+      typeInfo.clearConstructorCache();
+   }
+
+   public void setParameters(ClassInfo[] parameters)
+   {
+      for(ClassInfo clazz : parameters)
+      {
+         try
+         {
+            ctConstructor.addParameter(JavassistUtil.toCtClass(clazz));
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
+      typeInfo.clearConstructorCache();
+   }
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -25,6 +25,8 @@
 import org.jboss.reflect.spi.AnnotationValue;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.FieldInfo;
+import org.jboss.reflect.spi.ModifierInfo;
+import org.jboss.reflect.spi.MutableFieldInfo;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
@@ -39,7 +41,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class JavassistFieldInfo extends JavassistAnnotatedInfo implements FieldInfo
+public class JavassistFieldInfo extends JavassistAnnotatedInfo implements MutableFieldInfo
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = -104555531831318930L;
@@ -167,4 +169,33 @@
    {
       return getAnnotations(ctField);
    }
+   
+   public CtField getCtField()
+   {
+      return ctField;
+   }
+
+   public void setModifier(ModifierInfo modifier)
+   {
+      ctField.setModifiers(modifier.getModifiers());
+      typeInfo.clearFieldCache();
+   }
+
+   public void setName(String name)
+   {
+      ctField.setName(name);
+      typeInfo.clearFieldCache();
+   }
+
+   public void setType(ClassInfo type)
+   {
+      ctField.setType(JavassistUtil.toCtClass(type));
+      typeInfo.clearFieldCache();
+   }
+   
+   public void setType(String type)
+   {
+      ctField.setType(JavassistUtil.toCtClass(type));
+      typeInfo.clearFieldCache();
+   }
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -24,20 +24,27 @@
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
 
+import javassist.CannotCompileException;
 import javassist.CtBehavior;
 import javassist.CtClass;
 import javassist.CtMethod;
 import javassist.NotFoundException;
 
 import org.jboss.reflect.plugins.AnnotationHelper;
+import org.jboss.reflect.spi.AbstractJavassistBody;
 import org.jboss.reflect.spi.AnnotationValue;
+import org.jboss.reflect.spi.Body;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.MethodInfo;
+import org.jboss.reflect.spi.ModifierInfo;
+import org.jboss.reflect.spi.MutableClassInfo;
+import org.jboss.reflect.spi.MutableMethodInfo;
+import org.jboss.reflect.spi.MutableMethodInfoCommand;
 import org.jboss.reflect.spi.ParameterInfo;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
-public class JavassistMethodInfo extends JavassistAnnotatedParameterInfo implements MethodInfo
+public class JavassistMethodInfo extends JavassistAnnotatedParameterInfo implements MutableMethodInfo
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 101183748227690112L;
@@ -237,4 +244,107 @@
          throw new RuntimeException(e);
       }
    }
+
+   public void executeCommand(MutableMethodInfoCommand mmc)
+   {
+      // TODO Auto-generated method stub
+      
+   }
+   
+   public CtMethod getCtMethod()
+   {
+      return ctMethod;
+   }
+
+   public void setBody(Body body)
+   {
+      typeInfo.clearMethodCache();
+      if (body instanceof AbstractJavassistBody == false)
+      {
+         throw new IllegalArgumentException("Body is not an instance of AbstractJavassistBody");
+      }
+      ((AbstractJavassistBody)body).createBody(ctMethod);
+   }
+
+   public void setExceptions(String[] exceptions)
+   {
+      typeInfo.clearMethodCache();
+      try
+      {
+         ctMethod.setExceptionTypes(JavassistUtil.toCtClass(exceptions));
+      }
+      catch (NotFoundException e)
+      {
+         throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+      }
+   }
+
+   public void setExceptions(ClassInfo[] exceptions)
+   {
+      try
+      {
+         ctMethod.setExceptionTypes(JavassistUtil.toCtClass(exceptions));
+      }
+      catch (NotFoundException e)
+      {
+         throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+      }
+      typeInfo.clearMethodCache();
+   }
+
+   public void setModifier(ModifierInfo mi)
+   {
+     ctMethod.setModifiers(mi.getModifiers());
+     typeInfo.clearMethodCache();
+   }
+
+   public void setName(String name)
+   {
+      ctMethod.setName(name);
+      typeInfo.clearMethodCache();
+   }
+
+   public void setParameters(String[] parameters)
+   {
+      for(String p : parameters)
+      {
+         try
+         {
+            ctMethod.addParameter(JavassistUtil.toCtClass(p));
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
+      typeInfo.clearMethodCache();
+   }
+
+   public void setParameters(ClassInfo[] parameters)
+   {
+      for(ClassInfo clazz : parameters)
+      {
+         try
+         {
+            ctMethod.addParameter(JavassistUtil.toCtClass(clazz));
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
+      typeInfo.clearMethodCache();
+   }
+
+   public void setReturnType(String returnType)
+   {
+      // TODO Auto-generated method stub
+      
+   }
+
+   public void setReturnType(ClassInfo returnType)
+   {
+      // TODO Auto-generated method stub
+      
+   }
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -27,10 +27,13 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javassist.CannotCompileException;
 import javassist.CtClass;
 import javassist.CtConstructor;
 import javassist.CtField;
 import javassist.CtMethod;
+import javassist.CtNewConstructor;
+import javassist.CtNewMethod;
 import javassist.NotFoundException;
 
 import org.jboss.reflect.plugins.PackageInfoImpl;
@@ -712,104 +715,216 @@
       return attachments.getAttachment(name);
    }
    
-   protected CtClass getCtClass()
+    CtClass getCtClass()
    {
       return ctClass;
    }
-
    
+   protected void clearMethodCache()
+   {
+      if(methodArray != null)
+         methodArray = null;
+   }
+   
+   protected void clearConstructorCache()
+   {
+      if(constructorArray != null)
+         constructorArray = null;
+   }
+   
+   protected void clearFieldCache()
+   {
+      if(fieldArray != null)
+         fieldArray = null;
+   }
+   
    public void addConstructor(MutableConstructorInfo mci)
    {
-      // TODO Auto-generated method stub
-      
+      if(mci instanceof JavassistConstructorInfo)
+      {
+         try
+         {
+            ctClass.addConstructor(((JavassistConstructorInfo) mci).getCtConstructor());
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
    }
 
    public void addField(MutableFieldInfo mfi)
    {
-      // TODO Auto-generated method stub
+      if(mfi instanceof JavassistFieldInfo)
+      {
+         try
+         {
+            ctClass.addField(((JavassistFieldInfo) mfi).getCtField());
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
       
    }
 
    public void addMethod(MutableMethodInfo mmi)
    {
-      // TODO Auto-generated method stub
-      
+      if(mmi instanceof JavassistMethodInfo)
+      {
+         try
+         {
+            ctClass.addMethod(((JavassistMethodInfo) mmi).getCtMethod());
+         }
+         catch (CannotCompileException e)
+         {
+            throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+         }
+      }
    }
 
    public MutableConstructorInfo createMutableConstructor(Body body)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtConstructor constructor = CtNewConstructor.make(body.getBody(), ctClass);
+         return new JavassistConstructorInfo(factory, this, constructor);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
    public MutableConstructorInfo createMutableConstructor(ModifierInfo modifier, String[] parameters,
          String[] exceptions)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtConstructor constructor = CtNewConstructor.make(JavassistUtil.toCtClass(parameters), 
+               JavassistUtil.toCtClass(exceptions), ctClass);
+         constructor.setModifiers(modifier.getModifiers());
+         return new JavassistConstructorInfo(factory, this, constructor);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
    public MutableConstructorInfo createMutableConstructor(ModifierInfo modifier, ClassInfo[] parameters,
          ClassInfo[] exceptions)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtConstructor constructor = CtNewConstructor.make(JavassistUtil.toCtClass(parameters), 
+               JavassistUtil.toCtClass(exceptions), ctClass);
+         constructor.setModifiers(modifier.getModifiers());
+         return new JavassistConstructorInfo(factory, this, constructor);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
    public MutableConstructorInfo createMutableConstructor(ModifierInfo modifier, Body body, String[] parameters,
          String[] exceptions)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtConstructor constructor = CtNewConstructor.make(JavassistUtil.toCtClass(parameters), 
+               JavassistUtil.toCtClass(exceptions), body.getBody(), ctClass);
+         constructor.setModifiers(modifier.getModifiers());
+         return new JavassistConstructorInfo(factory, this, constructor);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
    public MutableConstructorInfo createMutableConstructor(ModifierInfo modifier, Body body, ClassInfo[] parameters,
          ClassInfo[] exceptions)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtConstructor constructor = CtNewConstructor.make(JavassistUtil.toCtClass(parameters), 
+               JavassistUtil.toCtClass(exceptions), body.getBody(), ctClass);
+         constructor.setModifiers(modifier.getModifiers());
+         return new JavassistConstructorInfo(factory, this, constructor);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
-   public MutableFieldInfo createMutableField(ModifierInfo modifier, String type)
+   public MutableFieldInfo createMutableField(ModifierInfo modifier, String type, String fieldName)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtField field = new CtField(JavassistUtil.toCtClass(type), fieldName, ctClass);
+         field.setModifiers(modifier.getModifiers());
+         return new JavassistFieldInfo(factory, this, field);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
-   public MutableFieldInfo createMutableField(ModifierInfo modifier, ClassInfo type)
+   public MutableFieldInfo createMutableField(ModifierInfo modifier, ClassInfo type, String fieldName)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtField field = new CtField(JavassistUtil.toCtClass(type), fieldName, ctClass);
+         field.setModifiers(modifier.getModifiers());
+         return new JavassistFieldInfo(factory, this, field);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
    public MutableMethodInfo createMutableMethod(Body body)
    {
-      // TODO Auto-generated method stub
-      return null;
+      try
+      {
+         CtMethod method = CtNewMethod.make(body.getBody(), ctClass);
+         return new JavassistMethodInfo(factory, this, 
+               new SignatureKey(method.getName(), new String[0]), method);
+      }
+      catch (CannotCompileException e)
+      {
+         throw new org.jboss.reflect.spi.CannotCompileException(e.toString());
+      }
    }
 
-   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String name, String[] parameters,
+   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String methodName, String[] parameters,
          String[] exceptions)
    {
       // TODO Auto-generated method stub
       return null;
    }
 
-   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String name, ClassInfo[] parameters,
+   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String methodName, ClassInfo[] parameters,
          ClassInfo[] exceptions)
    {
       // TODO Auto-generated method stub
       return null;
    }
 
-   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String name, Body body, String[] parameters,
+   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String methodName, Body body, String[] parameters,
          String[] exceptions)
    {
       // TODO Auto-generated method stub
       return null;
    }
 
-   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String name, Body body, ClassInfo[] parameters,
+   public MutableMethodInfo createMutableMethod(ModifierInfo modifier, String methodName, Body body, ClassInfo[] parameters,
          ClassInfo[] exceptions)
    {
       // TODO Auto-generated method stub

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -1,30 +1,33 @@
 /*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
 package org.jboss.reflect.plugins.javassist;
 
 import java.lang.reflect.Array;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.MutableClassInfo;
+
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.CtPrimitiveType;
@@ -38,100 +41,52 @@
  */
 public class JavassistUtil
 {
+   //TODO: need to change the classpool/loader fetching
    static ClassPool pool = ClassPool.getDefault();
    static ClassLoader loader = JavassistUtil.class.getClassLoader();
 
-   final static Map<String, Class<?>> primitives;
-   static
-   {
-      primitives = new HashMap<String, Class<?>>();
-      primitives.put(CtClass.booleanType.getName(), Boolean.TYPE);
-      primitives.put(CtClass.byteType.getName(), Byte.TYPE);
-      primitives.put(CtClass.charType.getName(), Character.TYPE);
-      primitives.put(CtClass.doubleType.getName(), Double.TYPE);
-      primitives.put(CtClass.floatType.getName(), Float.TYPE);
-      primitives.put(CtClass.intType.getName(), Integer.TYPE);
-      primitives.put(CtClass.longType.getName(), Long.TYPE);
-      primitives.put(CtClass.shortType.getName(), Short.TYPE);
-      primitives.put(CtClass.voidType.getName(), Void.TYPE);
-
-   }
-   
-   public static void main(String[] args) throws Exception
-   {
-      System.out.println(new String[0][].getClass().getName());
-      System.out.println(new JavassistUtil[0].getClass().getName());
-      System.out.println(new byte[0][].getClass().getName());
-      Class.forName(new String[0][].getClass().getName());
-
-      loadAndDisplayClass("int");
-      loadAndDisplayClass("byte[][][]");
-      loadAndDisplayClass("java.lang.String[][]");
-      loadAndDisplayClass("java.lang.String[][][]");
-      loadAndDisplayClass("org.jboss.reflect.plugins.javassist.JavassistUtil[]");
-   }
-   
-   private static void loadAndDisplayClass(String name) throws Exception
-   {
-      Class<?> clazz = loadClass(name);
-      System.out.println(name + " -> " + clazz.getName() + " : " + clazz);
-   }
-   
-   private static Class<?> loadClass(String name) throws Exception
-   {
-      if (primitives.containsKey(name))
-      {
-         return primitives.get(name);
-      }
-      
-      return ctClassToClass(pool.get(name));
-   }
-
    public static Class<?> ctClassToClass(CtClass ct)
    {
       try
       {
-      if (ct.isArray())
-      {
-         int dim = 0;
-        
+         if (ct.isArray())
+         {
+            int dim = 0;
+
             while (ct.getComponentType() != null)
             {
                dim++;
                ct = ct.getComponentType();
             }
-        
-         if (ct.isPrimitive())
-         {
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0 ; i < dim ; i++)
+
+            if (ct.isPrimitive())
             {
-               sb.append("[");
+               StringBuilder sb = new StringBuilder();
+               for (int i = 0 ; i < dim ; i++)
+               {
+                  sb.append("[");
+               }
+
+               sb.append(((CtPrimitiveType)ct).getDescriptor());
+               try
+               {
+                  return loader.loadClass(sb.toString());
+               }
+               catch(ClassNotFoundException cnfe)
+               {
+                  return Class.forName(sb.toString(), false, loader);
+               }
             }
-   
-            sb.append(((CtPrimitiveType)ct).getDescriptor());
-            try
+            else
             {
-            return loader.loadClass(sb.toString());
+               return Array.newInstance(ctClassToClass(ct), new int[dim]).getClass();
             }
-            catch(ClassNotFoundException cnfe)
-            {
-               return Class.forName(sb.toString(), false, loader);
-            }
          }
          else
          {
-            return Array.newInstance(ctClassToClass(ct), new int[dim]).getClass();
+            return loader.loadClass(ct.getName());
          }
       }
-      else
-      {
-         
-            return loader.loadClass(ct.getName());
-         
-         
-      }
-      }
       catch (NotFoundException e)
       {
          e.printStackTrace();
@@ -143,5 +98,57 @@
          return null;
       }
    }
+   
+   public static CtClass toCtClass(String name)
+   {
+      try
+      {
+         return pool.get(name);
+      }
+      catch (NotFoundException e)
+      {
+        throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+      }
+   }
+   
+   public static CtClass[] toCtClass(String[] names)
+   {
+      CtClass[] classes = new CtClass[names.length];
+      for(int i=0; i < names.length; i++)
+      {
+         classes[i] = toCtClass(names[i]);
+      }
+      return classes;
+   }
+   
 
+   public static CtClass toCtClass(ClassInfo clazz)
+   {
+      if(clazz instanceof JavassistTypeInfo)
+         return ((JavassistTypeInfo) clazz).getCtClass();
+      else
+      {
+         try
+         {
+            return pool.get(clazz.getName());
+         }
+         catch (NotFoundException e)
+         {
+            throw new org.jboss.reflect.spi.NotFoundException(e.toString());
+         }
+      }
+   }
+   
+   public static CtClass[] toCtClass(ClassInfo[] classes)
+   {
+      CtClass[] clazzes = new CtClass[classes.length];
+      for(int i=0; i < classes.length; i++)
+      {
+         clazzes[i] = toCtClass(classes[i]);
+      }
+      return clazzes;
+   }
+   
+   
+
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/AbstractJavassistBody.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/AbstractJavassistBody.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/AbstractJavassistBody.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -42,6 +42,6 @@
       return body;
    }
    
-   abstract void createBody(CtBehavior behaviour);
+   public abstract void createBody(CtBehavior behaviour);
    
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/DefaultJavassistBody.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/DefaultJavassistBody.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/DefaultJavassistBody.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -38,7 +38,7 @@
    }
 
    @Override
-   void createBody(CtBehavior behavior)
+   public void createBody(CtBehavior behavior)
    {
       try
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertAfterJavassistBody.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertAfterJavassistBody.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertAfterJavassistBody.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -39,7 +39,7 @@
    }
    
    @Override
-   void createBody(CtBehavior behavior)
+   public void createBody(CtBehavior behavior)
    {
       try
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertBeforeJavassistBody.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertBeforeJavassistBody.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/InsertBeforeJavassistBody.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -38,7 +38,7 @@
       super(body);
    }
    @Override
-   void createBody(CtBehavior behavior)
+   public void createBody(CtBehavior behavior)
    {
       try
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableClassInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableClassInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableClassInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -157,18 +157,20 @@
     * 
     * @param modifier
     * @param type
+    * @param name
     * @return
     */
-   MutableFieldInfo createMutableField(ModifierInfo modifier, String type);
+   MutableFieldInfo createMutableField(ModifierInfo modifier, String type, String name);
    
    /**
     * Create a field connected to this class with the params given.
     * 
     * @param modifier
     * @param type
+    * @param name
     * @return
     */
-   MutableFieldInfo createMutableField(ModifierInfo modifier, ClassInfo type);
+   MutableFieldInfo createMutableField(ModifierInfo modifier, ClassInfo type, String name);
    
    /**
     * Add a method

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableConstructorInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableConstructorInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableConstructorInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -56,7 +56,7 @@
     * 
     * @param parameters
     */
-   void setParameters(MutableClassInfo[] parameters);
+   void setParameters(ClassInfo[] parameters);
    
    /**
     * A list of the exception types
@@ -70,6 +70,6 @@
     * 
     * @param exceptions
     */
-   void setExceptions(MutableClassInfo[] exceptions);
+   void setExceptions(ClassInfo[] exceptions);
  
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableFieldInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableFieldInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableFieldInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -34,7 +34,7 @@
     * Name of the field
     * 
     */
-   void setName();
+   void setName(String name);
    
    /**
     * Field type
@@ -44,6 +44,13 @@
    void setType(ClassInfo type);
    
    /**
+    * Field type
+    * 
+    * @param type
+    */
+   void setType(String type);
+   
+   /**
     * Field modifier
     * 
     * @param modifier

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableMethodInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableMethodInfo.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/MutableMethodInfo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -50,7 +50,7 @@
     * 
     * @param returnType
     */
-   void setReturnType(MutableClassInfo returnType);
+   void setReturnType(ClassInfo returnType);
    
    /**
     * Method name
@@ -78,7 +78,7 @@
     * 
     * @param parameters
     */
-   void setParameters(MutableClassInfo[] parameters);
+   void setParameters(ClassInfo[] parameters);
    
    /**
     * A list of the exception types
@@ -92,7 +92,7 @@
     * 
     * @param exceptions
     */
-   void setExceptions(MutableClassInfo[] exceptions);
+   void setExceptions(ClassInfo[] exceptions);
   
    /**
     * TODO: something similar to CtBehavior.instrument(...)

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/NotFoundException.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/NotFoundException.java	2009-03-16 11:36:23 UTC (rev 85902)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/NotFoundException.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -27,9 +27,19 @@
  * @author <a href="stale.pedersen at jboss.org">Stale W. Pedersen</a>
  * @version $Revision: 1.1 $
  */
-public class NotFoundException extends Exception
+public class NotFoundException extends RuntimeException
 {
 
+   /**
+    * Create a new NotFoundException.
+    * 
+    * @param string
+    */
+   public NotFoundException(String exception)
+   {
+     super(exception);
+   }
+
    /** The serialVersionUID */
    private static final long serialVersionUID = -4143477618552256445L;
 

Copied: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/JavassistUtilTestCase.java (from rev 85902, projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java)
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/JavassistUtilTestCase.java	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/JavassistUtilTestCase.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -0,0 +1,136 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.test.plugins.javassist;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtConstructor;
+import javassist.CtField;
+import javassist.CtMethod;
+import javassist.Modifier;
+import javassist.NotFoundException;
+
+import org.jboss.reflect.plugins.javassist.JavassistUtil;
+import org.jboss.reflect.spi.ModifierInfo;
+import org.jboss.test.ContainerTest;
+
+/**
+ * A JavassistUtilTestCase.
+ * 
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ * @version $Revision: 1.1 $
+ */
+public class JavassistUtilTestCase extends ContainerTest
+{
+   
+   final static Map<String, Class<?>> primitives;
+   static
+   {
+      primitives = new HashMap<String, Class<?>>();
+      primitives.put(CtClass.booleanType.getName(), Boolean.TYPE);
+      primitives.put(CtClass.byteType.getName(), Byte.TYPE);
+      primitives.put(CtClass.charType.getName(), Character.TYPE);
+      primitives.put(CtClass.doubleType.getName(), Double.TYPE);
+      primitives.put(CtClass.floatType.getName(), Float.TYPE);
+      primitives.put(CtClass.intType.getName(), Integer.TYPE);
+      primitives.put(CtClass.longType.getName(), Long.TYPE);
+      primitives.put(CtClass.shortType.getName(), Short.TYPE);
+      primitives.put(CtClass.voidType.getName(), Void.TYPE);
+   }
+   /**
+    * Create a new JavassistUtilTestCase.
+    * 
+    * @param name
+    */
+   public JavassistUtilTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testCtClassToClass()
+   {
+      Class<?> clazz = loadClass("int");
+      assertEquals("int", clazz.getName());
+      clazz = loadClass("byte[][][]");
+      assertEquals("[[[B", clazz.getName());
+      clazz = loadClass("java.lang.String[][]");
+      assertEquals("[[Ljava.lang.String;", clazz.getName());
+      clazz = loadClass("java.lang.String[][][]");
+      assertEquals("[[[Ljava.lang.String;", clazz.getName());
+   }
+   
+   public void testModifier()
+   {
+      assertEquals(ModifierInfo.PUBLIC, Modifier.PUBLIC);
+      assertEquals(ModifierInfo.PRIVATE, Modifier.PRIVATE);
+      assertEquals(ModifierInfo.PROTECTED, Modifier.PROTECTED);
+      assertEquals(ModifierInfo.STATIC, Modifier.STATIC);
+   }
+   
+   public void testSignature()
+   {
+      try
+      {
+         CtClass pojo = ClassPool.getDefault().get("org.jboss.test.plugins.javassist.Pojo");
+         
+         CtMethod[] methods = pojo.getDeclaredMethods();
+         for(CtMethod m : methods)
+         {
+            System.out.println("Method "+m.getName()+", description: "+m.getSignature()+", get longname: "+m.getLongName());
+         }
+         CtField[] fields = pojo.getDeclaredFields();
+         for(CtField f : fields)
+            System.out.println("Field "+f.getName()+", description: "+f.getSignature());
+         
+         CtConstructor[] constructors = pojo.getConstructors();
+         for(CtConstructor c : constructors)
+            System.out.println("Constructor "+c.getName()+", description: "+c.getSignature()+", longname: "+c.getLongName());
+      }
+      catch (NotFoundException e)
+      {
+         // TODO Auto-generated catch block
+         e.printStackTrace();
+      }
+   }
+   
+   private Class<?> loadClass(String name)
+   {
+      if (primitives.containsKey(name))
+      {
+         return primitives.get(name);
+      }
+      
+      try
+      {
+         return JavassistUtil.ctClassToClass(ClassPool.getDefault().get(name));
+      }
+      catch (NotFoundException e)
+      {
+         return null;
+      }
+   }
+
+}

Copied: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/Pojo.java (from rev 85902, projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/spi/AbstractJavassistBody.java)
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/Pojo.java	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/Pojo.java	2009-03-16 11:36:43 UTC (rev 85903)
@@ -0,0 +1,56 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.test.plugins.javassist;
+
+/**
+ * A Pojo.
+ * 
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ * @version $Revision: 1.1 $
+ */
+public class Pojo
+{
+   
+   public String foo;
+   
+   public Pojo()
+   { 
+   }
+   
+   public Pojo(String s)
+   {
+   }
+   
+   public String foo()
+   {
+      return null;
+   }
+   
+   public void foo(String s)
+   {
+   }
+   
+   public void bar(String s)
+   {
+   }
+
+}




More information about the jboss-cvs-commits mailing list