OSDN Git Service

Tweak UnsatisfiedLinkError
authorAndy McFadden <fadden@android.com>
Fri, 20 Jan 2012 22:05:24 +0000 (14:05 -0800)
committerAndy McFadden <fadden@android.com>
Fri, 20 Jan 2012 22:08:07 +0000 (14:08 -0800)
Change this:

  java.lang.UnsatisfiedLinkError: getSuperclass

to this:

  java.lang.UnsatisfiedLinkError: Native method not found:
    java.lang.Class.getSuperclass:()Ljava/lang/Class;

Change-Id: I23bd4350caf743ad9ba3524da0a10107c63af56a

vm/Exception.cpp
vm/Exception.h
vm/Native.cpp

index 8dbec39..de6d9a9 100644 (file)
@@ -1430,6 +1430,15 @@ void dvmThrowUnsatisfiedLinkError(const char* msg) {
     dvmThrowException(gDvm.exUnsatisfiedLinkError, msg);
 }
 
+void dvmThrowUnsatisfiedLinkError(const char* msg, const Method* method) {
+    char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
+    char* className = dvmDescriptorToDot(method->clazz->descriptor);
+    dvmThrowExceptionFmt(gDvm.exUnsatisfiedLinkError, "%s: %s.%s:%s",
+        msg, className, method->name, desc);
+    free(className);
+    free(desc);
+}
+
 void dvmThrowUnsupportedOperationException(const char* msg) {
     dvmThrowException(gDvm.exUnsupportedOperationException, msg);
 }
index 3b7bdd9..055ed2b 100644 (file)
@@ -463,6 +463,7 @@ void dvmThrowTypeNotPresentException(const char* descriptor);
  * the given detail message.
  */
 void dvmThrowUnsatisfiedLinkError(const char* msg);
+void dvmThrowUnsatisfiedLinkError(const char* msg, const Method* method);
 
 /**
  * Throw an UnsupportedOperationException in the current thread, with
index 6ccd1ea..be719a7 100644 (file)
@@ -118,12 +118,12 @@ void dvmResolveNativeMethod(const u4* args, JValue* pResult,
 
     IF_ALOGW() {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        ALOGW("No implementation found for native %s.%s %s",
+        ALOGW("No implementation found for native %s.%s:%s",
             clazz->descriptor, method->name, desc);
         free(desc);
     }
 
-    dvmThrowUnsatisfiedLinkError(method->name);
+    dvmThrowUnsatisfiedLinkError("Native method not found", method);
 }