diff options
| author | 2017-01-06 23:03:37 +0000 | |
|---|---|---|
| committer | 2017-01-06 23:03:38 +0000 | |
| commit | 1b2f6c36c7aea739f048733ca93927e4b3a143c7 (patch) | |
| tree | 6729e3faee09b7ddae446e9706d64abd7e9566f4 /test/912-classes/classes.cc | |
| parent | 2c5315bf01a432a8ba31a6f3b0f9894529d3cdbf (diff) | |
| parent | 64013e5b5a57761d9a6767b9b03ff4f15fac51c2 (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.cc | 37 |
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; |