jvmti_rs/wrapper/enums/
error.rs

1use crate::sys;
2use thiserror::Error;
3
4/// see https://github.com/rel-eng/rvmti/blob/master/src/rvmti.rs#L527
5///
6#[derive(Error, Debug)]
7pub enum JvmtiError {
8    #[error("Empty argument")]
9    EmptyArgument,
10    #[error("Invalid thread")]
11    InvalidThread,
12    #[error("Invalid thread group")]
13    InvalidThreadGroup,
14    #[error("Invalid priority")]
15    InvalidPriority,
16    #[error("Thread is not suspended")]
17    ThreadNotSuspended,
18    #[error("Thread is already suspended")]
19    ThreadSuspended,
20    #[error("Thread is not alive")]
21    ThreadNotAlive,
22    #[error("Invalid object")]
23    InvalidObject,
24    #[error("Invalid class")]
25    InvalidClass,
26    #[error("The class is not prepared yet")]
27    ClassNotPrepared,
28    #[error("Invalid method id")]
29    InvalidMethodId,
30    #[error("Invalid location")]
31    InvalidLocation,
32    #[error("Invalid field id")]
33    InvalidFieldId,
34    #[error("There are no more stack frames")]
35    NoMoreFrames,
36    #[error("No information is available about the stack frame")]
37    OpaqueFrame,
38    #[error("Variable type mismatch")]
39    TypeMismatch,
40    #[error("Invalid slot")]
41    InvalidSlot,
42    #[error("The item is already set")]
43    Duplicate,
44    #[error("Element is not found")]
45    NotFound,
46    #[error("Invalid raw monitor")]
47    InvalidMonitor,
48    #[error("The raw monitor is not owned by this thread")]
49    NotMonitorOwner,
50    #[error("The call has been interrupted")]
51    Interrupt,
52    #[error("Malformed class file")]
53    InvalidClassFormat,
54    #[error("Circular class definition")]
55    CircularClassDefinition,
56    #[error("The class fails verification")]
57    FailsVerification,
58    #[error("Class redefinition not possible, method addition is unsupported")]
59    UnsupportedRedefinitionMethodAdded,
60    #[error("Class redefinition not possible, field change is unsupported")]
61    UnsupportedRedefinitionSchemaChanged,
62    #[error("The thread state is inconsistent due to it having been modified")]
63    InvalidTypeState,
64    #[error("Class redefinition not possible, class hierarchy change is unsupported")]
65    UnsupportedRedefinitionHierarchyChanged,
66    #[error("Class redefinition not possible, method deletion is unsupported")]
67    UnsupportedRedefinitionMethodDeleted,
68    #[error("Class file version is unsupported")]
69    UnsupportedVersion,
70    #[error("Class names do not match")]
71    NamesDontMatch,
72    #[error("Class redefinition not possible, class modifiers change is unsupported")]
73    UnsupportedRedefinitionClassModifiersChanged,
74    #[error("Class redefinition not possible, method modifiers change is unsupported")]
75    UnsupportedRedefinitionMethodModifiersChanged,
76    #[error("The class is unmodifiable")]
77    UnmodifiableClass,
78    #[error("The functionality is not available")]
79    NotAvaliable,
80    #[error("This environment does not possess the required capability")]
81    MustPosessCapability,
82    #[error("Unexpected null pointer")]
83    NullPointer,
84    #[error("Information is not available")]
85    AbsentInformation,
86    #[error("Invalid event type")]
87    InvalidEventType,
88    #[error("Illegal argument")]
89    IllegalArgument,
90    #[error("Information is not available for native method")]
91    NativeMethod,
92    #[error("This class loader does not support the requested operation")]
93    ClassLoaderUnsupported,
94    #[error("Out of memory")]
95    OutOfMemory,
96    #[error("Access denied")]
97    AccessDenied,
98    #[error("The functionality is not available in the current phase")]
99    WrongPhase,
100    #[error("Unexpected internal error")]
101    Internal,
102    #[error("The thread is not attached to the virtual machine")]
103    UnattachedThread,
104    #[error("Invalid environment")]
105    InvalidEnvironment,
106    #[error("Unsupported JVMTI error code: {0}")]
107    UnsupportedError(sys::jvmtiError),
108}
109
110impl From<sys::jvmtiError> for JvmtiError {
111    fn from(error: sys::jvmtiError) -> Self {
112        match error {
113            sys::JVMTI_ERROR_INVALID_THREAD => JvmtiError::InvalidThread,
114            sys::JVMTI_ERROR_INVALID_THREAD_GROUP => JvmtiError::InvalidThreadGroup,
115            sys::JVMTI_ERROR_INVALID_PRIORITY => JvmtiError::InvalidPriority,
116            sys::JVMTI_ERROR_THREAD_NOT_SUSPENDED => JvmtiError::ThreadNotSuspended,
117            sys::JVMTI_ERROR_THREAD_SUSPENDED => JvmtiError::ThreadSuspended,
118            sys::JVMTI_ERROR_THREAD_NOT_ALIVE => JvmtiError::ThreadNotAlive,
119            sys::JVMTI_ERROR_INVALID_OBJECT => JvmtiError::InvalidObject,
120            sys::JVMTI_ERROR_INVALID_CLASS => JvmtiError::InvalidClass,
121            sys::JVMTI_ERROR_CLASS_NOT_PREPARED => JvmtiError::ClassNotPrepared,
122            sys::JVMTI_ERROR_INVALID_METHODID => JvmtiError::InvalidMethodId,
123            sys::JVMTI_ERROR_INVALID_LOCATION => JvmtiError::InvalidLocation,
124            sys::JVMTI_ERROR_INVALID_FIELDID => JvmtiError::InvalidFieldId,
125            sys::JVMTI_ERROR_NO_MORE_FRAMES => JvmtiError::NoMoreFrames,
126            sys::JVMTI_ERROR_OPAQUE_FRAME => JvmtiError::OpaqueFrame,
127            sys::JVMTI_ERROR_TYPE_MISMATCH => JvmtiError::TypeMismatch,
128            sys::JVMTI_ERROR_INVALID_SLOT => JvmtiError::InvalidSlot,
129            sys::JVMTI_ERROR_DUPLICATE => JvmtiError::Duplicate,
130            sys::JVMTI_ERROR_NOT_FOUND => JvmtiError::NotFound,
131            sys::JVMTI_ERROR_INVALID_MONITOR => JvmtiError::InvalidMonitor,
132            sys::JVMTI_ERROR_NOT_MONITOR_OWNER => JvmtiError::NotMonitorOwner,
133            sys::JVMTI_ERROR_INTERRUPT => JvmtiError::Interrupt,
134            sys::JVMTI_ERROR_INVALID_CLASS_FORMAT => JvmtiError::InvalidClassFormat,
135            sys::JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION => JvmtiError::CircularClassDefinition,
136            sys::JVMTI_ERROR_FAILS_VERIFICATION => JvmtiError::FailsVerification,
137            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED => JvmtiError::UnsupportedRedefinitionMethodAdded,
138            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED => JvmtiError::UnsupportedRedefinitionSchemaChanged,
139            sys::JVMTI_ERROR_INVALID_TYPESTATE => JvmtiError::InvalidTypeState,
140            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED => JvmtiError::UnsupportedRedefinitionHierarchyChanged,
141            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED => JvmtiError::UnsupportedRedefinitionMethodDeleted,
142            sys::JVMTI_ERROR_UNSUPPORTED_VERSION => JvmtiError::UnsupportedVersion,
143            sys::JVMTI_ERROR_NAMES_DONT_MATCH => JvmtiError::NamesDontMatch,
144            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED => JvmtiError::UnsupportedRedefinitionClassModifiersChanged,
145            sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED => JvmtiError::UnsupportedRedefinitionMethodModifiersChanged,
146            sys::JVMTI_ERROR_UNMODIFIABLE_CLASS => JvmtiError::UnmodifiableClass,
147            sys::JVMTI_ERROR_NOT_AVAILABLE => JvmtiError::NotAvaliable,
148            sys::JVMTI_ERROR_MUST_POSSESS_CAPABILITY => JvmtiError::MustPosessCapability,
149            sys::JVMTI_ERROR_NULL_POINTER => JvmtiError::NullPointer,
150            sys::JVMTI_ERROR_ABSENT_INFORMATION => JvmtiError::AbsentInformation,
151            sys::JVMTI_ERROR_INVALID_EVENT_TYPE => JvmtiError::InvalidEventType,
152            sys::JVMTI_ERROR_ILLEGAL_ARGUMENT => JvmtiError::IllegalArgument,
153            sys::JVMTI_ERROR_NATIVE_METHOD => JvmtiError::NativeMethod,
154            sys::JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED => JvmtiError::ClassLoaderUnsupported,
155            sys::JVMTI_ERROR_OUT_OF_MEMORY => JvmtiError::OutOfMemory,
156            sys::JVMTI_ERROR_ACCESS_DENIED => JvmtiError::AccessDenied,
157            sys::JVMTI_ERROR_WRONG_PHASE => JvmtiError::WrongPhase,
158            sys::JVMTI_ERROR_INTERNAL => JvmtiError::Internal,
159            sys::JVMTI_ERROR_UNATTACHED_THREAD => JvmtiError::UnattachedThread,
160            sys::JVMTI_ERROR_INVALID_ENVIRONMENT => JvmtiError::InvalidEnvironment,
161            _ => JvmtiError::UnsupportedError(error),
162        }
163    }
164}
165
166
167impl From<JvmtiError> for sys::jvmtiError {
168    fn from(error: JvmtiError) -> Self {
169        match error {
170            JvmtiError::InvalidThread => sys::JVMTI_ERROR_INVALID_THREAD,
171            JvmtiError::InvalidThreadGroup => sys::JVMTI_ERROR_INVALID_THREAD_GROUP,
172            JvmtiError::InvalidPriority => sys::JVMTI_ERROR_INVALID_PRIORITY,
173            JvmtiError::ThreadNotSuspended => sys::JVMTI_ERROR_THREAD_NOT_SUSPENDED,
174            JvmtiError::ThreadSuspended => sys::JVMTI_ERROR_THREAD_SUSPENDED,
175            JvmtiError::ThreadNotAlive => sys::JVMTI_ERROR_THREAD_NOT_ALIVE,
176            JvmtiError::InvalidObject => sys::JVMTI_ERROR_INVALID_OBJECT,
177            JvmtiError::InvalidClass => sys::JVMTI_ERROR_INVALID_CLASS,
178            JvmtiError::ClassNotPrepared => sys::JVMTI_ERROR_CLASS_NOT_PREPARED,
179            JvmtiError::InvalidMethodId => sys::JVMTI_ERROR_INVALID_METHODID,
180            JvmtiError::InvalidLocation => sys::JVMTI_ERROR_INVALID_LOCATION,
181            JvmtiError::InvalidFieldId => sys::JVMTI_ERROR_INVALID_FIELDID,
182            JvmtiError::NoMoreFrames => sys::JVMTI_ERROR_NO_MORE_FRAMES,
183            JvmtiError::OpaqueFrame => sys::JVMTI_ERROR_OPAQUE_FRAME,
184            JvmtiError::TypeMismatch => sys::JVMTI_ERROR_TYPE_MISMATCH,
185            JvmtiError::InvalidSlot => sys::JVMTI_ERROR_INVALID_SLOT,
186            JvmtiError::Duplicate => sys::JVMTI_ERROR_DUPLICATE,
187            JvmtiError::NotFound => sys::JVMTI_ERROR_NOT_FOUND,
188            JvmtiError::InvalidMonitor => sys::JVMTI_ERROR_INVALID_MONITOR,
189            JvmtiError::NotMonitorOwner => sys::JVMTI_ERROR_NOT_MONITOR_OWNER,
190            JvmtiError::Interrupt => sys::JVMTI_ERROR_INTERRUPT,
191            JvmtiError::InvalidClassFormat => sys::JVMTI_ERROR_INVALID_CLASS_FORMAT,
192            JvmtiError::CircularClassDefinition => sys::JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION,
193            JvmtiError::FailsVerification => sys::JVMTI_ERROR_FAILS_VERIFICATION,
194            JvmtiError::UnsupportedRedefinitionMethodAdded => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED,
195            JvmtiError::UnsupportedRedefinitionSchemaChanged => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED,
196            JvmtiError::InvalidTypeState => sys::JVMTI_ERROR_INVALID_TYPESTATE,
197            JvmtiError::UnsupportedRedefinitionHierarchyChanged => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED,
198            JvmtiError::UnsupportedRedefinitionMethodDeleted => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED,
199            JvmtiError::UnsupportedVersion => sys::JVMTI_ERROR_UNSUPPORTED_VERSION,
200            JvmtiError::NamesDontMatch => sys::JVMTI_ERROR_NAMES_DONT_MATCH,
201            JvmtiError::UnsupportedRedefinitionClassModifiersChanged => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED,
202            JvmtiError::UnsupportedRedefinitionMethodModifiersChanged => sys::JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED,
203            JvmtiError::UnmodifiableClass => sys::JVMTI_ERROR_UNMODIFIABLE_CLASS,
204            JvmtiError::NotAvaliable => sys::JVMTI_ERROR_NOT_AVAILABLE,
205            JvmtiError::MustPosessCapability => sys::JVMTI_ERROR_MUST_POSSESS_CAPABILITY,
206            JvmtiError::NullPointer => sys::JVMTI_ERROR_NULL_POINTER,
207            JvmtiError::AbsentInformation => sys::JVMTI_ERROR_ABSENT_INFORMATION,
208            JvmtiError::InvalidEventType => sys::JVMTI_ERROR_INVALID_EVENT_TYPE,
209            JvmtiError::IllegalArgument => sys::JVMTI_ERROR_ILLEGAL_ARGUMENT,
210            JvmtiError::NativeMethod => sys::JVMTI_ERROR_NATIVE_METHOD,
211            JvmtiError::ClassLoaderUnsupported => sys::JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED,
212            JvmtiError::OutOfMemory => sys::JVMTI_ERROR_OUT_OF_MEMORY,
213            JvmtiError::AccessDenied => sys::JVMTI_ERROR_ACCESS_DENIED,
214            JvmtiError::WrongPhase => sys::JVMTI_ERROR_WRONG_PHASE,
215            JvmtiError::Internal => sys::JVMTI_ERROR_INTERNAL,
216            JvmtiError::UnattachedThread => sys::JVMTI_ERROR_UNATTACHED_THREAD,
217            JvmtiError::InvalidEnvironment => sys::JVMTI_ERROR_INVALID_ENVIRONMENT,
218            JvmtiError::EmptyArgument => sys::JVMTI_CONSTANT_UNSUPPORTED,
219            JvmtiError::UnsupportedError(error) => error
220        }
221    }
222}