summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2013-08-02 08:52:03 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-08-02 08:52:03 -0700
commitcff569c2e9d9c323edc6d974ebe69fded6d18c0c (patch)
tree388dd283ebcd962a3bafb49dfe05ce7eb95263db
parent08a07e67e68cfebea732a4f2bc8237cee993ee8a (diff)
parentf65d478a7005230264596f4814c94a0a9571259f (diff)
downloadandroid_dalvik-cff569c2e9d9c323edc6d974ebe69fded6d18c0c.tar.gz
android_dalvik-cff569c2e9d9c323edc6d974ebe69fded6d18c0c.tar.bz2
android_dalvik-cff569c2e9d9c323edc6d974ebe69fded6d18c0c.zip
am f65d478a: Merge "Throw NoSuchMethodError if RegisterNatives fails."
* commit 'f65d478a7005230264596f4814c94a0a9571259f': Throw NoSuchMethodError if RegisterNatives fails.
-rw-r--r--vm/Jni.cpp7
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;
}