0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 03:52:17 +02:00

Don't include the Future testing APIs when building for Android

This commit is contained in:
Jordan Rose 2023-09-26 18:17:45 -04:00
parent a15fffd058
commit 5fde77a631
3 changed files with 46 additions and 37 deletions

View File

@ -39,6 +39,7 @@ ignore_this_warning = re.compile(
"("
r"WARN: Can't find .*\. This usually means that this type was incompatible or not found\.|"
r"WARN: Missing `\[defines\]` entry for `feature = \".*\"` in cbindgen config\.|"
r"WARN: Missing `\[defines\]` entry for `target_os = \"android\"` in cbindgen config\.|"
r"WARN: Skip libsignal-bridge::.+ - \(not `(?:pub|no_mangle)`\)\.|"
r"WARN: Couldn't find path for Array\(Path\(GenericPath \{ .+ \}\), Name\(\"LEN\"\)\), skipping associated constants|"
r"WARN: Cannot find a mangling for generic path GenericPath { path: Path { name: \"JavaFuture\" }.+"

View File

@ -7,12 +7,10 @@
#![deny(clippy::unwrap_used)]
use jni::objects::{JByteArray, JClass, JLongArray, JObject};
use jni::sys::jint;
use jni::JNIEnv;
use std::convert::TryFrom;
use libsignal_bridge::jni::*;
use libsignal_bridge::{jni_args, jni_class_name};
use libsignal_protocol::*;
pub mod logging;
@ -50,40 +48,50 @@ pub unsafe extern "C" fn Java_org_signal_libsignal_internal_Native_keepAlive(
) {
}
#[no_mangle]
pub unsafe extern "C" fn Java_org_signal_libsignal_internal_Native_Future_1success<'local>(
mut env: JNIEnv<'local>,
_class: JClass,
) -> JavaFuture<'local, jint> {
run_ffi_safe(&mut env, |env| {
let future = new_object(
env,
jni_class_name!(org.signal.libsignal.internal.CompletableFuture),
jni_args!(() -> void),
)?;
let completer = FutureCompleter::new(env, &future)?;
std::thread::spawn(move || completer.complete(42));
Ok(future.into())
})
}
// These APIs are only useful for tests.
// To save on code size, we omit them when building for Android.
#[cfg(not(target_os = "android"))]
mod test_apis {
use super::*;
#[no_mangle]
pub unsafe extern "C" fn Java_org_signal_libsignal_internal_Native_Future_1failure<'local>(
mut env: JNIEnv<'local>,
_class: JClass,
) -> JavaFuture<'local, jint> {
run_ffi_safe(&mut env, |env| {
let future = new_object(
env,
jni_class_name!(org.signal.libsignal.internal.CompletableFuture),
jni_args!(() -> void),
)?;
let completer = FutureCompleter::new(env, &future)?;
std::thread::spawn(move || {
completer.complete(Err::<(), _>(SignalProtocolError::InvalidArgument(
"failure".to_string(),
)))
});
Ok(future.into())
})
use jni::sys::jint;
use libsignal_bridge::{jni_args, jni_class_name};
#[no_mangle]
pub unsafe extern "C" fn Java_org_signal_libsignal_internal_Native_Future_1success<'local>(
mut env: JNIEnv<'local>,
_class: JClass,
) -> JavaFuture<'local, jint> {
run_ffi_safe(&mut env, |env| {
let future = new_object(
env,
jni_class_name!(org.signal.libsignal.internal.CompletableFuture),
jni_args!(() -> void),
)?;
let completer = FutureCompleter::new(env, &future)?;
std::thread::spawn(move || completer.complete(42));
Ok(future.into())
})
}
#[no_mangle]
pub unsafe extern "C" fn Java_org_signal_libsignal_internal_Native_Future_1failure<'local>(
mut env: JNIEnv<'local>,
_class: JClass,
) -> JavaFuture<'local, jint> {
run_ffi_safe(&mut env, |env| {
let future = new_object(
env,
jni_class_name!(org.signal.libsignal.internal.CompletableFuture),
jni_args!(() -> void),
)?;
let completer = FutureCompleter::new(env, &future)?;
std::thread::spawn(move || {
completer.complete(Err::<(), _>(SignalProtocolError::InvalidArgument(
"failure".to_string(),
)))
});
Ok(future.into())
})
}
}