jvmti_rs/wrapper/
jvmtienv.rs

1use std::marker::PhantomData;
2use std::os::raw::c_char;
3
4use jni::JNIEnv;
5
6use crate::{errors::*, objects::*};
7use crate::sys;
8
9#[derive(Clone)]
10#[repr(transparent)]
11pub struct JVMTIEnv<'a> {
12    internal: *mut sys::jvmtiEnv,
13    lifetime: PhantomData<&'a ()>,
14}
15
16pub struct JVMTIFacadeEnv<'a> {
17    jvmti: &'a JVMTIEnv<'a>,
18    jni: &'a JNIEnv<'a>,
19}
20
21impl<'a> JVMTIEnv<'a> {
22    pub unsafe fn from_raw(ptr: *mut sys::jvmtiEnv) -> Result<Self> {
23        non_null!(ptr, "from_raw ptr argument");
24        Ok(JVMTIEnv {
25            internal: ptr,
26            lifetime: PhantomData,
27        })
28    }
29
30    pub fn jvmti_raw(&self) -> *mut sys::jvmtiEnv {
31        self.internal
32    }
33
34    pub fn build_string(&self, value: *mut c_char) -> Result<JvmtiString> {
35        Ok(JvmtiString::with_pointer(value, self))
36    }
37
38    pub fn define_class_definition(&self, klass: JClass<'a>, size: sys::jlong, code_bytes: sys::jmemory) -> Result<JClassDefinition> {
39        let definition = JClassDefinition::new(klass, code_bytes, size, self);
40        Ok(definition)
41    }
42}
43
44impl<'a> JVMTIFacadeEnv<'a> {
45    pub fn new<'b: 'a>(jvmti: &'b JVMTIEnv<'a>,
46                       jni: &'b JNIEnv<'a>, ) -> JVMTIFacadeEnv<'a> {
47        JVMTIFacadeEnv {
48            jvmti,
49            jni,
50        }
51    }
52
53    pub fn jvmti_rust(&self) -> &'a JVMTIEnv<'a> {
54        self.jvmti
55    }
56
57    pub fn jni_rust(&self) -> &'a JNIEnv<'a> {
58        self.jni
59    }
60}