diff options
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 19 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 1 |
2 files changed, 14 insertions, 6 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 470424edc0..c5fd9667c0 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -1,8 +1,8 @@ use crate::get_class; use ipnetwork::IpNetwork; use jni::{ - objects::{JList, JObject, JString, JValue}, - signature::JavaType, + objects::{JObject, JString, JValue}, + signature::{JavaType, Primitive}, sys::{jboolean, jint, jshort, jsize}, JNIEnv, }; @@ -63,14 +63,21 @@ where .new_object(&class, "(I)V", ¶meters) .expect("Failed to create ArrayList object"); - let list = - JList::from_env(env, list_object).expect("Failed to create JList from ArrayList"); + let list_class = get_class("java/util/List"); + let add_method = env + .get_method_id(&list_class, "add", "(Ljava/lang/Object;)Z") + .expect("Failed to get List.add(Object) method id"); for element in self { let java_element = env.auto_local(JObject::from(element.into_java(env))); - list.add(java_element.as_obj()) - .expect("Failed to add element to ArrayList"); + env.call_method_unchecked( + list_object, + add_method, + JavaType::Primitive(Primitive::Boolean), + &[JValue::Object(java_element.as_obj())], + ) + .expect("Failed to add element to ArrayList"); } list_object diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 947d2b5f70..ff587a4b38 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -33,6 +33,7 @@ const LOG_FILENAME: &str = "daemon.log"; const CLASSES_TO_LOAD: &[&str] = &[ "java/net/InetAddress", "java/util/ArrayList", + "java/util/List", "net/mullvad/mullvadvpn/model/AccountData", "net/mullvad/mullvadvpn/model/Constraint$Any", "net/mullvad/mullvadvpn/model/Constraint$Only", |
