Skip to content

Commit b007ae9

Browse files
committed
Revert "Revert "Bump jni from 0.19.0 to 0.21.1 in /native (#26)" (#130)"
This reverts commit 0fdc27c.
1 parent 9702c6e commit b007ae9

File tree

12 files changed

+115
-113
lines changed

12 files changed

+115
-113
lines changed

native/chromium/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,5 @@ fn generator(cef_path: std::path::Display) -> bindgen::Builder {
193193
.raw_line("use jni::objects::GlobalRef;")
194194
.raw_line("use jni::objects::JObject;")
195195
.raw_line("use chromium_jni_utils::jni_unwrap;")
196+
.raw_line("use std::ops::DerefMut;")
196197
}

native/chromium/src/cef/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::ToJava;
1616
use jni::objects::GlobalRef;
1717
use jni::objects::JObject;
1818
use chromium_jni_utils::jni_unwrap;
19+
use std::ops::DerefMut;
1920
pub mod win;
2021
pub use self::win::_cef_window_info_t;
2122
pub use self::win::_cef_main_args_t;

native/chromium/src/cef/win.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::ToJava;
1616
use jni::objects::GlobalRef;
1717
use jni::objects::JObject;
1818
use chromium_jni_utils::jni_unwrap;
19+
use std::ops::DerefMut;
1920
use crate::cef::cef_string_t;
2021

2122
pub type DWORD = ::std::os::raw::c_ulong;

native/chromium/src/lib.rs

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ use jni::objects::JValue;
1616
use jni::JNIEnv;
1717

1818
impl FromJavaMember for cef::cef_base_ref_counted_t {
19-
fn from_java_member(env: JNIEnv, object: JObject, name: &str) -> cef::cef_base_ref_counted_t {
19+
fn from_java_member(
20+
env: &mut JNIEnv,
21+
object: &JObject,
22+
name: &str,
23+
) -> cef::cef_base_ref_counted_t {
2024
let obj = env
2125
.get_field(
2226
object,
@@ -26,114 +30,114 @@ impl FromJavaMember for cef::cef_base_ref_counted_t {
2630
.unwrap()
2731
.l()
2832
.unwrap();
29-
FromJava::from_java(env, obj)
33+
FromJava::from_java(env, &obj)
3034
}
3135
}
3236

3337
/// Allows constructing an object from a Java object
3438
pub trait ToJava<'a> {
3539
/// Constructs `Self` from the JNI object `object`
36-
fn to_java(_env: JNIEnv<'a>, value: Self) -> JValue<'a>;
40+
fn to_java(_env: &JNIEnv<'a>, value: Self) -> JValue<'a, 'a>;
3741
}
3842

3943
impl<'a, T> ToJava<'a> for *mut T {
40-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
44+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
4145
JValue::Long(value as i64)
4246
}
4347
}
4448
impl<'a, T> ToJava<'a> for *const T {
45-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
49+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
4650
JValue::Long(value as i64)
4751
}
4852
}
4953

5054
impl<'a> ToJava<'a> for i32 {
51-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
55+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
5256
JValue::Int(value)
5357
}
5458
}
5559

5660
impl<'a> ToJava<'a> for usize {
57-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
61+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
5862
JValue::Long(value.try_into().unwrap())
5963
}
6064
}
6165
impl<'a> ToJava<'a> for i64 {
62-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
66+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
6367
JValue::Long(value)
6468
}
6569
}
6670
impl<'a> ToJava<'a> for f64 {
67-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
71+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
6872
JValue::Double(value)
6973
}
7074
}
7175

7276
impl<'a> ToJava<'a> for cef::cef_process_id_t {
73-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
77+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
7478
JValue::Int(unsafe { std::mem::transmute(value) })
7579
}
7680
}
7781
impl<'a> ToJava<'a> for cef::cef_cursor_type_t {
78-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
82+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
7983
JValue::Int(unsafe { std::mem::transmute(value) })
8084
}
8185
}
8286
impl<'a> ToJava<'a> for cef::cef_errorcode_t {
83-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
87+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
8488
JValue::Int(unsafe { std::mem::transmute(value) })
8589
}
8690
}
8791
impl<'a> ToJava<'a> for cef::cef_transition_type_t {
88-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
92+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
8993
JValue::Int(unsafe { std::mem::transmute(value) })
9094
}
9195
}
9296

9397
impl<'a> ToJava<'a> for cef::cef_window_open_disposition_t {
94-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
98+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
9599
JValue::Int(unsafe { std::mem::transmute(value) })
96100
}
97101
}
98102

99103
impl<'a> ToJava<'a> for cef::cef_log_severity_t {
100-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
104+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
101105
JValue::Int(unsafe { std::mem::transmute(value) })
102106
}
103107
}
104108

105109
impl<'a> ToJava<'a> for cef::cef_event_flags_t {
106-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
110+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
107111
JValue::Int(unsafe { std::mem::transmute(value) })
108112
}
109113
}
110114

111115
impl<'a> ToJava<'a> for cef::cef_termination_status_t {
112-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
116+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
113117
JValue::Int(unsafe { std::mem::transmute(value) })
114118
}
115119
}
116120

117121
impl<'a> ToJava<'a> for cef::cef_focus_source_t {
118-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
122+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
119123
JValue::Int(unsafe { std::mem::transmute(value) })
120124
}
121125
}
122126

123127
impl<'a> ToJava<'a> for cef::cef_jsdialog_type_t {
124-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
128+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
125129
JValue::Int(unsafe { std::mem::transmute(value) })
126130
}
127131
}
128132

129133
impl<'a> ToJava<'a> for cef::cef_quick_menu_edit_state_flags_t {
130-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
134+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
131135
JValue::Int(unsafe { std::mem::transmute(value) })
132136
}
133137
}
134138

135139
impl<'a> ToJava<'a> for cef::cef_preferences_type_t {
136-
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
140+
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
137141
JValue::Int(unsafe { std::mem::transmute(value) })
138142
}
139143
}

native/chromium_jni/src/allocate.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ use jni::JNIEnv;
1919
macro_rules! jni_allocate {
2020
($name:tt, $type:ty) => {
2121
#[jni_name($name, $type)]
22-
pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: JObject) -> jlong {
23-
let object: JNIWrapperType<$type> =
24-
JNICEFCallback::jni_allocate(env, env.new_global_ref(object).unwrap());
22+
pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: &JObject) -> jlong {
23+
let global_ref = env.new_global_ref(object).unwrap();
24+
let object: JNIWrapperType<$type> = JNICEFCallback::jni_allocate(env, global_ref);
2525
return Box::into_raw(Box::new(object)) as jlong;
2626
}
2727
};
@@ -32,7 +32,7 @@ macro_rules! jni_deallocate {
3232
($name:tt, $type:ty) => {
3333
#[jni_name($name, $type)]
3434
pub extern "C" fn deallocate(
35-
_env: JNIEnv,
35+
mut _env: JNIEnv,
3636
_class: JClass,
3737
object: *mut chromium::cef::_cef_display_handler_t,
3838
) {

native/chromium_jni/src/swt_wrapper.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ use jni::JNIEnv;
1212

1313
#[no_mangle]
1414
pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_eclipse_set_browser_lib_cef_1popup_1features_1t_2J(
15-
env: JNIEnv,
15+
mut env: JNIEnv,
1616
_class: JClass,
17-
destination: JObject,
17+
destination: &JObject,
1818
source: *mut chromium::cef::_cef_popup_features_t,
1919
) {
2020
let source_object = unsafe { *source };
@@ -53,10 +53,10 @@ pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_ecl
5353

5454
#[no_mangle]
5555
pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_cefswt_1function_1id(
56-
_env: JNIEnv,
56+
mut _env: JNIEnv,
5757
_class: JClass,
5858
arg0: jlong,
59-
arg1: JObject,
59+
arg1: &JObject,
6060
) {
6161
// IMPROVE: Avoid creating this object here
6262
let mut func_st = chromium_swt::FunctionSt {

native/chromium_jni_macro/src/derive_from_java_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub fn derive_from_java_impl(tokens: TokenStream) -> TokenStream {
3838

3939
let modified = quote! {
4040
impl FromJava for #name {
41-
fn from_java(env: JNIEnv, object: JObject) -> #name {
41+
fn from_java(env: &mut JNIEnv, object: &JObject) -> #name {
4242
return #name {
4343
#(#query_parts, )*
4444
};

native/chromium_jni_macro/src/jni_allocate.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ pub fn jni_allocate(tokens: TokenStream) -> TokenStream {
5151

5252
let modified = quote! {
5353
impl JNICEFCallback for #name {
54-
fn jni_allocate(env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> {
55-
let class = env.get_object_class(object.as_obj()).unwrap();
54+
fn jni_allocate(mut env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> {
55+
let class = &env.get_object_class(object.as_obj()).unwrap();
5656

5757
#(#jni_callbacks)*
5858

@@ -92,7 +92,7 @@ fn build_initialization(
9292
let signature = jni_signature(field);
9393

9494
quote! { #field_ident: match env.get_method_id(class, stringify!(#field_ident), #signature) {
95-
Err(e) => {
95+
Err(_e) => {
9696
// Attempting to get the method id of a method that does not exists results
9797
// in a NoSuchMethodException. As we do not want to throw this, clear the exception
9898
env.exception_clear().unwrap();
@@ -140,18 +140,17 @@ fn build_jni_callback(
140140

141141
let retline = match result {
142142
None => quote! {},
143-
Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(env, result); }
143+
Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(&env, result); }
144144
};
145-
146145
let func_ident = syn::Ident::new(&format!("jni_{}", field_ident), Span::call_site());
147146

148147
let signature = jni_signature(field);
149148
quote! {
150149
/// C-Callback which calls the Java function via JNI
151150
unsafe extern "C" fn #func_ident(#args) #result_tag {
152151
let wrapper = jni_unwrap(self_);
153-
let guard = (*wrapper).jvm.attach_current_thread().unwrap();
154-
let env: JNIEnv = *guard;
152+
let mut guard = (*wrapper).jvm.attach_current_thread().unwrap();
153+
let env: &mut JNIEnv = guard.deref_mut();
155154
let result = env.call_method((*wrapper).this.as_obj(), stringify!(#field_ident), #signature, &[#(#argnames, )*]).expect(stringify!(#func_ident));
156155
#retline
157156
};

native/chromium_jni_macro/src/jni_wrap_impl.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pub fn jni_wrap_attr_impl(attr: TokenStream, item: TokenStream) -> TokenStream {
5656
);
5757
let q = quote! {
5858
#[no_mangle]
59-
pub extern fn #fname(_env: jni::JNIEnv, _class: jni::objects::JClass, #(#func_args, )*) #ret_expr {
59+
pub unsafe extern fn #fname(mut _env: jni::JNIEnv, _class: jni::objects::JClass, #(#func_args, )*) #ret_expr {
6060
#(#param_prepare; )*
6161
#call_expr
6262
#(#param_cleanup; )*
@@ -88,7 +88,7 @@ fn setup_argument(
8888
};
8989
let arg = Ident::new(&format!("arg{}", index), Span::call_site());
9090
let param = Ident::new(&format!("param{}", index), Span::call_site());
91-
let (arg_type, prepare, cleanup) = handle_arg(&arg, &param, ty);
91+
let (arg_type, prepare, cleanup) = handle_arg(&arg, ty);
9292

9393
(
9494
// JNI Function argument: arg[index]: type
@@ -110,11 +110,11 @@ fn handle_return(retn: &Option<String>) -> (proc_macro2::TokenStream, proc_macro
110110
Some(t) => match t.as_str() {
111111
"String" => (
112112
quote! { -> jni::sys::jstring },
113-
quote! { return _env.new_string(result).unwrap().into_inner(); },
113+
quote! { return _env.new_string(result).unwrap().into_raw(); },
114114
),
115115
"CStr" => (
116116
quote! { -> jni::sys::jstring },
117-
quote! { return _env.new_string(result.to_str().unwrap()).unwrap().into_inner(); },
117+
quote! { return _env.new_string(result.to_str().unwrap()).unwrap().into_raw(); },
118118
),
119119
"* mut c_char" | "* const c_char" => (
120120
quote! { -> jni::sys::jstring },
@@ -123,15 +123,15 @@ fn handle_return(retn: &Option<String>) -> (proc_macro2::TokenStream, proc_macro
123123
return std::ptr::null_mut();
124124
}
125125
let result = unsafe { CStr::from_ptr(result) };
126-
return _env.new_string(result.to_str().unwrap()).unwrap().into_inner();
126+
return _env.new_string(result.to_str().unwrap()).unwrap().into_raw();
127127
},
128128
),
129129
"cef :: cef_string_userfree_t" => (
130130
quote! { -> jni::sys::jstring },
131131
quote! {
132132
let str: String = chromium::utils::str_from_cef(result);
133133
unsafe { cef::cef_string_userfree_utf16_free(result) };
134-
return _env.new_string(str).unwrap().into_inner();
134+
return _env.new_string(str).unwrap().into_raw();
135135
},
136136
),
137137
"c_int" | "i32" => (
@@ -157,7 +157,6 @@ fn handle_return(retn: &Option<String>) -> (proc_macro2::TokenStream, proc_macro
157157
/// result is (paramType, mapping, cleanup)
158158
fn handle_arg(
159159
arg: &Ident,
160-
param: &Ident,
161160
ty: &Type,
162161
) -> (
163162
proc_macro2::TokenStream,
@@ -187,20 +186,18 @@ fn handle_arg(
187186
quote! {},
188187
),
189188
"* const c_char" => (
190-
quote! { jni::objects::JString },
191-
quote! { _env.get_string_utf_chars(#arg).unwrap_or(std::ptr::null_mut()) },
192-
quote! { if !#param.is_null() {
193-
_env.release_string_utf_chars(#arg, #param).unwrap()
194-
}},
189+
quote! { &jni::objects::JString },
190+
quote! { _env.get_string_unchecked(#arg).map(|strs| strs.into_raw()).unwrap_or(std::ptr::null_mut()) },
191+
quote! {},
195192
),
196193
"Option < Vec < u8 > >" => (
197-
quote! { jni::sys::jbyteArray },
198-
quote! { _env.convert_byte_array(#arg).map(|arr| Some(arr)).unwrap_or(None) },
194+
quote! { jni::objects::JByteArray },
195+
quote! { _env.convert_byte_array(&#arg).map(|arr| Some(arr)).unwrap_or(None) },
199196
quote! {},
200197
),
201198
"Vec < u8 >" => (
202-
quote! { jni::sys::jbyteArray },
203-
quote! { _env.convert_byte_array(#arg).unwrap() },
199+
quote! { jni::objects::JByteArray },
200+
quote! { _env.convert_byte_array(&#arg).unwrap() },
204201
quote! {},
205202
),
206203
_ => {

0 commit comments

Comments
 (0)