jvmti_rs/wrapper/
jvmtienv.rs1use 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}