diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-04-11 16:23:00 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-04-11 16:23:00 +0000 |
commit | e609c24181bef57a03d0a1a0c4452016b95942e3 (patch) | |
tree | 03872f08048832a2727cb841b18b42692486f3e1 /libjava | |
parent | 0a1cbfaaba80a4a8f35c761ca9383359fd88df06 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/gnu/gcj/runtime/SystemClassLoader.java | 23 | ||||
-rw-r--r-- | libjava/java/lang/VMCompiler.java | 5 |
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 |