core :: Sys :: find_class_loader
private fun find_class_loader(native_context: NativeContext) import jni_env, class_loader=, JavaObject.as nullable, class_loader_method=, JMethodID.as nullable `{
JNIEnv *env = Sys_jni_env(self);
// Retrieve main activity
jclass class_context = (*env)->GetObjectClass(env, native_context);
if (class_context == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Nit", "Failed to retrieve activity class");
(*env)->ExceptionDescribe(env);
exit(1);
}
jmethodID class_activity_getClassLoader = (*env)->GetMethodID(env, class_context, "getClassLoader", "()Ljava/lang/ClassLoader;");
if (class_activity_getClassLoader == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Nit", "Failed to retrieve 'getClassLoader' method");
(*env)->ExceptionDescribe(env);
exit(1);
}
// Call activity.getClassLoader
jobject instance_class_loader = (*env)->CallObjectMethod(env, native_context, class_activity_getClassLoader);
if (instance_class_loader == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Nit", "Failed to retrieve class loader instance");
(*env)->ExceptionDescribe(env);
exit(1);
}
jclass class_class_loader = (*env)->GetObjectClass(env, instance_class_loader);
if (class_class_loader == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Nit", "Failed to retrieve class of class loader");
(*env)->ExceptionDescribe(env);
exit(1);
}
// Get the method ClassLoader.findClass
jmethodID class_class_loader_findClass = (*env)->GetMethodID(env, class_class_loader, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
if (class_class_loader_findClass == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Nit", "Failed to retrieve 'findClass' method");
(*env)->ExceptionDescribe(env);
exit(1);
}
// Return the values to Nit
Sys_class_loader__assign(self, JavaObject_as_nullable((*env)->NewGlobalRef(env, instance_class_loader)));
Sys_class_loader_method__assign(self, JMethodID_as_nullable(class_class_loader_findClass));
// Clean up
(*env)->DeleteLocalRef(env, class_context);
(*env)->DeleteLocalRef(env, instance_class_loader);
(*env)->DeleteLocalRef(env, class_class_loader);
`}
lib/android/dalvik.nit:61,2--110,3