jvmti_rs/wrapper/objects/
jevent_callbacks.rs

1use crate::sys::jvmtiEventCallbacks;
2use std::marker::PhantomData;
3use jni_sys::jint;
4use std::mem::size_of;
5use crate::*;
6
7#[repr(transparent)]
8#[derive(Clone, Copy, Debug)]
9pub struct JEventCallbacks<'a> {
10    internal: jvmtiEventCallbacks,
11    lifetime: PhantomData<&'a ()>,
12}
13
14impl<'a> JEventCallbacks<'a> {
15    pub fn new() -> Self {
16        JEventCallbacks {
17            internal: jvmtiEventCallbacks {
18                VMInit: None,
19                VMDeath: None,
20                ThreadStart: None,
21                ThreadEnd: None,
22                ClassFileLoadHook: None,
23                ClassLoad: None,
24                ClassPrepare: None,
25                VMStart: None,
26                Exception: None,
27                ExceptionCatch: None,
28                SingleStep: None,
29                FramePop: None,
30                Breakpoint: None,
31                FieldAccess: None,
32                FieldModification: None,
33                MethodEntry: None,
34                MethodExit: None,
35                NativeMethodBind: None,
36                CompiledMethodLoad: None,
37                CompiledMethodUnload: None,
38                DynamicCodeGenerated: None,
39                DataDumpRequest: None,
40                reserved72: None,
41                MonitorWait: None,
42                MonitorWaited: None,
43                MonitorContendedEnter: None,
44                MonitorContendedEntered: None,
45                reserved77: None,
46                reserved78: None,
47                reserved79: None,
48                ResourceExhausted: None,
49                GarbageCollectionStart: None,
50                GarbageCollectionFinish: None,
51                ObjectFree: None,
52                VMObjectAlloc: None,
53            },
54            lifetime: PhantomData,
55        }
56    }
57
58    pub fn size_of_callbacks() -> jint {
59        size_of::<jvmtiEventCallbacks>() as jint
60    }
61
62    pub fn vm_init_enabled(&mut self) {
63        self.internal.VMInit = Some(jvmti_event_vm_init_handler)
64    }
65
66    pub fn vm_death_enabled(&mut self) {
67        self.internal.VMDeath = Some(jvmti_event_vm_death_handler)
68    }
69
70    pub fn thread_start_enabled(&mut self) {
71        self.internal.ThreadStart = Some(jvmti_event_thread_start_handler)
72    }
73
74    pub fn thread_end_enabled(&mut self) {
75        self.internal.ThreadEnd = Some(jvmti_event_thread_end_handler)
76    }
77
78    pub fn class_file_load_hook_enabled(&mut self) {
79        self.internal.ClassFileLoadHook = Some(jvmti_event_class_file_load_hook_handler)
80    }
81
82    pub fn class_load_enabled(&mut self) {
83        self.internal.ClassLoad = Some(jvmti_event_class_load_handler)
84    }
85
86    pub fn class_prepare_enabled(&mut self) {
87        self.internal.ClassPrepare = Some(jvmti_event_class_prepare_handler)
88    }
89
90    pub fn vm_start_enabled(&mut self) {
91        self.internal.VMStart = Some(jvmti_event_vm_start_handler)
92    }
93
94    pub fn exception_enabled(&mut self) {
95        self.internal.Exception = Some(jvmti_event_exception_handler)
96    }
97
98    pub fn exception_catch_enabled(&mut self) {
99        self.internal.ExceptionCatch = Some(jvmti_event_exception_catch_handler)
100    }
101
102    pub fn single_step_enabled(&mut self) {
103        self.internal.SingleStep = Some(jvmti_event_single_step_handler)
104    }
105
106    pub fn frame_pop_enabled(&mut self) {
107        self.internal.FramePop = Some(jvmti_event_frame_pop_handler)
108    }
109
110    pub fn breakpoint_enabled(&mut self) {
111        self.internal.Breakpoint = Some(jvmti_event_breakpoint_handler)
112    }
113
114    pub fn field_access_enabled(&mut self) {
115        self.internal.FieldAccess = Some(jvmti_event_field_access_handler)
116    }
117
118    pub fn field_modification_enabled(&mut self) {
119        self.internal.FieldModification = Some(jvmti_event_field_modification_handler)
120    }
121
122    pub fn method_entry_enabled(&mut self) {
123        self.internal.MethodEntry = Some(jvmti_event_method_entry_handler)
124    }
125
126    pub fn method_exit_enabled(&mut self) {
127        self.internal.MethodExit = Some(jvmti_event_method_exit_handler)
128    }
129
130    pub fn native_method_bind_enabled(&mut self) {
131        self.internal.NativeMethodBind = Some(jvmti_event_native_method_bind_handler)
132    }
133
134    pub fn compiled_method_load_enabled(&mut self) {
135        self.internal.CompiledMethodLoad = Some(jvmti_event_compiled_method_load_handler)
136    }
137
138    pub fn compiled_method_unload_enabled(&mut self) {
139        self.internal.CompiledMethodUnload = Some(jvmti_event_compiled_method_unload_handler)
140    }
141
142    pub fn dynamic_code_generated_enabled(&mut self) {
143        self.internal.DynamicCodeGenerated = Some(jvmti_event_dynamic_code_generated_handler)
144    }
145
146    pub fn data_dump_request_enabled(&mut self) {
147        self.internal.DataDumpRequest = Some(jvmti_event_data_dump_request_handler)
148    }
149
150    pub fn monitor_wait_enabled(&mut self) {
151        self.internal.MonitorWait = Some(jvmti_event_monitor_wait_handler)
152    }
153
154    pub fn monitor_waited_enabled(&mut self) {
155        self.internal.MonitorWaited = Some(jvmti_event_monitor_waited_handler)
156    }
157
158    pub fn monitor_contended_enter_enabled(&mut self) {
159        self.internal.MonitorContendedEnter = Some(jvmti_event_monitor_contended_enter_handler)
160    }
161
162    pub fn monitor_contended_entered_enabled(&mut self) {
163        self.internal.MonitorContendedEntered = Some(jvmti_event_monitor_contended_entered_handler)
164    }
165
166    pub fn resource_exhausted_enabled(&mut self) {
167        self.internal.ResourceExhausted = Some(jvmti_event_resource_exhausted_handler)
168    }
169
170    pub fn garbage_collection_start_enabled(&mut self) {
171        self.internal.GarbageCollectionStart = Some(jvmti_event_garbage_collection_start_handler)
172    }
173
174    pub fn garbage_collection_finish_enabled(&mut self) {
175        self.internal.GarbageCollectionFinish = Some(jvmti_event_garbage_collection_finish_handler)
176    }
177
178    pub fn object_free_enabled(&mut self) {
179        self.internal.ObjectFree = Some(jvmti_event_object_free_handler)
180    }
181
182    pub fn vm_object_alloc_enabled(&mut self) {
183        self.internal.VMObjectAlloc = Some(jvmti_event_vm_object_alloc_handler)
184    }
185}
186
187impl<'a> From<JEventCallbacks<'a>> for jvmtiEventCallbacks {
188    fn from(callbacks: JEventCallbacks<'a>) -> Self {
189        callbacks.internal
190    }
191}
192