summaryrefslogtreecommitdiff
path: root/libjava/jni.cc
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-05 22:26:26 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-05 22:26:26 +0000
commitbe7d01ed62d74d9c4b7b53f96bb82c8f109f859e (patch)
tree2e7ab5655ae0f92acaf1825446f2fec39bb2a56e /libjava/jni.cc
parent9f587d943d2e682a674b64bb64f0086318dc8eb7 (diff)
downloadgcc-be7d01ed62d74d9c4b7b53f96bb82c8f109f859e.tar.gz
* jni.cc (_Jv_JNI_GetAnyFieldID): Throw ClassNotFoundException.
* java/lang/reflect/natMethod.cc (_Jv_GetTypesFromSignature): Rewrote to use _Jv_FindClassFromSignature. * verify.cc (resolve): throw NoClassDefFoundError. * link.cc (resolve_field): Throw NoClassDefFoundError. (find_field): Likewise. * prims.cc (_Jv_FindClassFromSignature): Removed recursion. Handle error cases. Added 'endp' argument. * include/jvm.h (_Jv_FindClassFromSignature): Updated prototype. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97660 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/jni.cc')
-rw-r--r--libjava/jni.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 5f9d5f79e71..b68c3bb887f 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -46,6 +46,7 @@ details. */
#include <java/nio/DirectByteBufferImpl$ReadWrite.h>
#include <java/util/IdentityHashMap.h>
#include <gnu/gcj/RawData.h>
+#include <java/lang/ClassNotFoundException.h>
#include <gcj/method.h>
#include <gcj/field.h>
@@ -1200,8 +1201,8 @@ _Jv_JNI_GetAnyFieldID (JNIEnv *env, jclass clazz,
for (int i = 0; i <= len; ++i)
s[i] = (sig[i] == '/') ? '.' : sig[i];
jclass field_class = _Jv_FindClassFromSignature ((char *) s, NULL);
-
- // FIXME: what if field_class == NULL?
+ if (! field_class)
+ throw new java::lang::ClassNotFoundException(JvNewStringUTF(s));
java::lang::ClassLoader *loader = clazz->getClassLoaderInternal ();
while (clazz != NULL)