summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-11 16:23:00 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-11 16:23:00 +0000
commite609c24181bef57a03d0a1a0c4452016b95942e3 (patch)
tree03872f08048832a2727cb841b18b42692486f3e1 /libjava
parent0a1cbfaaba80a4a8f35c761ca9383359fd88df06 (diff)
downloadgcc-e609c24181bef57a03d0a1a0c4452016b95942e3.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112858 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/gnu/gcj/runtime/SystemClassLoader.java23
-rw-r--r--libjava/java/lang/VMCompiler.java5
3 files changed, 28 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index e65b16cc466..55ce659a606 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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
diff --git a/libjava/gnu/gcj/runtime/SystemClassLoader.java b/libjava/gnu/gcj/runtime/SystemClassLoader.java
index efd33230fbe..d01221167a7 100644
--- a/libjava/gnu/gcj/runtime/SystemClassLoader.java
+++ b/libjava/gnu/gcj/runtime/SystemClassLoader.java
@@ -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
diff --git a/libjava/java/lang/VMCompiler.java b/libjava/java/lang/VMCompiler.java
index e6405f0bece..789445e4f56 100644
--- a/libjava/java/lang/VMCompiler.java
+++ b/libjava/java/lang/VMCompiler.java
@@ -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