jvmti_rs/wrapper/jvmtifns/
field_instance.rs

1use 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}