jvmti_rs/wrapper/jvmtifns/
field_instance.rs1use std::ptr;
2
3use jni::strings::JNIString;
4
5use crate::{errors::*, JVMTIEnv, objects::*, sys::*, to_bool};
6
7impl<'a> JVMTIEnv<'a> {
8 pub fn get_field_declaring_class_i<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<JObject>
9 where
10 K: Into<JNIString>,
11 F: Into<JNIString>,
12 V: Into<JNIString> {
13 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
14
15 let mut value_ptr: jclass = ptr::null_mut();
16 let res = jvmti_call_result!(self.jvmti_raw(), GetFieldDeclaringClass,
17 klass.into_inner(),
18 field.into_inner(),
19 &mut value_ptr
20 );
21 jvmti_error_code_to_result(res)?;
22 Ok(value_ptr.into())
23 }
24
25 pub fn get_field_modifiers_i<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<jint>
26 where
27 K: Into<JNIString>,
28 F: Into<JNIString>,
29 V: Into<JNIString> {
30 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
31
32 Ok(jvmti_call_number_result!(self.jvmti_raw(), jint,
33 GetFieldModifiers,
34 klass.into_inner(),
35 field.into_inner()
36 ))
37 }
38
39 pub fn is_field_synthetic_i<K, F, V>(&self, jni: &jni::JNIEnv<'a>, class: K, name: F, sig: V) -> Result<bool>
40 where
41 K: Into<JNIString>,
42 F: Into<JNIString>,
43 V: Into<JNIString> {
44 let (klass, field) = self.get_field_id(jni, class, name, sig)?;
45
46 let res = jvmti_call_number_result!(self.jvmti_raw(), jboolean,
47 IsFieldSynthetic,
48 klass.into_inner(),
49 field.into_inner()
50 );
51 Ok(to_bool(res))
52 }
53}