jvmti_rs/wrapper/
errors.rs

1#![allow(missing_docs)]
2
3use error_chain::*;
4
5use crate::sys;
6use crate::sys::jvmtiError;
7use crate::JvmtiError;
8
9// see https://github.com/jni-rs/jni-rs/blob/master/src/wrapper/errors.rs
10error_chain! {
11    foreign_links {
12    }
13
14    errors {
15        JNILookupError(err : jni::errors::Error){
16            description("JNI Lookup something wrong")
17            display("JNI Lookup something wrong {:?}", err)
18        }
19        JVMTIEnvMethodNotFound(name: &'static str) {
20            description("Method pointer null in JVMTIEnv")
21            display("JVMTIEnv null method pointer for {}", name)
22        }
23        NullPtr(context: &'static str) {
24            description("null pointer")
25            display("null pointer in {}", context)
26        }
27        JavaVMMethodNotFound(name: &'static str) {
28            description("Method pointer null in JavaVM")
29            display("JavaVM null method pointer for {}", name)
30        }
31        NullDeref(context: &'static str) {
32            description("null pointer deref")
33            display("null pointer deref in {}", context)
34        }
35        KnowJvmtiError(error: JvmtiError) {
36            description("JVMTI know error")
37            display("{}", error)
38        }
39        Other(error: sys::jvmtiError) {
40            description("JVMTI unknown error")
41            display("jvmtiError => {}", error)
42        }
43    }
44}
45
46unsafe impl Sync for Error {}
47
48pub fn jni_lookup_error(err: jni::errors::Error) -> Error {
49    Error::from(ErrorKind::JNILookupError(err))
50}
51
52pub fn jvmti_error_code_to_result(code: sys::jvmtiError) -> Result<()> {
53    match code {
54        sys::JVMTI_ERROR_NONE => Ok(()),
55        code if KNOW_JVMTI_ERROR.contains(&code) => Err(Error::from(ErrorKind::KnowJvmtiError(JvmtiError::from(code)))),
56        _ => Err(Error::from(ErrorKind::Other(code))),
57    }
58}
59
60lazy_static! {
61    static ref KNOW_JVMTI_ERROR: Vec<jvmtiError> = {
62        return vec![
63            sys::JVMTI_ERROR_INVALID_THREAD,
64            sys::JVMTI_ERROR_INVALID_THREAD_GROUP,
65            sys::JVMTI_ERROR_INVALID_PRIORITY,
66            sys::JVMTI_ERROR_THREAD_NOT_SUSPENDED,
67            sys::JVMTI_ERROR_THREAD_SUSPENDED,
68            sys::JVMTI_ERROR_THREAD_NOT_ALIVE,
69            sys::JVMTI_ERROR_INVALID_OBJECT,
70            sys::JVMTI_ERROR_INVALID_CLASS,
71            sys::JVMTI_ERROR_CLASS_NOT_PREPARED,
72            sys::JVMTI_ERROR_INVALID_METHODID,
73            sys::JVMTI_ERROR_INVALID_LOCATION,
74            sys::JVMTI_ERROR_INVALID_FIELDID,
75            sys::JVMTI_ERROR_NO_MORE_FRAMES,
76            sys::JVMTI_ERROR_OPAQUE_FRAME,
77            sys::JVMTI_ERROR_TYPE_MISMATCH,
78            sys::JVMTI_ERROR_INVALID_SLOT,
79            sys::JVMTI_ERROR_DUPLICATE,
80            sys::JVMTI_ERROR_NOT_FOUND,
81            sys::JVMTI_ERROR_INVALID_MONITOR,
82            sys::JVMTI_ERROR_NOT_MONITOR_OWNER,
83            sys::JVMTI_ERROR_INTERRUPT,
84            sys::JVMTI_ERROR_INVALID_CLASS_FORMAT,
85            sys::JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION,
86            sys::JVMTI_ERROR_FAILS_VERIFICATION,
87            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED,
88            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED,
89            sys::JVMTI_ERROR_INVALID_TYPESTATE,
90            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED,
91            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED,
92            sys::JVMTI_ERROR_UNSUPPORTED_VERSION,
93            sys::JVMTI_ERROR_NAMES_DONT_MATCH,
94            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED,
95            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED,
96            sys::JVMTI_ERROR_UNMODIFIABLE_CLASS,
97            sys::JVMTI_ERROR_NOT_AVAILABLE,
98            sys::JVMTI_ERROR_MUST_POSSESS_CAPABILITY,
99            sys::JVMTI_ERROR_NULL_POINTER,
100            sys::JVMTI_ERROR_ABSENT_INFORMATION,
101            sys::JVMTI_ERROR_INVALID_EVENT_TYPE,
102            sys::JVMTI_ERROR_ILLEGAL_ARGUMENT,
103            sys::JVMTI_ERROR_NATIVE_METHOD,
104            sys::JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED,
105            sys::JVMTI_ERROR_OUT_OF_MEMORY,
106            sys::JVMTI_ERROR_ACCESS_DENIED,
107            sys::JVMTI_ERROR_WRONG_PHASE,
108            sys::JVMTI_ERROR_INTERNAL,
109            sys::JVMTI_ERROR_UNATTACHED_THREAD,
110            sys::JVMTI_ERROR_INVALID_ENVIRONMENT,
111        ];
112    };
113}