Skip to content

Commit fc10cfb

Browse files
authored
fix: method arguments not being parsed properly (#30)
* fixed constructor arguments getting truncated * fixed fields containing null values throwing errors * fixed an issue where passing class instances representing primitives caused the method/constructor to not be found * fixed public properties not being added to class instances * made long return types always return bigint
1 parent 9df885a commit fc10cfb

25 files changed

+694
-170
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,5 @@ $RECYCLE.BIN/
196196
*.node
197197
native.d.ts
198198
native.js
199-
docs/
199+
docs/
200+
test.js

Cargo.lock

+42-42
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
[package]
22
edition = "2021"
33
name = "java"
4-
version = "2.1.4"
4+
version = "2.1.6"
55

66
[lib]
77
crate-type = ["cdylib"]
88

99
[dependencies]
10-
napi = { version = "2.9.0", default-features = false, features = ["napi6", "tokio_rt"] }
11-
napi-derive = "2.9.0"
10+
napi = { version = "2.10.0", default-features = false, features = ["napi6", "tokio_rt"] }
11+
napi-derive = "2.9.1"
1212
libloading = "0.7.3"
13-
tokio = "1.2.0"
14-
futures = "0.3.21"
13+
tokio = "1.21.2"
14+
futures = "0.3.25"
1515
java-locator = "0.1.2"
1616
lazy_static = "1.4.0"
1717
rand = "0.8.5"

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "java-bridge",
3-
"version": "2.1.5",
3+
"version": "2.1.6",
44
"main": "dist/index.prod.min.js",
55
"types": "dist/ts-src/index.d.ts",
66
"description": "A bridge between Node.js and Java APIs",

src/jni/java_env.rs

+4
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ impl<'a> JavaEnv<'a> {
187187
self.0.append_class_path(paths)
188188
}
189189

190+
pub fn replace_class_loader(&self, class_loader: GlobalJavaObject) -> ResultType<()> {
191+
self.0.replace_class_loader(class_loader)
192+
}
193+
190194
pub(in crate::jni) fn thread_set_context_classloader(&self) -> ResultType<()> {
191195
if self.get_class_loader().is_err() {
192196
return Ok(());

src/jni/java_env_wrapper.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -1286,12 +1286,16 @@ impl<'a> JavaEnvWrapper<'a> {
12861286
)?;
12871287

12881288
let res = GlobalJavaObject::try_from(class_loader)?;
1289+
self.replace_class_loader(res)
1290+
}
1291+
1292+
pub fn replace_class_loader(&self, loader: GlobalJavaObject) -> ResultType<()> {
12891293
self.jvm
12901294
.as_ref()
12911295
.ok_or("The jvm was unset".to_string())?
12921296
.lock()
12931297
.unwrap()
1294-
.set_class_loader(res);
1298+
.set_class_loader(loader);
12951299

12961300
Ok(())
12971301
}

src/jni/java_field.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::jni::java_env::JavaEnv;
33
use crate::jni::java_type::{JavaType, Type};
44
use crate::jni::objects::class::{GlobalJavaClass, JavaClass};
55
use crate::jni::objects::java_object::JavaObject;
6+
use crate::jni::traits::IsNull;
67
use crate::jni::util::util::ResultType;
78
use crate::{define_field, sys};
89
use std::marker::PhantomData;
@@ -217,6 +218,17 @@ impl<'a> JavaObjectField<'a> {
217218
}
218219
}
219220

221+
fn get_field_value(object: JavaObject, inner: &JavaField) -> ResultType<JavaCallResult> {
222+
Ok(if object.is_null() {
223+
JavaCallResult::Null
224+
} else {
225+
JavaCallResult::Object {
226+
object: object.into_global()?,
227+
signature: inner.field_type.clone(),
228+
}
229+
})
230+
}
231+
220232
impl<'a> JavaFieldValues for JavaObjectField<'a> {
221233
fn set(&self, obj: &JavaObject<'_>, value: JavaCallResult) -> ResultType<()> {
222234
match value {
@@ -227,10 +239,7 @@ impl<'a> JavaFieldValues for JavaObjectField<'a> {
227239

228240
fn get(&self, obj: &JavaObject<'_>) -> ResultType<JavaCallResult> {
229241
let object = self.get(obj)?;
230-
Ok(JavaCallResult::Object {
231-
object: object.into_global()?,
232-
signature: self.0.field_type.clone(),
233-
})
242+
get_field_value(object, &self.0)
234243
}
235244
}
236245

@@ -290,10 +299,7 @@ impl<'a> StaticJavaFieldValues for StaticJavaObjectField<'a> {
290299

291300
fn get(&self) -> ResultType<JavaCallResult> {
292301
let object = self.get()?;
293-
Ok(JavaCallResult::Object {
294-
object: object.into_global()?,
295-
signature: self.0.field_type.clone(),
296-
})
302+
get_field_value(object, &self.0)
297303
}
298304
}
299305

0 commit comments

Comments
 (0)