Merge "Fix dumpsys meminfo for art" into klp-dev
diff --git a/runtime/check_jni.cc b/runtime/check_jni.cc
index 54f3143..3b1bda4 100644
--- a/runtime/check_jni.cc
+++ b/runtime/check_jni.cc
@@ -335,7 +335,7 @@
       return;
     }
     mirror::Class* c = soa_.Decode<mirror::Class*>(java_class);
-    if (!c->IsAssignableFrom(m->GetDeclaringClass())) {
+    if (!m->GetDeclaringClass()->IsAssignableFrom(c)) {
       JniAbortF(function_name_, "can't call static %s on class %s",
                 PrettyMethod(m).c_str(), PrettyClass(c).c_str());
     }
diff --git a/test/JniTest/JniTest.java b/test/JniTest/JniTest.java
index 431056a..7014ef9 100644
--- a/test/JniTest/JniTest.java
+++ b/test/JniTest/JniTest.java
@@ -18,7 +18,28 @@
     public static void main(String[] args) {
         System.loadLibrary("arttest");
         testFindClassOnAttachedNativeThread();
+        testCallStaticVoidMethodOnSubClass();
     }
 
     private static native void testFindClassOnAttachedNativeThread();
+
+    private static void testCallStaticVoidMethodOnSubClass() {
+        testCallStaticVoidMethodOnSubClassNative();
+        if (!testCallStaticVoidMethodOnSubClass_SuperClass.executed) {
+            throw new AssertionError();
+        }
+    }
+
+    private static native void testCallStaticVoidMethodOnSubClassNative();
+
+    private static class testCallStaticVoidMethodOnSubClass_SuperClass {
+        private static boolean executed = false;
+        private static void execute() {
+            executed = true;
+        }
+    }
+
+    private static class testCallStaticVoidMethodOnSubClass_SubClass
+        extends testCallStaticVoidMethodOnSubClass_SuperClass {
+    }
 }
diff --git a/test/JniTest/jni_test.cc b/test/JniTest/jni_test.cc
index ed69d39..72a3309 100644
--- a/test/JniTest/jni_test.cc
+++ b/test/JniTest/jni_test.cc
@@ -54,6 +54,7 @@
   return NULL;
 }
 
+// http://b/10994325
 extern "C" JNIEXPORT void JNICALL Java_JniTest_testFindClassOnAttachedNativeThread(JNIEnv*,
                                                                                    jclass) {
   pthread_t pthread;
@@ -65,3 +66,18 @@
   int pthread_join_result = pthread_join(pthread, NULL);
   assert(pthread_join_result == 0);
 }
+
+// http://b/11243757
+extern "C" JNIEXPORT void JNICALL Java_JniTest_testCallStaticVoidMethodOnSubClassNative(JNIEnv* env,
+                                                                                        jclass) {
+  jclass super_class = env->FindClass("JniTest$testCallStaticVoidMethodOnSubClass_SuperClass");
+  assert(super_class != NULL);
+
+  jmethodID execute = env->GetStaticMethodID(super_class, "execute", "()V");
+  assert(execute != NULL);
+
+  jclass sub_class = env->FindClass("JniTest$testCallStaticVoidMethodOnSubClass_SubClass");
+  assert(sub_class != NULL);
+
+  env->CallStaticVoidMethod(sub_class, execute);
+}