jvmti_rs/wrapper/objects/
jclass_definition.rs

1use crate::{sys::*, objects::*, JVMTIEnv};
2
3#[derive(Clone)]
4pub struct JClassDefinition<'a> {
5    pub klass: JClass<'a>,
6    pub class_bytes: JMemoryAllocate<'a>,
7}
8
9impl<'a> JClassDefinition<'a> {
10    pub fn new<'b: 'a>(klass: JClass<'a>, code_bytes: jmemory,
11                       size: jlong,
12                       env: &'b JVMTIEnv<'a>) -> JClassDefinition<'a> {
13        let class_bytes = JMemoryAllocate::new(code_bytes, size, env);
14        JClassDefinition {
15            klass,
16            class_bytes,
17        }
18    }
19}
20
21impl<'a> From<&JClassDefinition<'a>> for jvmtiClassDefinition {
22    fn from(definition: &JClassDefinition<'a>) -> Self {
23        jvmtiClassDefinition {
24            klass: definition.klass.into_inner(),
25            class_byte_count: definition.class_bytes.size as jint,
26            class_bytes: definition.class_bytes.ptr,
27        }
28    }
29}
30
31impl<'a> Drop for JClassDefinition<'a> {
32    fn drop(&mut self) {
33        let bytes = &mut self.class_bytes;
34        bytes.deallocate()
35    }
36}