(jni_env: *mut JNIEnv, methods: Vec<MethodInfo>)
| 376 | } |
| 377 | |
| 378 | unsafe fn params_to_object_array(jni_env: *mut JNIEnv, methods: Vec<MethodInfo>) -> Result<jobjectArray, String> { |
| 379 | let obj_str = CString::new("java/lang/Object").unwrap(); |
| 380 | let obj_class = util::result_or_jni_ex((**jni_env).FindClass.unwrap()(jni_env, obj_str.as_ptr()), jni_env)?; |
| 381 | let obj_arr_str = CString::new("[Ljava/lang/Object;").unwrap(); |
| 382 | let obj_arr_class = util::result_or_jni_ex((**jni_env).FindClass.unwrap()(jni_env, obj_arr_str.as_ptr()), jni_env)?; |
| 383 | let ret = util::result_or_jni_ex((**jni_env).NewObjectArray.unwrap()(jni_env, |
| 384 | methods.len() as jsize, |
| 385 | obj_arr_class, |
| 386 | ptr::null_mut()), jni_env)?; |
| 387 | let mut unknown_param: jstring = ptr::null_mut(); |
| 388 | for (method_index, method) in methods.iter().enumerate() { |
| 389 | let param_arr = util::result_or_jni_ex((**jni_env).NewObjectArray.unwrap()(jni_env, |
| 390 | (method.params.len() * 3) as jsize, |
| 391 | obj_class, |
| 392 | ptr::null_mut()), jni_env)?; |
| 393 | for (param_index, param) in method.params.iter().enumerate() { |
| 394 | // Goes: param name, param sig, val |
| 395 | (**jni_env).SetObjectArrayElement.unwrap()(jni_env, |
| 396 | param_arr, |
| 397 | (param_index * 3) as jsize, |
| 398 | new_string(jni_env, param.name.as_ref())?); |
| 399 | util::result_or_jni_ex((), jni_env)?; |
| 400 | (**jni_env).SetObjectArrayElement.unwrap()(jni_env, |
| 401 | param_arr, |
| 402 | ((param_index * 3) + 1) as jsize, |
| 403 | new_string(jni_env, param.typ.as_ref())?); |
| 404 | util::result_or_jni_ex((), jni_env)?; |
| 405 | let val = match param.val { |
| 406 | Some(val) => val, |
| 407 | None => { |
| 408 | if unknown_param.is_null() { |
| 409 | unknown_param = new_string(jni_env, "<unknown>")?; |
| 410 | } |
| 411 | unknown_param |
| 412 | } |
| 413 | }; |
| 414 | (**jni_env).SetObjectArrayElement.unwrap()(jni_env, param_arr, ((param_index * 3) + 2) as jsize, val); |
| 415 | util::result_or_jni_ex((), jni_env)?; |
| 416 | } |
| 417 | (**jni_env).SetObjectArrayElement.unwrap()(jni_env, ret, method_index as jsize, param_arr); |
| 418 | util::result_or_jni_ex((), jni_env)?; |
| 419 | } |
| 420 | return Result::Ok(ret); |
| 421 | } |
| 422 | |
| 423 | unsafe fn throw_ex_with_msg(jni_env: *mut JNIEnv, ex_class: &str, ex_msg: &str) -> Result<(), String> { |
| 424 | let ex_class_str = CString::new(ex_class).unwrap(); |
no test coverage detected