ART: Add GetClassMethods

Add GetClassMethods support. Add a test.

Bug: 31684578
Test: m test-art-host-run-test-912-classes
Change-Id: I7f063806671db5a5a69f7064e61f950b246f0b86
diff --git a/test/912-classes/classes.cc b/test/912-classes/classes.cc
index 28c5931..6771d71 100644
--- a/test/912-classes/classes.cc
+++ b/test/912-classes/classes.cc
@@ -111,6 +111,30 @@
   return CreateObjectArray(env, count, "java/lang/Object", callback);
 }
 
+extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassMethods(
+    JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) {
+  jint count = 0;
+  jmethodID* methods = nullptr;
+  jvmtiError result = jvmti_env->GetClassMethods(klass, &count, &methods);
+  if (result != JVMTI_ERROR_NONE) {
+    char* err;
+    jvmti_env->GetErrorName(result, &err);
+    printf("Failure running GetClassMethods: %s\n", err);
+    return nullptr;
+  }
+
+  auto callback = [&](jint i) {
+    jint modifiers;
+    // Ignore any errors for simplicity.
+    jvmti_env->GetMethodModifiers(methods[i], &modifiers);
+    constexpr jint kStatic = 0x8;
+    return env->ToReflectedMethod(klass,
+                                  methods[i],
+                                  (modifiers & kStatic) != 0 ? JNI_TRUE : JNI_FALSE);
+  };
+  return CreateObjectArray(env, count, "java/lang/Object", callback);
+}
+
 extern "C" JNIEXPORT jint JNICALL Java_Main_getClassStatus(
     JNIEnv* env ATTRIBUTE_UNUSED, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) {
   jint status;