Skip to content

Commit 4d2debf

Browse files
committed
fix: jni::errors::Error::NullPtr throws NullPtr
1 parent 47bb45a commit 4d2debf

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

macro/src/args.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ impl ArgumentOptions {
106106
Ok(x) => x,
107107
Err(e) => {
108108
// TODO should we panic here instead?
109-
let _ = #env.throw_new("java/lang/RuntimeException", format!("{e:?}"));
109+
let _ = #env.throw_new(e.jclass(), format!("{e:?}"));
110110
return #ret_expr;
111111
},
112112
};

macro/src/wrapper.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub(crate) fn generate_jni_wrapper(attrs: TokenStream, input: TokenStream) -> Re
9292
Ok(fin) => fin,
9393
Err(e) => {
9494
// TODO should we panic instead?
95-
let _ = #env_iden.throw_new("java/lang/RuntimeException", format!("{e:?}"));
95+
let _ = #env_iden.throw_new(e.jclass(), format!("{e:?}"));
9696
#return_expr
9797
}
9898
}

src/lib.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,40 @@ pub trait JniToolboxError: std::error::Error {
1414

1515
impl JniToolboxError for jni::errors::Error {
1616
fn jclass(&self) -> String {
17-
"java/lang/RuntimeException".to_string()
17+
match self {
18+
jni::errors::Error::NullPtr(_) => "java/lang/NullPointerException",
19+
_ => "java/lang/RuntimeException",
20+
// jni::errors::Error::WrongJValueType(_, _) => todo!(),
21+
// jni::errors::Error::InvalidCtorReturn => todo!(),
22+
// jni::errors::Error::InvalidArgList(_) => todo!(),
23+
// jni::errors::Error::MethodNotFound { name, sig } => todo!(),
24+
// jni::errors::Error::FieldNotFound { name, sig } => todo!(),
25+
// jni::errors::Error::JavaException => todo!(),
26+
// jni::errors::Error::JNIEnvMethodNotFound(_) => todo!(),
27+
// jni::errors::Error::NullDeref(_) => todo!(),
28+
// jni::errors::Error::TryLock => todo!(),
29+
// jni::errors::Error::JavaVMMethodNotFound(_) => todo!(),
30+
// jni::errors::Error::FieldAlreadySet(_) => todo!(),
31+
// jni::errors::Error::ThrowFailed(_) => todo!(),
32+
// jni::errors::Error::ParseFailed(_, _) => todo!(),
33+
// jni::errors::Error::JniCall(_) => todo!(),
34+
}
35+
.to_string()
1836
}
1937
}
2038

2139
impl JniToolboxError for jni::errors::JniError {
2240
fn jclass(&self) -> String {
23-
"java/lang/RuntimeException".to_string()
41+
match self {
42+
_ => "java/lang/RuntimeException",
43+
// jni::errors::JniError::Unknown => todo!(),
44+
// jni::errors::JniError::ThreadDetached => todo!(),
45+
// jni::errors::JniError::WrongVersion => todo!(),
46+
// jni::errors::JniError::NoMemory => todo!(),
47+
// jni::errors::JniError::AlreadyCreated => todo!(),
48+
// jni::errors::JniError::InvalidArguments => todo!(),
49+
// jni::errors::JniError::Other(_) => todo!(),
50+
}
51+
.to_string()
2452
}
2553
}

0 commit comments

Comments
 (0)