summaryrefslogtreecommitdiff
path: root/test/912-classes/classes.cc
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2017-01-06 23:03:37 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-01-06 23:03:38 +0000
commit1b2f6c36c7aea739f048733ca93927e4b3a143c7 (patch)
tree6729e3faee09b7ddae446e9706d64abd7e9566f4 /test/912-classes/classes.cc
parent2c5315bf01a432a8ba31a6f3b0f9894529d3cdbf (diff)
parent64013e5b5a57761d9a6767b9b03ff4f15fac51c2 (diff)
Merge changes Ia14276d3,I7f063806
* changes: ART: Add GetClassModifiers ART: Add GetClassMethods
Diffstat (limited to 'test/912-classes/classes.cc')
-rw-r--r--test/912-classes/classes.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/912-classes/classes.cc b/test/912-classes/classes.cc
index 28c5931521..3383d04319 100644
--- a/test/912-classes/classes.cc
+++ b/test/912-classes/classes.cc
@@ -87,6 +87,19 @@ extern "C" JNIEXPORT jboolean JNICALL Java_Main_isArrayClass(
return is_array_class;
}
+extern "C" JNIEXPORT jint JNICALL Java_Main_getClassModifiers(
+ JNIEnv* env ATTRIBUTE_UNUSED, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) {
+ jint mod;
+ jvmtiError result = jvmti_env->GetClassModifiers(klass, &mod);
+ if (result != JVMTI_ERROR_NONE) {
+ char* err;
+ jvmti_env->GetErrorName(result, &err);
+ printf("Failure running GetClassModifiers: %s\n", err);
+ return JNI_FALSE;
+ }
+ return mod;
+}
+
extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassFields(
JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) {
jint count = 0;
@@ -111,6 +124,30 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassFields(
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;