jvmti_rs/wrapper/jvmtifns/
watched_field.rs1use jni::strings::JNIString;
2use jni_sys::jfieldID;
3
4use crate::{AdapterTransform, errors::*, JVMTIEnv, objects::*, Transform};
5
6impl<'a> JVMTIEnv<'a> {
7 pub fn set_field_access_watch<K, F>(&self, jni: &jni::JNIEnv<'a>, class: K, field: F) -> Result<()>
8 where
9 K: Transform<'a, JClass<'a>>,
10 F: AdapterTransform<jfieldID> {
11 let klass: JClass = class.transform(jni)?;
12
13 jvmti_call!(self.jvmti_raw(), SetFieldAccessWatch,
14 klass.into_inner(),
15 field.transform()
16 )
17 }
18
19 pub fn clear_field_access_watch<K, F>(&self, jni: &jni::JNIEnv<'a>, class: K, field: F) -> Result<()>
20 where
21 K: Transform<'a, JClass<'a>>,
22 F: AdapterTransform<jfieldID> {
23 let klass: JClass = class.transform(jni)?;
24
25 jvmti_call!(self.jvmti_raw(), ClearFieldAccessWatch,
26 klass.into_inner(),
27 field.transform()
28 )
29 }
30
31 pub fn set_field_modification_watch<K, F>(&self, jni: &jni::JNIEnv<'a>, class: K, field: F) -> Result<()>
32 where
33 K: Transform<'a, JClass<'a>>,
34 F: AdapterTransform<jfieldID> {
35 let klass: JClass = class.transform(jni)?;
36
37 jvmti_call!(self.jvmti_raw(), SetFieldModificationWatch,
38 klass.into_inner(),
39 field.transform()
40 )
41 }
42
43 pub fn clear_field_modification_watch<K, F>(&self, jni: &jni::JNIEnv<'a>, class: K, field: F) -> Result<()>
44 where
45 K: Transform<'a, JClass<'a>>,
46 F: AdapterTransform<jfieldID> {
47 let klass: JClass = class.transform(jni)?;
48
49 jvmti_call!(self.jvmti_raw(), ClearFieldModificationWatch,
50 klass.into_inner(),
51 field.transform()
52 )
53 }
54
55 pub fn set_field_access_watch_s<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<()>
56 where
57 K: Into<JNIString>,
58 F: Into<JNIString>,
59 V: Into<JNIString> {
60 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
61
62 jvmti_call!(self.jvmti_raw(), SetFieldAccessWatch,
63 klass.into_inner(),
64 field.into_inner()
65 )
66 }
67
68 pub fn clear_field_access_watch_s<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<()>
69 where
70 K: Into<JNIString>,
71 F: Into<JNIString>,
72 V: Into<JNIString> {
73 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
74
75 jvmti_call!(self.jvmti_raw(), ClearFieldAccessWatch,
76 klass.into_inner(),
77 field.into_inner()
78 )
79 }
80
81 pub fn set_field_modification_watch_s<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<()>
82 where
83 K: Into<JNIString>,
84 F: Into<JNIString>,
85 V: Into<JNIString> {
86 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
87
88 jvmti_call!(self.jvmti_raw(), SetFieldModificationWatch,
89 klass.into_inner(),
90 field.into_inner()
91 )
92 }
93
94 pub fn clear_field_modification_watch_s<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<()>
95 where
96 K: Into<JNIString>,
97 F: Into<JNIString>,
98 V: Into<JNIString> {
99 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
100
101 jvmti_call!(self.jvmti_raw(), ClearFieldModificationWatch,
102 klass.into_inner(),
103 field.into_inner()
104 )
105 }
106}