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
use std::marker::PhantomData;
use crate::sys::jmethodID;
/// Wrapper around `sys::jmethodid` that adds a lifetime. This prevents it from
/// outliving the context in which it was acquired and getting GC'd out from
/// under us. It matches C's representation of the raw pointer, so it can be
/// used in any of the extern function argument positions that would take a
/// `jmethodid`. This represents static methods only since they require a
/// different set of JNI signatures.
#[repr(transparent)]
#[derive(Copy, Clone)]
pub struct JStaticMethodID<'a> {
internal: jmethodID,
lifetime: PhantomData<&'a ()>,
}
impl<'a> From<jmethodID> for JStaticMethodID<'a> {
fn from(other: jmethodID) -> Self {
JStaticMethodID {
internal: other,
lifetime: PhantomData,
}
}
}
impl<'a> JStaticMethodID<'a> {
/// Unwrap to the internal jni type.
pub fn into_inner(self) -> jmethodID {
self.internal
}
}