diff options
| author | 2017-01-06 23:49:35 +0000 | |
|---|---|---|
| committer | 2017-01-06 23:49:36 +0000 | |
| commit | 2d02f857d3a9b06478fe11592e014deec6e5c54f (patch) | |
| tree | a1205b17b6b74604611e72825066a850257abc2c /test/912-classes/classes.cc | |
| parent | 1b2f6c36c7aea739f048733ca93927e4b3a143c7 (diff) | |
| parent | 8b07e4704f6150efdf1aed9591d9f7e4a4b0708b (diff) | |
Merge "ART: Add GetImplementedInterfaces"
Diffstat (limited to 'test/912-classes/classes.cc')
| -rw-r--r-- | test/912-classes/classes.cc | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/test/912-classes/classes.cc b/test/912-classes/classes.cc index 3383d04319..5674e7b9a3 100644 --- a/test/912-classes/classes.cc +++ b/test/912-classes/classes.cc @@ -121,7 +121,11 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassFields( fields[i], (modifiers & kStatic) != 0 ? JNI_TRUE : JNI_FALSE); }; - return CreateObjectArray(env, count, "java/lang/Object", callback); + jobjectArray ret = CreateObjectArray(env, count, "java/lang/Object", callback); + if (fields != nullptr) { + jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(fields)); + } + return ret; } extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassMethods( @@ -145,7 +149,33 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassMethods( methods[i], (modifiers & kStatic) != 0 ? JNI_TRUE : JNI_FALSE); }; - return CreateObjectArray(env, count, "java/lang/Object", callback); + jobjectArray ret = CreateObjectArray(env, count, "java/lang/Object", callback); + if (methods != nullptr) { + jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(methods)); + } + return ret; +} + +extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getImplementedInterfaces( + JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) { + jint count = 0; + jclass* classes = nullptr; + jvmtiError result = jvmti_env->GetImplementedInterfaces(klass, &count, &classes); + if (result != JVMTI_ERROR_NONE) { + char* err; + jvmti_env->GetErrorName(result, &err); + printf("Failure running GetImplementedInterfaces: %s\n", err); + return nullptr; + } + + auto callback = [&](jint i) { + return classes[i]; + }; + jobjectArray ret = CreateObjectArray(env, count, "java/lang/Class", callback); + if (classes != nullptr) { + jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(classes)); + } + return ret; } extern "C" JNIEXPORT jint JNICALL Java_Main_getClassStatus( |