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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jun 7 08:25:51 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-06-07 08:25:51 -0400 (Mon, 07 Jun 2010)
New Revision: 105757

Modified:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/ClassLoaderFinder.java
Log:
[JBREFLECT-125] Handle primitives when looking up classloader

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java	2010-06-07 05:57:29 UTC (rev 105756)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java	2010-06-07 12:25:51 UTC (rev 105757)
@@ -49,6 +49,7 @@
 import org.jboss.reflect.plugins.EnumConstantInfoImpl;
 import org.jboss.reflect.plugins.GenericsUtil;
 import org.jboss.reflect.plugins.TypeVariableAware;
+import org.jboss.reflect.plugins.bytecode.bytes.BytecodePrimitive;
 import org.jboss.reflect.plugins.bytecode.bytes.ClassBytes;
 import org.jboss.reflect.plugins.bytecode.bytes.ClassBytesFactory;
 import org.jboss.reflect.plugins.bytecode.bytes.FieldBytes;
@@ -103,7 +104,7 @@
    {
       if (finder == null)
       {
-         this.finder = ClassLoaderFinder.Default.INSTANCE;
+         this.finder = ClassLoaderFinder.LoadClass.INSTANCE;
          return;
       }
       this.finder = finder;
@@ -121,6 +122,11 @@
       
       if (start > 0 || end < name.length() - 1)
          name = name.substring(0, end + 1);
+      
+      BytecodePrimitive primitive = BytecodePrimitive.valueOf(name);
+      if (primitive != null)
+         return SecurityActions.getSystemClassLoader();
+      
       return finder.getLoaderForClass(initiating, name);
    }
 

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/ClassLoaderFinder.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/ClassLoaderFinder.java	2010-06-07 05:57:29 UTC (rev 105756)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/ClassLoaderFinder.java	2010-06-07 12:25:51 UTC (rev 105757)
@@ -41,9 +41,8 @@
    /**
     * Singleton default implementation of ClassLoaderFinder suitable for use
     * in simple/flat classloading environments
-    * 
     */
-   class Default implements ClassLoaderFinder
+   public class Default implements ClassLoaderFinder
    {
       public static Default INSTANCE = new Default();
       
@@ -56,4 +55,37 @@
          return initiating;
       }
    }
+   
+   /**
+    * Singleton default implementation of ClassLoaderFinder suitable for use
+    * in complex classloading environments. It loads the class
+    */
+   public class LoadClass implements ClassLoaderFinder
+   {
+      public static LoadClass INSTANCE = new LoadClass();
+      
+      private LoadClass()
+      {
+         
+      }
+      
+      public ClassLoader getLoaderForClass(ClassLoader initiating, String name)
+      {
+         try
+         {
+            Class<?> clazz = SecurityActions.loadClass(initiating, name);;
+            ClassLoader loader = SecurityActions.getClassLoader(clazz);
+            if (loader == null)
+               loader = SecurityActions.getSystemClassLoader();;
+            return loader;
+         }
+         catch (ClassNotFoundException e)
+         {
+            if (name.endsWith(".package-info"))
+               return null;
+            // AutoGenerated
+            throw new RuntimeException(e);
+         }
+      }
+   }
 }



More information about the jboss-cvs-commits mailing list