diff options
author | Elliott Hughes <enh@google.com> | 2013-08-01 17:29:14 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2013-08-01 17:29:14 -0700 |
commit | 227ee1e903322951ab7302a743f5cba8db75598c (patch) | |
tree | 7b8e35e5b0f1bd70d65e94d418f8da59ffa53fa9 /vm | |
parent | 58de514b160674a483bcb912d367072c7354cc1e (diff) | |
download | android_dalvik-227ee1e903322951ab7302a743f5cba8db75598c.tar.gz android_dalvik-227ee1e903322951ab7302a743f5cba8db75598c.tar.bz2 android_dalvik-227ee1e903322951ab7302a743f5cba8db75598c.zip |
Throw NoSuchMethodError if RegisterNatives fails.
Bug: 9963858
Change-Id: I5b3ce3d3dbdc949e69f3389e2df19bcca5648d7e
Diffstat (limited to 'vm')
-rw-r--r-- | vm/Jni.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/vm/Jni.cpp b/vm/Jni.cpp index aa2f3713e..d91eb9c5a 100644 --- a/vm/Jni.cpp +++ b/vm/Jni.cpp @@ -693,6 +693,11 @@ static void dumpCandidateMethods(ClassObject* clazz, const char* methodName, con dumpMethods(clazz->directMethods, clazz->directMethodCount, methodName); } +static void throwNoSuchMethodError(ClassObject* c, const char* name, const char* sig, const char* kind) { + std::string msg(StringPrintf("no %s method \"%s.%s%s\"", kind, c->descriptor, name, sig)); + dvmThrowNoSuchMethodError(msg.c_str()); +} + /* * Register a method that uses JNI calling conventions. */ @@ -718,11 +723,13 @@ static bool dvmRegisterJNIMethod(ClassObject* clazz, const char* methodName, } if (method == NULL) { dumpCandidateMethods(clazz, methodName, signature); + throwNoSuchMethodError(clazz, methodName, signature, "static or non-static"); return false; } if (!dvmIsNativeMethod(method)) { ALOGW("Unable to register: not native: %s.%s:%s", clazz->descriptor, methodName, signature); + throwNoSuchMethodError(clazz, methodName, signature, "native"); return false; } |