diff options
author | Tom Tromey <tromey@redhat.com> | 2001-12-21 19:47:50 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2001-12-21 19:47:50 +0000 |
commit | 83d9978859a871cd0b3bd1d06ba01942afc88d5d (patch) | |
tree | dea4b140529432913a02af57d2d96cd0b4b0c3b1 /libjava/java/lang | |
parent | ef969525677f86bc8e7e188328939c5941f95b96 (diff) | |
download | gcc-83d9978859a871cd0b3bd1d06ba01942afc88d5d.zip gcc-83d9978859a871cd0b3bd1d06ba01942afc88d5d.tar.gz gcc-83d9978859a871cd0b3bd1d06ba01942afc88d5d.tar.bz2 |
re PR libgcj/2428 (Classloader is not set)
Fix for PR libgcj/2428:
* java/lang/natClass.cc: Include RuntimePermission.h.
(getClassLoader): Define.
* java/lang/Class.h (Class.getClassLoader): Only declare.
From-SVN: r48253
Diffstat (limited to 'libjava/java/lang')
-rw-r--r-- | libjava/java/lang/Class.h | 5 | ||||
-rw-r--r-- | libjava/java/lang/natClass.cc | 28 |
2 files changed, 29 insertions, 4 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h index 73d81da..0f36f25 100644 --- a/libjava/java/lang/Class.h +++ b/libjava/java/lang/Class.h @@ -134,10 +134,7 @@ public: static jclass forName (jstring className); JArray<jclass> *getClasses (void); - java::lang::ClassLoader *getClassLoader (void) - { - return loader; - } + java::lang::ClassLoader *getClassLoader (void); java::lang::reflect::Constructor *getConstructor (JArray<jclass> *); JArray<java::lang::reflect::Constructor *> *getConstructors (void); diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 6dfe14b..0e34f32 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -43,6 +43,7 @@ details. */ #include <java/lang/NoSuchMethodException.h> #include <java/lang/Thread.h> #include <java/lang/NullPointerException.h> +#include <java/lang/RuntimePermission.h> #include <java/lang/System.h> #include <java/lang/SecurityManager.h> #include <java/lang/StringBuffer.h> @@ -102,6 +103,29 @@ java::lang::Class::forName (jstring className) return forName (className, true, NULL); } +java::lang::ClassLoader * +java::lang::Class::getClassLoader (void) +{ +#if 0 + // FIXME: the checks we need to do are more complex. See the spec. + // Currently we can't implement them. + java::lang::SecurityManager *s = java::lang::System::getSecurityManager(); + if (s != NULL) + s->checkPermission (new RuntimePermission (JvNewStringLatin1 ("getClassLoader"))); +#endif + + // The spec requires us to return `null' for primitive classes. In + // other cases we have the option of returning `null' for classes + // loaded with the bootstrap loader. All gcj-compiled classes which + // are linked into the application used to return `null' here, but + // that confuses some poorly-written applications. It is a useful + // and apparently harmless compatibility hack to simply never return + // `null' instead. + if (isPrimitive ()) + return NULL; + return loader ? loader : ClassLoader::getSystemClassLoader (); +} + java::lang::reflect::Constructor * java::lang::Class::getConstructor (JArray<jclass> *param_types) { @@ -373,6 +397,8 @@ java::lang::Class::getName (void) JArray<jclass> * java::lang::Class::getClasses (void) { + // FIXME: security checking. + // Until we have inner classes, it always makes sense to return an // empty array. JArray<jclass> *result @@ -440,6 +466,8 @@ java::lang::Class::_getFields (JArray<java::lang::reflect::Field *> *result, JArray<java::lang::reflect::Field *> * java::lang::Class::getFields (void) { + // FIXME: security checking. + using namespace java::lang::reflect; int count = _getFields (NULL, 0); |