ClassLoader.java (loadedClasses): New field.
authorTom Tromey <tromey@redhat.com>
Wed, 11 Dec 2002 19:18:59 +0000 (19:18 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 11 Dec 2002 19:18:59 +0000 (19:18 +0000)
* java/lang/ClassLoader.java (loadedClasses): New field.
(defineClass): Fixed indentation.  Put new class in
loadedClasses.
(findLoadedClass): Implement here.
* java/lang/natClassLoader.cc (findLoadedClass): Removed.

From-SVN: r60043

libjava/ChangeLog
libjava/java/lang/ClassLoader.java
libjava/java/lang/natClassLoader.cc

index e9fe22c..af421ed 100644 (file)
@@ -1,3 +1,11 @@
+2002-12-11  Tom Tromey  <tromey@redhat.com>
+
+       * java/lang/ClassLoader.java (loadedClasses): New field.
+       (defineClass): Fixed indentation.  Put new class in
+       loadedClasses.
+       (findLoadedClass): Implement here.
+       * java/lang/natClassLoader.cc (findLoadedClass): Removed.
+
 2002-12-10  Tom Tromey  <tromey@redhat.com>
 
        * Makefile.in: Rebuilt.
index ea6546c..00cf011 100644 (file)
@@ -87,6 +87,14 @@ import java.util.*;
 public abstract class ClassLoader
 {
   /**
+   * All classes loaded by this classloader. VM's may choose to implement
+   * this cache natively; but it is here available for use if necessary. It
+   * is not private in order to allow native code (and trusted subclasses)
+   * access to this field.
+   */
+  final Map loadedClasses = new HashMap();
+
+  /**
    * The desired assertion status of classes loaded by this loader, if not
    * overridden by package or class instructions.
    */
@@ -446,31 +454,32 @@ public abstract class ClassLoader
       throw new java.lang.LinkageError ("class " 
                                        + name 
                                        + " already loaded");
-    
+
     if (protectionDomain == null)
       protectionDomain = defaultProtectionDomain;
 
-    try {
-      // Since we're calling into native code here, 
-      // we better make sure that any generated
-      // exception is to spec!
-
-      return defineClass0 (name, data, off, len, protectionDomain);
-
-    } catch (LinkageError x) {
-      throw x;         // rethrow
-
-    } catch (java.lang.VirtualMachineError x) {
-      throw x;         // rethrow
-
-    } catch (java.lang.Throwable x) {
-      // This should never happen, or we are beyond spec.  
-      
-      throw new InternalError ("Unexpected exception "
-                              + "while defining class "
-                              + name + ": " 
-                              + x.toString ());
-    }
+    try
+      {
+       Class retval = defineClass0 (name, data, off, len, protectionDomain);
+       loadedClasses.put(retval.getName(), retval);
+       return retval;
+      }
+    catch (LinkageError x)
+      {
+       throw x;                // rethrow
+      }
+    catch (java.lang.VirtualMachineError x)
+      {
+       throw x;                // rethrow
+      }
+    catch (java.lang.Throwable x)
+      {
+       // This should never happen, or we are beyond spec.  
+       throw new InternalError ("Unexpected exception "
+                                + "while defining class "
+                                + name + ": " 
+                                + x.toString ());
+      }
   }
 
   /** This is the entry point of defineClass into the native code */
@@ -722,8 +731,10 @@ public abstract class ClassLoader
    * @param     name  class to find.
    * @return    the class loaded, or null.
    */ 
-  protected final native Class findLoadedClass(String name);
-
+  protected final Class findLoadedClass(String name)
+  {
+    return (Class) loadedClasses.get(name);
+  }
 
   /**
    * Get a resource using the system classloader.
index db5ac94..aeee08a 100644 (file)
@@ -189,12 +189,6 @@ java::lang::VMClassLoader::getPrimitiveClass (jchar type)
   return _Jv_FindClassFromSignature (sig, NULL);
 }
 
-jclass
-java::lang::ClassLoader::findLoadedClass (jstring name)
-{
-  return _Jv_FindClassInCache (_Jv_makeUtf8Const (name), this);
-}
-
 /** This function does class-preparation for compiled classes.  
     NOTE: It contains replicated functionality from
     _Jv_ResolvePoolEntry, and this is intentional, since that function