[jboss-cvs] JBossAS SVN: r85901 - projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist.

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


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

Added:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java
Log:
[JBREFLECT-49]
updated getType() method. ClassLoader.loadClass(..) do not work for
arrays in jdk6, need to use Class.forName(...).
some test still fails. getting them nailed out soon.

Added: 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	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistUtil.java	2009-03-16 11:36:12 UTC (rev 85901)
@@ -0,0 +1,126 @@
+/*
+  * 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 javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtPrimitiveType;
+
+/**
+ * A JavassistUtil.
+ * 
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ * @version $Revision: 1.1 $
+ */
+public class JavassistUtil
+{
+   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("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) throws Exception
+   {
+      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++)
+            {
+               sb.append("[");
+            }
+   
+            sb.append(((CtPrimitiveType)ct).getDescriptor());
+            try
+            {
+            return loader.loadClass(sb.toString());
+            }
+            catch(ClassNotFoundException cnfe)
+            {
+               return Class.forName(sb.toString(), false, loader);
+            }
+         }
+         else
+         {
+            return Array.newInstance(ctClassToClass(ct), dim).getClass();
+         }
+      }
+      else
+      {
+         return loader.loadClass(ct.getName());
+      }
+   }
+
+}




More information about the jboss-cvs-commits mailing list