diff --git a/native/Cargo.lock b/native/Cargo.lock index 6892886..14b05cf 100644 --- a/native/Cargo.lock +++ b/native/Cargo.lock @@ -159,18 +159,16 @@ dependencies = [ [[package]] name = "jni" -version = "0.21.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" dependencies = [ "cesu8", - "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", - "windows-sys", ] [[package]] @@ -402,69 +400,3 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" diff --git a/native/chromium/Cargo.toml b/native/chromium/Cargo.toml index fb15c33..ec6755f 100644 --- a/native/chromium/Cargo.toml +++ b/native/chromium/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["rlib"] [dependencies] chromium_jni_utils = { path = "../chromium_jni_utils/" } chromium_jni_macro = { path = "../chromium_jni_macro/" } -jni = "0.21.1" +jni = "0.19.0" winapi = { version = "0.3.9", features = ["winuser", "libloaderapi"] } [features] diff --git a/native/chromium/build.rs b/native/chromium/build.rs index 0f2282a..0e5596a 100644 --- a/native/chromium/build.rs +++ b/native/chromium/build.rs @@ -193,5 +193,4 @@ fn generator(cef_path: std::path::Display) -> bindgen::Builder { .raw_line("use jni::objects::GlobalRef;") .raw_line("use jni::objects::JObject;") .raw_line("use chromium_jni_utils::jni_unwrap;") - .raw_line("use std::ops::DerefMut;") } diff --git a/native/chromium/src/cef/mod.rs b/native/chromium/src/cef/mod.rs index 74fe0bb..b27eef7 100644 --- a/native/chromium/src/cef/mod.rs +++ b/native/chromium/src/cef/mod.rs @@ -16,7 +16,6 @@ use crate::ToJava; use jni::objects::GlobalRef; use jni::objects::JObject; use chromium_jni_utils::jni_unwrap; -use std::ops::DerefMut; pub mod win; pub use self::win::_cef_window_info_t; pub use self::win::_cef_main_args_t; diff --git a/native/chromium/src/cef/win.rs b/native/chromium/src/cef/win.rs index e9e2e81..5ce464a 100644 --- a/native/chromium/src/cef/win.rs +++ b/native/chromium/src/cef/win.rs @@ -16,7 +16,6 @@ use crate::ToJava; use jni::objects::GlobalRef; use jni::objects::JObject; use chromium_jni_utils::jni_unwrap; -use std::ops::DerefMut; use crate::cef::cef_string_t; pub type DWORD = ::std::os::raw::c_ulong; diff --git a/native/chromium/src/lib.rs b/native/chromium/src/lib.rs index 0db5e0a..84008ad 100644 --- a/native/chromium/src/lib.rs +++ b/native/chromium/src/lib.rs @@ -16,11 +16,7 @@ use jni::objects::JValue; use jni::JNIEnv; impl FromJavaMember for cef::cef_base_ref_counted_t { - fn from_java_member( - env: &mut JNIEnv, - object: &JObject, - name: &str, - ) -> cef::cef_base_ref_counted_t { + fn from_java_member(env: JNIEnv, object: JObject, name: &str) -> cef::cef_base_ref_counted_t { let obj = env .get_field( object, @@ -30,114 +26,114 @@ impl FromJavaMember for cef::cef_base_ref_counted_t { .unwrap() .l() .unwrap(); - FromJava::from_java(env, &obj) + FromJava::from_java(env, obj) } } /// Allows constructing an object from a Java object pub trait ToJava<'a> { /// Constructs `Self` from the JNI object `object` - fn to_java(_env: &JNIEnv<'a>, value: Self) -> JValue<'a, 'a>; + fn to_java(_env: JNIEnv<'a>, value: Self) -> JValue<'a>; } impl<'a, T> ToJava<'a> for *mut T { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Long(value as i64) } } impl<'a, T> ToJava<'a> for *const T { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Long(value as i64) } } impl<'a> ToJava<'a> for i32 { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(value) } } impl<'a> ToJava<'a> for usize { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Long(value.try_into().unwrap()) } } impl<'a> ToJava<'a> for i64 { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Long(value) } } impl<'a> ToJava<'a> for f64 { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Double(value) } } impl<'a> ToJava<'a> for cef::cef_process_id_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_cursor_type_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_errorcode_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_transition_type_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_window_open_disposition_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_log_severity_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_event_flags_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_termination_status_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_focus_source_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_jsdialog_type_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_quick_menu_edit_state_flags_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } impl<'a> ToJava<'a> for cef::cef_preferences_type_t { - fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> { + fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> { JValue::Int(unsafe { std::mem::transmute(value) }) } } diff --git a/native/chromium_jni/Cargo.toml b/native/chromium_jni/Cargo.toml index 22a5dac..4d55095 100644 --- a/native/chromium_jni/Cargo.toml +++ b/native/chromium_jni/Cargo.toml @@ -4,7 +4,7 @@ version = "1.0.0" edition = "2021" [dependencies] -jni = "0.21.1" +jni = "0.19.0" chromium = { path = "../chromium/" } chromium_swt = { path = "../chromium_swt/" } chromium_jni_macro = { path = "../chromium_jni_macro/" } diff --git a/native/chromium_jni/src/allocate.rs b/native/chromium_jni/src/allocate.rs index d4d837d..741d70d 100644 --- a/native/chromium_jni/src/allocate.rs +++ b/native/chromium_jni/src/allocate.rs @@ -19,9 +19,9 @@ use jni::JNIEnv; macro_rules! jni_allocate { ($name:tt, $type:ty) => { #[jni_name($name, $type)] - pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: &JObject) -> jlong { - let global_ref = env.new_global_ref(object).unwrap(); - let object: JNIWrapperType<$type> = JNICEFCallback::jni_allocate(env, global_ref); + pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: JObject) -> jlong { + let object: JNIWrapperType<$type> = + JNICEFCallback::jni_allocate(env, env.new_global_ref(object).unwrap()); return Box::into_raw(Box::new(object)) as jlong; } }; @@ -32,7 +32,7 @@ macro_rules! jni_deallocate { ($name:tt, $type:ty) => { #[jni_name($name, $type)] pub extern "C" fn deallocate( - mut _env: JNIEnv, + _env: JNIEnv, _class: JClass, object: *mut chromium::cef::_cef_display_handler_t, ) { diff --git a/native/chromium_jni/src/swt_wrapper.rs b/native/chromium_jni/src/swt_wrapper.rs index 73403c6..da256d9 100644 --- a/native/chromium_jni/src/swt_wrapper.rs +++ b/native/chromium_jni/src/swt_wrapper.rs @@ -12,9 +12,9 @@ use jni::JNIEnv; #[no_mangle] pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_eclipse_set_browser_lib_cef_1popup_1features_1t_2J( - mut env: JNIEnv, + env: JNIEnv, _class: JClass, - destination: &JObject, + destination: JObject, source: *mut chromium::cef::_cef_popup_features_t, ) { let source_object = unsafe { *source }; @@ -53,10 +53,10 @@ pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_ecl #[no_mangle] pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_cefswt_1function_1id( - mut _env: JNIEnv, + _env: JNIEnv, _class: JClass, arg0: jlong, - arg1: &JObject, + arg1: JObject, ) { // IMPROVE: Avoid creating this object here let mut func_st = chromium_swt::FunctionSt { diff --git a/native/chromium_jni_macro/src/derive_from_java_impl.rs b/native/chromium_jni_macro/src/derive_from_java_impl.rs index a7f4293..8ae8f40 100644 --- a/native/chromium_jni_macro/src/derive_from_java_impl.rs +++ b/native/chromium_jni_macro/src/derive_from_java_impl.rs @@ -38,7 +38,7 @@ pub fn derive_from_java_impl(tokens: TokenStream) -> TokenStream { let modified = quote! { impl FromJava for #name { - fn from_java(env: &mut JNIEnv, object: &JObject) -> #name { + fn from_java(env: JNIEnv, object: JObject) -> #name { return #name { #(#query_parts, )* }; diff --git a/native/chromium_jni_macro/src/jni_allocate.rs b/native/chromium_jni_macro/src/jni_allocate.rs index 656cf31..f52de92 100644 --- a/native/chromium_jni_macro/src/jni_allocate.rs +++ b/native/chromium_jni_macro/src/jni_allocate.rs @@ -51,8 +51,8 @@ pub fn jni_allocate(tokens: TokenStream) -> TokenStream { let modified = quote! { impl JNICEFCallback for #name { - fn jni_allocate(mut env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> { - let class = &env.get_object_class(object.as_obj()).unwrap(); + fn jni_allocate(env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> { + let class = env.get_object_class(object.as_obj()).unwrap(); #(#jni_callbacks)* @@ -92,7 +92,7 @@ fn build_initialization( let signature = jni_signature(field); quote! { #field_ident: match env.get_method_id(class, stringify!(#field_ident), #signature) { - Err(_e) => { + Err(e) => { // Attempting to get the method id of a method that does not exists results // in a NoSuchMethodException. As we do not want to throw this, clear the exception env.exception_clear().unwrap(); @@ -140,8 +140,9 @@ fn build_jni_callback( let retline = match result { None => quote! {}, - Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(&env, result); } + Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(env, result); } }; + let func_ident = syn::Ident::new(&format!("jni_{}", field_ident), Span::call_site()); let signature = jni_signature(field); @@ -149,8 +150,8 @@ fn build_jni_callback( /// C-Callback which calls the Java function via JNI unsafe extern "C" fn #func_ident(#args) #result_tag { let wrapper = jni_unwrap(self_); - let mut guard = (*wrapper).jvm.attach_current_thread().unwrap(); - let env: &mut JNIEnv = guard.deref_mut(); + let guard = (*wrapper).jvm.attach_current_thread().unwrap(); + let env: JNIEnv = *guard; let result = env.call_method((*wrapper).this.as_obj(), stringify!(#field_ident), #signature, &[#(#argnames, )*]).expect(stringify!(#func_ident)); #retline }; diff --git a/native/chromium_jni_macro/src/jni_wrap_impl.rs b/native/chromium_jni_macro/src/jni_wrap_impl.rs index 4d9dad4..3bafec1 100644 --- a/native/chromium_jni_macro/src/jni_wrap_impl.rs +++ b/native/chromium_jni_macro/src/jni_wrap_impl.rs @@ -56,7 +56,7 @@ pub fn jni_wrap_attr_impl(attr: TokenStream, item: TokenStream) -> TokenStream { ); let q = quote! { #[no_mangle] - pub unsafe extern fn #fname(mut _env: jni::JNIEnv, _class: jni::objects::JClass, #(#func_args, )*) #ret_expr { + pub extern fn #fname(_env: jni::JNIEnv, _class: jni::objects::JClass, #(#func_args, )*) #ret_expr { #(#param_prepare; )* #call_expr #(#param_cleanup; )* @@ -88,7 +88,7 @@ fn setup_argument( }; let arg = Ident::new(&format!("arg{}", index), Span::call_site()); let param = Ident::new(&format!("param{}", index), Span::call_site()); - let (arg_type, prepare, cleanup) = handle_arg(&arg, ty); + let (arg_type, prepare, cleanup) = handle_arg(&arg, ¶m, ty); ( // JNI Function argument: arg[index]: type @@ -110,11 +110,11 @@ fn handle_return(retn: &Option) -> (proc_macro2::TokenStream, proc_macro Some(t) => match t.as_str() { "String" => ( quote! { -> jni::sys::jstring }, - quote! { return _env.new_string(result).unwrap().into_raw(); }, + quote! { return _env.new_string(result).unwrap().into_inner(); }, ), "CStr" => ( quote! { -> jni::sys::jstring }, - quote! { return _env.new_string(result.to_str().unwrap()).unwrap().into_raw(); }, + quote! { return _env.new_string(result.to_str().unwrap()).unwrap().into_inner(); }, ), "* mut c_char" | "* const c_char" => ( quote! { -> jni::sys::jstring }, @@ -123,7 +123,7 @@ fn handle_return(retn: &Option) -> (proc_macro2::TokenStream, proc_macro return std::ptr::null_mut(); } let result = unsafe { CStr::from_ptr(result) }; - return _env.new_string(result.to_str().unwrap()).unwrap().into_raw(); + return _env.new_string(result.to_str().unwrap()).unwrap().into_inner(); }, ), "cef :: cef_string_userfree_t" => ( @@ -131,7 +131,7 @@ fn handle_return(retn: &Option) -> (proc_macro2::TokenStream, proc_macro quote! { let str: String = chromium::utils::str_from_cef(result); unsafe { cef::cef_string_userfree_utf16_free(result) }; - return _env.new_string(str).unwrap().into_raw(); + return _env.new_string(str).unwrap().into_inner(); }, ), "c_int" | "i32" => ( @@ -157,6 +157,7 @@ fn handle_return(retn: &Option) -> (proc_macro2::TokenStream, proc_macro /// result is (paramType, mapping, cleanup) fn handle_arg( arg: &Ident, + param: &Ident, ty: &Type, ) -> ( proc_macro2::TokenStream, @@ -186,18 +187,20 @@ fn handle_arg( quote! {}, ), "* const c_char" => ( - quote! { &jni::objects::JString }, - quote! { _env.get_string_unchecked(#arg).map(|strs| strs.into_raw()).unwrap_or(std::ptr::null_mut()) }, - quote! {}, + quote! { jni::objects::JString }, + quote! { _env.get_string_utf_chars(#arg).unwrap_or(std::ptr::null_mut()) }, + quote! { if !#param.is_null() { + _env.release_string_utf_chars(#arg, #param).unwrap() + }}, ), "Option < Vec < u8 > >" => ( - quote! { jni::objects::JByteArray }, - quote! { _env.convert_byte_array(&#arg).map(|arr| Some(arr)).unwrap_or(None) }, + quote! { jni::sys::jbyteArray }, + quote! { _env.convert_byte_array(#arg).map(|arr| Some(arr)).unwrap_or(None) }, quote! {}, ), "Vec < u8 >" => ( - quote! { jni::objects::JByteArray }, - quote! { _env.convert_byte_array(&#arg).unwrap() }, + quote! { jni::sys::jbyteArray }, + quote! { _env.convert_byte_array(#arg).unwrap() }, quote! {}, ), _ => { diff --git a/native/chromium_jni_utils/Cargo.toml b/native/chromium_jni_utils/Cargo.toml index 402e519..bddee1a 100644 --- a/native/chromium_jni_utils/Cargo.toml +++ b/native/chromium_jni_utils/Cargo.toml @@ -4,7 +4,7 @@ version = "1.0.0" edition = "2021" [dependencies] -jni = "0.21.1" +jni = "0.19.0" [lib] crate-type = ["rlib"] diff --git a/native/chromium_jni_utils/src/lib.rs b/native/chromium_jni_utils/src/lib.rs index 2858bfb..96ee42a 100644 --- a/native/chromium_jni_utils/src/lib.rs +++ b/native/chromium_jni_utils/src/lib.rs @@ -8,7 +8,7 @@ */ use jni::objects::GlobalRef; use jni::objects::JObject; -use jni::objects::JValueGen; +use jni::objects::JValue; use jni::JNIEnv; use jni::JavaVM; @@ -36,54 +36,54 @@ pub trait JNICEFCallback { /// Allows extracting an object from a Java field pub trait FromJavaMember { /// Constructs `Self` from the field `name` in the JNI object `object` - fn from_java_member(env: &mut JNIEnv, object: &JObject, name: &str) -> Self; + fn from_java_member(env: JNIEnv, object: JObject, name: &str) -> Self; } /// Allows constructing an object from a Java object pub trait FromJava { /// Constructs `Self` from the JNI object `object` - fn from_java(env: &mut JNIEnv, object: &JObject) -> Self; + fn from_java(env: JNIEnv, object: JObject) -> Self; } /// Allows constructing an object from a Java object pub trait FromJavaValue { /// Constructs `Self` from the JNI object `object` - fn from_java_value(env: &JNIEnv, object: JValueGen) -> Self; + fn from_java_value(env: JNIEnv, object: JValue) -> Self; } impl FromJavaValue for i32 { - fn from_java_value(mut _env: &JNIEnv, object: JValueGen) -> Self { + fn from_java_value(_env: JNIEnv, object: JValue) -> Self { match object { - JValueGen::Int(i) => i, - JValueGen::Byte(b) => b.into(), - JValueGen::Short(b) => b.into(), - JValueGen::Bool(b) => b.into(), + JValue::Int(i) => i, + JValue::Byte(b) => b.into(), + JValue::Short(b) => b.into(), + JValue::Bool(b) => b.into(), _ => panic!("Wrong type for from_java_value"), } } } impl FromJavaValue for i64 { - fn from_java_value(mut _env: &JNIEnv, object: JValueGen) -> Self { + fn from_java_value(_env: JNIEnv, object: JValue) -> Self { match object { - JValueGen::Long(l) => l, - JValueGen::Int(i) => i.into(), - JValueGen::Byte(b) => b.into(), - JValueGen::Short(b) => b.into(), - JValueGen::Bool(b) => b.into(), + JValue::Long(l) => l, + JValue::Int(i) => i.into(), + JValue::Byte(b) => b.into(), + JValue::Short(b) => b.into(), + JValue::Bool(b) => b.into(), _ => panic!("Wrong type for from_java_value"), } } } impl FromJavaValue for *mut T { - fn from_java_value(mut _env: &JNIEnv, object: JValueGen) -> Self { + fn from_java_value(_env: JNIEnv, object: JValue) -> Self { object.j().unwrap() as *mut T } } impl FromJavaMember for usize { - fn from_java_member(env: &mut JNIEnv, object: &JObject, name: &str) -> usize { + fn from_java_member(env: JNIEnv, object: JObject, name: &str) -> usize { // Read an integer field return env .get_field(object, name, "I") @@ -96,8 +96,8 @@ impl FromJavaMember for usize { // IMPROVE: Is there a better way to generalize across an arbitrary number of function args impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -113,8 +113,8 @@ impl FromJavaMember for Option U> { impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -130,8 +130,8 @@ impl FromJavaMember for Option U> { impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -147,8 +147,8 @@ impl FromJavaMember for Option U> { impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -164,8 +164,8 @@ impl FromJavaMember for Option FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -181,8 +181,8 @@ impl FromJavaMember for Option FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -200,8 +200,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -219,8 +219,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -238,8 +238,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -257,8 +257,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -276,8 +276,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -295,8 +295,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env @@ -314,8 +314,8 @@ impl FromJavaMember for Option U> { fn from_java_member( - env: &mut JNIEnv, - object: &JObject, + env: JNIEnv, + object: JObject, name: &str, ) -> Option U> { let field_value = env diff --git a/native/chromium_swt/Cargo.toml b/native/chromium_swt/Cargo.toml index 143374a..e3b609c 100644 --- a/native/chromium_swt/Cargo.toml +++ b/native/chromium_swt/Cargo.toml @@ -10,7 +10,7 @@ crate-type = ["rlib"] path = "src/lib.rs" [dependencies] -jni = "0.21.1" +jni = "0.19.0" chromium = { path = "../chromium/" } chromium_subp = { path = "../chromium_subp/" } chromium_jni_macro = { path = "../chromium_jni_macro/" } diff --git a/native/chromium_swt/src/cef_cookie.rs b/native/chromium_swt/src/cef_cookie.rs index a2332f5..69b815e 100644 --- a/native/chromium_swt/src/cef_cookie.rs +++ b/native/chromium_swt/src/cef_cookie.rs @@ -20,7 +20,10 @@ pub extern "C" fn Java_org_eclipse_set_browser_lib_cefswt_1cookie_1visitor_1t_ce cookie: *mut chromium::cef::_cef_cookie_t, ) -> jstring { let value = unsafe { CStr::from_ptr(cefswt_cookie_value(cookie)) }; - return env.new_string(value.to_str().unwrap()).unwrap().into_raw(); + return env + .new_string(value.to_str().unwrap()) + .unwrap() + .into_inner(); } #[no_mangle] @@ -30,7 +33,10 @@ pub extern "C" fn Java_org_eclipse_set_browser_lib_cefswt_1cookie_1visitor_1t_ce cookie: *mut chromium::cef::_cef_cookie_t, ) -> jstring { let value = unsafe { CStr::from_ptr(cefswt_cookie_to_java(cookie)) }; - return env.new_string(value.to_str().unwrap()).unwrap().into_raw(); + return env + .new_string(value.to_str().unwrap()) + .unwrap() + .into_inner(); } fn cefswt_cookie_to_java(cookie: *mut chromium::cef::_cef_cookie_t) -> *mut c_char { diff --git a/native/chromium_swt/src/cef_download_item.rs b/native/chromium_swt/src/cef_download_item.rs index a20edfe..6c4514d 100644 --- a/native/chromium_swt/src/cef_download_item.rs +++ b/native/chromium_swt/src/cef_download_item.rs @@ -24,12 +24,15 @@ pub unsafe extern "C" fn get_full_path( let path = (*item).get_full_path.unwrap()(item); let value = CStr::from_ptr(crate::cefswt_cefstring_to_java(path)); - return env.new_string(value.to_str().unwrap()).unwrap().into_raw(); + return env + .new_string(value.to_str().unwrap()) + .unwrap() + .into_inner(); } #[jni_name("org.eclipse.set.browser.lib.cef_download_item_t")] pub unsafe extern "C" fn is_cancelled( - mut _env: JNIEnv, + _env: JNIEnv, _class: JClass, item: *mut chromium::cef::_cef_download_item_t, ) -> jboolean { @@ -38,7 +41,7 @@ pub unsafe extern "C" fn is_cancelled( #[jni_name("org.eclipse.set.browser.lib.cef_download_item_t")] pub unsafe extern "C" fn is_complete( - mut _env: JNIEnv, + _env: JNIEnv, _class: JClass, item: *mut chromium::cef::_cef_download_item_t, ) -> jboolean { @@ -53,25 +56,27 @@ pub unsafe extern "C" fn get_url( ) -> jstring { let url = (*item).get_url.unwrap()(item); let value = CStr::from_ptr(crate::cefswt_cefstring_to_java(url)); - return env.new_string(value.to_str().unwrap()).unwrap().into_raw(); + return env + .new_string(value.to_str().unwrap()) + .unwrap() + .into_inner(); } #[jni_name("org.eclipse.set.browser.lib.cef_download_item_t")] pub unsafe extern "C" fn before_download_callback( - mut _env: JNIEnv, + _env: JNIEnv, _class: JClass, callback: *mut chromium::cef::_cef_before_download_callback_t, jpath: JString, ) { - let rpath = _env.get_string_unchecked(&jpath); + let rpath = _env + .get_string_utf_chars(jpath) + .unwrap_or(std::ptr::null_mut()); - let strs = match rpath { - Ok(value) => value.into_raw(), - Err(_e) => std::ptr::null_mut(), - }; - - let path = chromium::utils::cef_string_from_c(strs); + let path = chromium::utils::cef_string_from_c(rpath); (*callback).cont.unwrap()(callback, &path, 0); + + _env.release_string_utf_chars(jpath, rpath).unwrap(); } #[jni_wrapper("org.eclipse.set.browser.lib.cef_download_item_t")] diff --git a/native/chromium_swt/src/lib.rs b/native/chromium_swt/src/lib.rs index 09910e3..ca7c2c7 100644 --- a/native/chromium_swt/src/lib.rs +++ b/native/chromium_swt/src/lib.rs @@ -14,7 +14,6 @@ extern crate chromium; use chromium::cef; use chromium_jni_macro::{jni_name, jni_wrapper}; -use jni::objects::JString; mod app; pub mod cef_browser; @@ -308,16 +307,19 @@ pub fn cefswt_set_intptr(ptr: *mut ::std::os::raw::c_int, value: c_int) { #[jni_name("org.eclipse.set.browser.lib.ChromiumLib")] #[no_mangle] -pub extern "C" fn cefswt_cstring_to_java<'local>( - mut _env: jni::JNIEnv<'local>, +#[allow(clippy::not_unsafe_ptr_arg_deref)] +pub extern "C" fn cefswt_cstring_to_java( + _env: jni::JNIEnv, _class: jni::objects::JClass, string: *const c_char, -) -> JString<'local> { +) -> jni::sys::jstring { if string.is_null() { - return jni::objects::JObject::null().into(); + return std::ptr::null_mut(); } let string = unsafe { CStr::from_ptr(string) }; - _env.new_string(string.to_str().unwrap()).unwrap() + _env.new_string(string.to_str().unwrap()) + .unwrap() + .into_inner() } #[jni_wrapper("org.eclipse.set.browser.lib.ChromiumLib")]