jvmti_rs/wrapper/objects/
jcapabilities.rs1use crate::sys;
2use std::marker::PhantomData;
3
4#[derive(Clone, Copy, Debug)]
5pub struct JCapabilities<'a> {
6 caps: sys::jvmtiCapabilities,
7 lifetime: PhantomData<&'a ()>,
8}
9
10impl<'a> JCapabilities<'a> {
11 pub fn new() -> JCapabilities<'a> {
12 let caps = sys::jvmtiCapabilities {
13 _bitfield_1: sys::jvmtiCapabilities::newEmptyBitfield()
14 };
15 JCapabilities {
16 caps,
17 lifetime: PhantomData,
18 }
19 }
20
21 pub fn merge(other: sys::jvmtiCapabilities) -> JCapabilities<'a> {
22 let mut item = JCapabilities::new();
23
24 if other.can_tag_objects() == 1 { item.can_tag_objects() }
25 if other.can_generate_field_modification_events() == 1 { item.can_generate_field_modification_events() }
26 if other.can_generate_field_access_events() == 1 { item.can_generate_field_access_events() }
27 if other.can_get_bytecodes() == 1 { item.can_get_bytecodes() }
28 if other.can_get_synthetic_attribute() == 1 { item.can_get_synthetic_attribute() }
29 if other.can_get_owned_monitor_info() == 1 { item.can_get_owned_monitor_info() }
30 if other.can_get_current_contended_monitor() == 1 { item.can_get_current_contended_monitor() }
31 if other.can_get_monitor_info() == 1 { item.can_get_monitor_info() }
32 if other.can_pop_frame() == 1 { item.can_pop_frame() }
33 if other.can_redefine_classes() == 1 { item.can_redefine_classes() }
34 if other.can_signal_thread() == 1 { item.can_signal_thread() }
35 if other.can_get_source_file_name() == 1 { item.can_get_source_file_name() }
36 if other.can_get_line_numbers() == 1 { item.can_get_line_numbers() }
37 if other.can_get_source_debug_extension() == 1 { item.can_get_source_debug_extension() }
38 if other.can_access_local_variables() == 1 { item.can_access_local_variables() }
39 if other.can_maintain_original_method_order() == 1 { item.can_maintain_original_method_order() }
40 if other.can_generate_single_step_events() == 1 { item.can_generate_single_step_events() }
41 if other.can_generate_exception_events() == 1 { item.can_generate_exception_events() }
42 if other.can_generate_frame_pop_events() == 1 { item.can_generate_frame_pop_events() }
43 if other.can_generate_breakpoint_events() == 1 { item.can_generate_breakpoint_events() }
44 if other.can_suspend() == 1 { item.can_suspend() }
45 if other.can_redefine_any_class() == 1 { item.can_redefine_any_class() }
46 if other.can_get_current_thread_cpu_time() == 1 { item.can_get_current_thread_cpu_time() }
47 if other.can_get_thread_cpu_time() == 1 { item.can_get_thread_cpu_time() }
48 if other.can_generate_method_entry_events() == 1 { item.can_generate_method_entry_events() }
49 if other.can_generate_method_exit_events() == 1 { item.can_generate_method_exit_events() }
50 if other.can_generate_all_class_hook_events() == 1 { item.can_generate_all_class_hook_events() }
51 if other.can_generate_compiled_method_load_events() == 1 { item.can_generate_compiled_method_load_events() }
52 if other.can_generate_monitor_events() == 1 { item.can_generate_monitor_events() }
53 if other.can_generate_vm_object_alloc_events() == 1 { item.can_generate_vm_object_alloc_events() }
54 if other.can_generate_native_method_bind_events() == 1 { item.can_generate_native_method_bind_events() }
55 if other.can_generate_garbage_collection_events() == 1 { item.can_generate_garbage_collection_events() }
56 if other.can_generate_object_free_events() == 1 { item.can_generate_object_free_events() }
57 if other.can_force_early_return() == 1 { item.can_force_early_return() }
58 if other.can_get_owned_monitor_stack_depth_info() == 1 { item.can_get_owned_monitor_stack_depth_info() }
59 if other.can_get_constant_pool() == 1 { item.can_get_constant_pool() }
60 if other.can_set_native_method_prefix() == 1 { item.can_set_native_method_prefix() }
61 if other.can_retransform_classes() == 1 { item.can_retransform_classes() }
62 if other.can_retransform_any_class() == 1 { item.can_retransform_any_class() }
63 if other.can_generate_resource_exhaustion_heap_events() == 1 { item.can_generate_resource_exhaustion_heap_events() }
64 if other.can_generate_resource_exhaustion_heap_events() == 1 { item.can_generate_resource_exhaustion_threads_events() }
65
66 item
67 }
68
69 pub fn can_tag_objects(&mut self) { self.caps.set_can_tag_objects(1) }
70 pub fn can_generate_field_modification_events(&mut self) { self.caps.set_can_generate_field_modification_events(1) }
71 pub fn can_generate_field_access_events(&mut self) { self.caps.set_can_generate_field_access_events(1) }
72 pub fn can_get_bytecodes(&mut self) { self.caps.set_can_get_bytecodes(1) }
73 pub fn can_get_synthetic_attribute(&mut self) { self.caps.set_can_get_synthetic_attribute(1) }
74 pub fn can_get_owned_monitor_info(&mut self) { self.caps.set_can_get_owned_monitor_info(1) }
75 pub fn can_get_current_contended_monitor(&mut self) { self.caps.set_can_get_current_contended_monitor(1) }
76 pub fn can_get_monitor_info(&mut self) { self.caps.set_can_get_monitor_info(1) }
77 pub fn can_pop_frame(&mut self) { self.caps.set_can_pop_frame(1) }
78 pub fn can_redefine_classes(&mut self) { self.caps.set_can_redefine_classes(1) }
79 pub fn can_signal_thread(&mut self) { self.caps.set_can_signal_thread(1) }
80 pub fn can_get_source_file_name(&mut self) { self.caps.set_can_get_source_file_name(1) }
81 pub fn can_get_line_numbers(&mut self) { self.caps.set_can_get_line_numbers(1) }
82 pub fn can_get_source_debug_extension(&mut self) { self.caps.set_can_get_source_debug_extension(1) }
83 pub fn can_access_local_variables(&mut self) { self.caps.set_can_access_local_variables(1) }
84 pub fn can_maintain_original_method_order(&mut self) { self.caps.set_can_maintain_original_method_order(1) }
85 pub fn can_generate_single_step_events(&mut self) { self.caps.set_can_generate_single_step_events(1) }
86 pub fn can_generate_exception_events(&mut self) { self.caps.set_can_generate_exception_events(1) }
87 pub fn can_generate_frame_pop_events(&mut self) { self.caps.set_can_generate_frame_pop_events(1) }
88 pub fn can_generate_breakpoint_events(&mut self) { self.caps.set_can_generate_breakpoint_events(1) }
89 pub fn can_suspend(&mut self) { self.caps.set_can_suspend(1) }
90 pub fn can_redefine_any_class(&mut self) { self.caps.set_can_redefine_any_class(1) }
91 pub fn can_get_current_thread_cpu_time(&mut self) { self.caps.set_can_get_current_thread_cpu_time(1) }
92 pub fn can_get_thread_cpu_time(&mut self) { self.caps.set_can_get_thread_cpu_time(1) }
93 pub fn can_generate_method_entry_events(&mut self) { self.caps.set_can_generate_method_entry_events(1) }
94 pub fn can_generate_method_exit_events(&mut self) { self.caps.set_can_generate_method_exit_events(1) }
95 pub fn can_generate_all_class_hook_events(&mut self) { self.caps.set_can_generate_all_class_hook_events(1) }
96 pub fn can_generate_compiled_method_load_events(&mut self) { self.caps.set_can_generate_compiled_method_load_events(1) }
97 pub fn can_generate_monitor_events(&mut self) { self.caps.set_can_generate_monitor_events(1) }
98 pub fn can_generate_vm_object_alloc_events(&mut self) { self.caps.set_can_generate_vm_object_alloc_events(1) }
99 pub fn can_generate_native_method_bind_events(&mut self) { self.caps.set_can_generate_native_method_bind_events(1) }
100 pub fn can_generate_garbage_collection_events(&mut self) { self.caps.set_can_generate_garbage_collection_events(1) }
101 pub fn can_generate_object_free_events(&mut self) { self.caps.set_can_generate_object_free_events(1) }
102 pub fn can_force_early_return(&mut self) { self.caps.set_can_force_early_return(1) }
103 pub fn can_get_owned_monitor_stack_depth_info(&mut self) { self.caps.set_can_get_owned_monitor_stack_depth_info(1) }
104 pub fn can_get_constant_pool(&mut self) { self.caps.set_can_get_constant_pool(1) }
105 pub fn can_set_native_method_prefix(&mut self) { self.caps.set_can_set_native_method_prefix(1) }
106 pub fn can_retransform_classes(&mut self) { self.caps.set_can_retransform_classes(1) }
107 pub fn can_retransform_any_class(&mut self) { self.caps.set_can_retransform_any_class(1) }
108 pub fn can_generate_resource_exhaustion_heap_events(&mut self) { self.caps.set_can_generate_resource_exhaustion_heap_events(1) }
109 pub fn can_generate_resource_exhaustion_threads_events(&mut self) { self.caps.set_can_generate_resource_exhaustion_threads_events(1) }
110}
111
112impl<'a> From<JCapabilities<'a>> for sys::jvmtiCapabilities {
113 fn from(value: JCapabilities<'a>) -> Self {
114 value.caps
115 }
116}