jvmti_rs/wrapper/
errors.rs1#![allow(missing_docs)]
2
3use error_chain::*;
4
5use crate::sys;
6use crate::sys::jvmtiError;
7use crate::JvmtiError;
8
9error_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}