diff options
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 69301c7925..29eeff6694 100644 --- a/test/912-classes/classes.cc +++ b/test/912-classes/classes.cc @@ -222,5 +222,42 @@ extern "C" JNIEXPORT jobject JNICALL Java_Main_getClassLoader( return classloader; } +extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getClassLoaderClasses( + JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED, jobject jclassloader) { + jint count = 0; + jclass* classes = nullptr; + jvmtiError result = jvmti_env->GetClassLoaderClasses(jclassloader, &count, &classes); + if (JvmtiErrorToException(env, result)) { + 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 jintArray JNICALL Java_Main_getClassVersion( + JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED, jclass klass) { + jint major, minor; + jvmtiError result = jvmti_env->GetClassVersionNumbers(klass, &minor, &major); + if (JvmtiErrorToException(env, result)) { + return nullptr; + } + + jintArray int_array = env->NewIntArray(2); + if (int_array == nullptr) { + return nullptr; + } + jint buf[2] = { major, minor }; + env->SetIntArrayRegion(int_array, 0, 2, buf); + + return int_array; +} + } // namespace Test912Classes } // namespace art |