1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
use swim_jvm_sys::jobject; use crate::object::JObject; use crate::env::JEnv; use crate::convert::IntoJava; pub struct JGlobalRef { env: JEnv, gref: jobject, } unsafe impl Send for JGlobalRef {} unsafe impl Sync for JGlobalRef {} impl JGlobalRef { #[inline] pub unsafe fn new(env: &JEnv, gref: jobject) -> Self { Self { env: env.clone(), gref: gref, } } } impl Drop for JGlobalRef { #[inline] fn drop(&mut self) { unsafe { self.env.delete_global_ref(self.gref) }; } } impl Into<JObject> for JGlobalRef { #[inline] fn into(self) -> JObject { self.gref.into_java(&self.env) } } impl Into<jobject> for JGlobalRef { #[inline] fn into(self) -> jobject { self.gref } } pub struct JLocalRef { env: JEnv, lref: jobject, } impl JLocalRef { #[inline] pub unsafe fn new(env: &JEnv, lref: jobject) -> Self { Self { env: env.clone(), lref: lref, } } } impl Drop for JLocalRef { #[inline] fn drop(&mut self) { unsafe { self.env.delete_local_ref(self.lref) }; } } impl Into<JObject> for JLocalRef { #[inline] fn into(self) -> JObject { self.lref.into_java(&self.env) } } impl Into<jobject> for JLocalRef { #[inline] fn into(self) -> jobject { self.lref } }