summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 13:46:57 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 21:18:39 +0000
commit777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2 (patch)
treefa75d08341adccdb064b59dc1ee4df27373645f1
parent86acfe9fa717af2a4d60949aa085077add013365 (diff)
downloadmullvadvpn-777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2.tar.xz
mullvadvpn-777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2.zip
Implement `IntoJava` for `Vec<T>`
-rw-r--r--mullvad-jni/src/into_java.rs33
-rw-r--r--mullvad-jni/src/lib.rs1
2 files changed, 33 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs
index 4f8fc3f287..471ff22c3d 100644
--- a/mullvad-jni/src/into_java.rs
+++ b/mullvad-jni/src/into_java.rs
@@ -1,6 +1,7 @@
use crate::get_class;
use jni::{
- objects::{JObject, JString, JValue},
+ objects::{JList, JObject, JString, JValue},
+ sys::jint,
JNIEnv,
};
use mullvad_types::{account::AccountData, settings::Settings};
@@ -34,6 +35,36 @@ impl<'env> IntoJava<'env> for String {
}
}
+impl<'env, T> IntoJava<'env> for Vec<T>
+where
+ T: IntoJava<'env>,
+ JObject<'env>: From<T::JavaType>,
+{
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let class = get_class("java/util/ArrayList");
+ let initial_capacity = self.len();
+ let parameters = [JValue::Int(initial_capacity as jint)];
+
+ let list_object = env
+ .new_object(&class, "(I)V", &parameters)
+ .expect("Failed to create ArrayList object");
+
+ let list =
+ JList::from_env(env, list_object).expect("Failed to create JList from ArrayList");
+
+ 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");
+ }
+
+ list_object
+ }
+}
+
impl<'env> IntoJava<'env> for AccountData {
type JavaType = JObject<'env>;
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 6195b56b52..61a0d602bf 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -19,6 +19,7 @@ use talpid_types::{tunnel::TunnelStateTransition, ErrorExt};
const LOG_FILENAME: &str = "daemon.log";
const CLASSES_TO_LOAD: &[&str] = &[
+ "java/util/ArrayList",
"net/mullvad/mullvadvpn/model/AccountData",
"net/mullvad/mullvadvpn/model/Settings",
];