[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