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);
+}