ART: Add GetMethodModifiers
Support GetMethodModifiers to retrieve the modifiers of a JNI
method.
Extend test 910.
Bug: 31684812
Test: m test-art-host-run-test-910-methods
Change-Id: Ib44df099bc056c557e526d5fa267df48ac2fd86c
diff --git a/test/910-methods/expected.txt b/test/910-methods/expected.txt
index 980edc3..9a74799 100644
--- a/test/910-methods/expected.txt
+++ b/test/910-methods/expected.txt
@@ -1,10 +1,15 @@
[toString, ()Ljava/lang/String;, null]
class java.lang.Object
+1
[charAt, (I)C, null]
class java.lang.String
+257
[sqrt, (D)D, null]
class java.lang.Math
+265
[add, (Ljava/lang/Object;)Z, null]
interface java.util.List
+1025
[run, ()V, null]
class $Proxy0
+17
diff --git a/test/910-methods/methods.cc b/test/910-methods/methods.cc
index 214ae50..cc6ad67 100644
--- a/test/910-methods/methods.cc
+++ b/test/910-methods/methods.cc
@@ -91,6 +91,22 @@
return declaring_class;
}
+extern "C" JNIEXPORT jint JNICALL Java_Main_getMethodModifiers(
+ JNIEnv* env, jclass klass ATTRIBUTE_UNUSED, jobject method) {
+ jmethodID id = env->FromReflectedMethod(method);
+
+ jint modifiers;
+ jvmtiError result = jvmti_env->GetMethodModifiers(id, &modifiers);
+ if (result != JVMTI_ERROR_NONE) {
+ char* err;
+ jvmti_env->GetErrorName(result, &err);
+ printf("Failure running GetMethodModifiers: %s\n", err);
+ return 0;
+ }
+
+ return modifiers;
+}
+
// Don't do anything
jint OnLoad(JavaVM* vm,
char* options ATTRIBUTE_UNUSED,
diff --git a/test/910-methods/src/Main.java b/test/910-methods/src/Main.java
index d8c4627..3459134 100644
--- a/test/910-methods/src/Main.java
+++ b/test/910-methods/src/Main.java
@@ -62,8 +62,15 @@
throw new RuntimeException("Declaring class not equal: " + base + " vs " + declClass);
}
System.out.println(declClass);
+
+ int modifiers = getMethodModifiers(m);
+ if (modifiers != m.getModifiers()) {
+ throw new RuntimeException("Modifiers not equal: " + m.getModifiers() + " vs " + modifiers);
+ }
+ System.out.println(modifiers);
}
private static native String[] getMethodName(Method m);
private static native Class<?> getMethodDeclaringClass(Method m);
+ private static native int getMethodModifiers(Method m);
}