SystemClassLoader.java (addClass): Get the value of package-private field "loadedClas...
authorBryce McKinlay <mckinlay@redhat.com>
Tue, 11 Apr 2006 16:23:00 +0000 (16:23 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Tue, 11 Apr 2006 16:23:00 +0000 (17:23 +0100)
* gnu/gcj/runtime/SystemClassLoader.java (addClass): Get the value
of package-private field "loadedClasses" using reflection.
* java/lang/VMCompiler.java (compileClass): Remove unreachable catch
block.

From-SVN: r112858

libjava/ChangeLog
libjava/gnu/gcj/runtime/SystemClassLoader.java
libjava/java/lang/VMCompiler.java

index e65b16cc466474964567776774b229747fa2bbe2..55ce659a606df94422c7d407467fedfd85f83f81 100644 (file)
@@ -1,3 +1,10 @@
+2006-04-11  Bryce McKinlay  <mckinlay@redhat.com>
+
+       * gnu/gcj/runtime/SystemClassLoader.java (addClass): Get the value
+       of package-private field "loadedClasses" using reflection.
+       * java/lang/VMCompiler.java (compileClass): Remove unreachable catch
+       block.
+
 2006-04-10  Matthias Klose  <doko@debian.org>
 
        * testsuite/lib/libjava.exp (libjava_init): Recognize multilib
index efd33230fbe8b0acfa806c7cc3bba73ce91a8825..d01221167a76d14fae5ca7ff7753de4b407dbebd 100644 (file)
@@ -9,8 +9,9 @@ details.  */
 package gnu.gcj.runtime;
 
 import java.io.*;
+import java.lang.reflect.Field;
 import java.util.StringTokenizer;
-import java.util.HashSet;
+import java.util.HashMap;
 import java.net.URL;
 import java.net.URLClassLoader;
 
@@ -21,6 +22,8 @@ public final class SystemClassLoader extends URLClassLoader
     super(new URL[0], parent);
   }
 
+  private HashMap loadedClasses;
+
   // This is called to register a native class which was linked into
   // the application but which is registered with the system class
   // loader after the VM is initialized.
@@ -37,7 +40,23 @@ public final class SystemClassLoader extends URLClassLoader
        // precompiled manifest.
        definePackage(packageName, null, null, null, null, null, null, null);
       }
-    loadedClasses.put(className, klass);
+      
+    // Use reflection to access the package-private "loadedClasses" field.
+    if (this.loadedClasses == null)
+      {
+       try
+       {
+         Class cl = java.lang.ClassLoader.class;
+         Field lcField = cl.getDeclaredField("loadedClasses");
+         lcField.setAccessible(true);
+         this.loadedClasses = (HashMap) lcField.get(this);
+       }
+       catch (Exception x)
+       {
+         throw new RuntimeException(x);
+       }      
+      }
+    this.loadedClasses.put(className, klass);
   }
 
   // We add the URLs to the system class loader late.  The reason for
index e6405f0becece00e0d91cc51e5d0c1da7f0e95f3..789445e4f56e26a196366332a34caa3cc6959042 100644 (file)
@@ -198,11 +198,6 @@ final class VMCompiler
        md.update(data);
        digest = md.digest();
       }
-    catch (CloneNotSupportedException _)
-      {
-       // Can't happen.
-       return null;
-      }
     catch (NullPointerException _)
       {
        // If md5Digest==null -- but really this should never happen