diff options
author | Mark Wielaard <mark@klomp.org> | 2005-04-30 13:53:29 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2005-04-30 13:53:29 +0000 |
commit | a312ac7880d32afe5c8465162677c5fcc968983f (patch) | |
tree | 9238dd730eced06c95740eb5cd3c783cdb34a4c0 /vm | |
parent | 14c4666c9827b5570ad498b40dc38e1506f301dc (diff) | |
download | classpath-a312ac7880d32afe5c8465162677c5fcc968983f.tar.gz |
* java/io/ObjectInputStream.java
(currentLoader): Don't create SecurityManager, directly call
VMObjectInputStream.currentClassLoader().
(resolveProxyClass): Use currentLoader().
* vm/reference/java/io/VMObjectInputStream.java
(currentClassLoader(SecurityManager)): Removed.
(currentClassLoader): New method.
* native/jni/java-io/java_io_VMObjectInputStream.c
(Java_java_io_VMObjectInputStream_currentClassLoader): Removed.
* include/java_io_VMObjectInputStream.h: Regenerated.
* NEWS: Document new interface and reference implementation.
Diffstat (limited to 'vm')
-rw-r--r-- | vm/reference/java/io/VMObjectInputStream.java | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/vm/reference/java/io/VMObjectInputStream.java b/vm/reference/java/io/VMObjectInputStream.java index a2955fed3..5c0a400ef 100644 --- a/vm/reference/java/io/VMObjectInputStream.java +++ b/vm/reference/java/io/VMObjectInputStream.java @@ -39,27 +39,48 @@ exception statement from your version. */ package java.io; -import gnu.classpath.Configuration; -import gnu.java.io.ObjectIdentityWrapper; - -import java.lang.reflect.Array; +import gnu.classpath.VMStackWalker; import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.lang.reflect.Proxy; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.Vector; final class VMObjectInputStream { - static native ClassLoader currentClassLoader(SecurityManager sm); + private static Class oisClass = ObjectInputStream.class; + private static Class vmoisClass = VMObjectInputStream.class; + + // PrivilegedAction needed for Class.getClassLoader() + private static PrivilegedAction loaderAction = new PrivilegedAction() + { + public Object run() + { + Class[] ctx = VMStackWalker.getClassContext(); + for (int i = 0; i < ctx.length; i++) + { + ClassLoader cl = ctx[i].getClassLoader(); + if (cl != null) + return cl; + } + return null; + } + }; - static native Object allocateObject(Class clazz, Class constr_clazz, Constructor constructor) + /** + * Returns the first user defined class loader on the call stack, or + * null when no non-null class loader was found. + */ + static ClassLoader currentClassLoader() + { + return (ClassLoader) AccessController.doPrivileged(loaderAction); + } + + /** + * Allocates a new Object of type clazz but without running the + * default constructor on it. It then calls the given constructor on + * it. The given constructor method comes from the constr_clazz + * which is a super class of the given clazz. + */ + static native Object allocateObject(Class clazz, Class constr_clazz, + Constructor constructor) throws InstantiationException; } - |