diff --git a/.github/workflows/alpine-container.yml b/.github/workflows/alpine-container.yml index bbf4997..3bf2dde 100644 --- a/.github/workflows/alpine-container.yml +++ b/.github/workflows/alpine-container.yml @@ -17,7 +17,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Create dockerfile uses: edgardleal/mustache-template-action@v1.0.4 env: diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index d7afce9..d2dec24 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: addnab/docker-run-action@v3 with: registry: gcr.io @@ -31,15 +31,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 check-latest: true cache: 'npm' - name: Setup java 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/check-style.yml b/.github/workflows/check-style.yml index c7c9ac7..c2a091b 100644 --- a/.github/workflows/check-style.yml +++ b/.github/workflows/check-style.yml @@ -13,9 +13,9 @@ jobs: check-ts-style: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20.x - name: Install dependencies @@ -26,7 +26,7 @@ jobs: check-rust-style: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check format run: cargo fmt --all -- --check - name: Clippy diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 4a0db4f..4300ce5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Pages uses: actions/configure-pages@v4 - name: Setup Node.js environment diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 90ba168..0ca4001 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -14,11 +14,11 @@ jobs: strategy: matrix: include: - - os: ubuntu-20.04 + - os: ubuntu-24.04 target: x86_64-unknown-linux-gnu package: linux-x64-gnu publish: true - - os: ubuntu-20.04 + - os: ubuntu-24.04 target: aarch64-unknown-linux-gnu package: linux-arm64-gnu publish: false @@ -43,13 +43,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 22.x - name: Setup Java JDK - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' @@ -97,9 +97,9 @@ jobs: ignore-scripts: false build-musl: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build uses: addnab/docker-run-action@v3 timeout-minutes: 180 @@ -136,7 +136,7 @@ jobs: if: github.ref == 'refs/heads/main' && github.event.inputs.dry-run != 'true' steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Get version id: version run: echo "version=$(node -p 'require(`./package.json`).version')" >> $GITHUB_ENV diff --git a/.github/workflows/system_test.yml b/.github/workflows/system_test.yml index efdc068..7d40272 100644 --- a/.github/workflows/system_test.yml +++ b/.github/workflows/system_test.yml @@ -14,13 +14,13 @@ jobs: java-version: [11, 17, 18] runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: Setup Node.js ${{matrix.node-version}} environment - uses: actions/setup-node@v3.4.1 + uses: actions/setup-node@v6 with: node-version: ${{matrix.node-version}} - name: Setup Java JDK ${{matrix.java-version}} - uses: actions/setup-java@v3 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: ${{matrix.java-version}} @@ -36,17 +36,17 @@ jobs: strategy: matrix: node-version: [16, 18] - java-version: [11, 17] - runs-on: ubuntu-20.04 + java-version: [21] + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: Init qemu run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - name: Run tests uses: addnab/docker-run-action@v3 timeout-minutes: 180 with: - image: arm64v8/node:${{matrix.node-version}}-bullseye + image: arm64v8/node:${{matrix.node-version}}-trixie options: -v ${{github.workspace}}/test:/github/workspace -w /github/workspace/system_test run: | apt-get update diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1c60e4b..d39e33c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Rust Cache uses: Swatinem/rust-cache@v2.7.3 - name: Build @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Rust Cache uses: Swatinem/rust-cache@v2.7.3 - name: Build @@ -44,7 +44,7 @@ jobs: strategy: matrix: include: - - os: ubuntu-20.04 + - os: ubuntu-22.04 node-version: 20.x arch: x64 features: default @@ -78,14 +78,14 @@ jobs: features: all runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Node.js ${{matrix.node-version}} environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{matrix.node-version}} architecture: ${{matrix.arch}} - name: Setup java 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' @@ -124,7 +124,7 @@ jobs: node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))' npm pack - name: Upload package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: ${{matrix.node-version == '20.x'}} with: name: java-${{matrix.arch}}-${{matrix.os}} @@ -135,15 +135,15 @@ jobs: fail-fast: false matrix: node-version: [20, 22] - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Node.js ${{matrix.node-version}} environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{matrix.node-version}} - name: Setup java 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' @@ -175,12 +175,12 @@ jobs: uses: addnab/docker-run-action@v3 timeout-minutes: 180 with: - image: arm64v8/node:${{matrix.node-version}}-bullseye + image: arm64v8/node:${{matrix.node-version}}-trixie options: -v ${{ github.workspace }}:/github/workspace -w /github/workspace --platform linux/arm64 run: | apt-get update apt-get install ca-certificates-java -y - apt-get install openjdk-17-jre-headless -y + apt-get install openjdk-21-jre-headless -y apt-get remove -y openjdk-11* npm config set cache /tmp --global export CI=true @@ -198,7 +198,7 @@ jobs: node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))' npm pack - name: Upload package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: ${{matrix.node-version == '20'}} with: name: java-arm64-ubuntu @@ -209,9 +209,9 @@ jobs: fail-fast: false matrix: node-version: [20, 22] - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Rust Cache uses: Swatinem/rust-cache@v2.7.3 - name: Run tests @@ -237,7 +237,7 @@ jobs: node -e 'let p=require("./package.json");p.files.push("dist/*.node");require("fs").writeFileSync("package.json",JSON.stringify(p,null,4))' npm pack - name: Upload package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 if: ${{matrix.node-version == '20'}} with: name: java-x64-ubuntu-musl @@ -246,12 +246,12 @@ jobs: benchmark: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 22.x - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' diff --git a/crates/java-bridge/src/node/helpers/arg_convert.rs b/crates/java-bridge/src/node/helpers/arg_convert.rs index 7cb6dec..db06b35 100644 --- a/crates/java-bridge/src/node/helpers/arg_convert.rs +++ b/crates/java-bridge/src/node/helpers/arg_convert.rs @@ -26,7 +26,7 @@ pub fn call_context_to_java_args<'a>( Ok(res) } -pub fn call_results_to_args(args: &[JavaCallResult]) -> Vec { +pub fn call_results_to_args(args: &'_ [JavaCallResult]) -> Vec> { args.iter() .map(|arg| arg.as_arg()) .collect::>() diff --git a/crates/java-bridge/src/node/interface_proxy/proxies.rs b/crates/java-bridge/src/node/interface_proxy/proxies.rs index 56aa856..b0c2241 100644 --- a/crates/java-bridge/src/node/interface_proxy/proxies.rs +++ b/crates/java-bridge/src/node/interface_proxy/proxies.rs @@ -59,10 +59,15 @@ pub(in crate::node::interface_proxy) fn remove_proxy( function_caller: Option, ) { let removed = proxies.remove(&id); + if !keep_as_daemon { + return; + } - if keep_as_daemon && function_caller.is_some() && function_caller.as_ref().unwrap().is_alive() { - if let Some(methods) = removed { - daemon_proxies.insert(id, (methods, function_caller.unwrap())); + if let Some(caller) = function_caller { + if caller.is_alive() { + if let Some(methods) = removed { + daemon_proxies.insert(id, (methods, caller)); + } } } } diff --git a/crates/java-rs/src/java/java_env.rs b/crates/java-rs/src/java/java_env.rs index a798727..901897f 100644 --- a/crates/java-rs/src/java/java_env.rs +++ b/crates/java-rs/src/java/java_env.rs @@ -41,7 +41,7 @@ impl<'a> JavaEnv<'a> { jni_version_to_string(version) } - pub fn find_class(&self, class_name: &str) -> ResultType { + pub fn find_class(&'_ self, class_name: &str) -> ResultType> { self.0.find_class(class_name, true) } diff --git a/crates/java-rs/src/java/java_env_wrapper.rs b/crates/java-rs/src/java/java_env_wrapper.rs index e188c34..d26604e 100644 --- a/crates/java-rs/src/java/java_env_wrapper.rs +++ b/crates/java-rs/src/java/java_env_wrapper.rs @@ -1189,10 +1189,10 @@ impl<'a> JavaEnvWrapper<'a> { } pub fn create_object_array( - &self, + &'_ self, class: &'a JavaClass<'a>, len: i32, - ) -> ResultType { + ) -> ResultType> { let arr = unsafe { self.methods.NewObjectArray.unwrap()(self.env, len, class.class(), ptr::null_mut()) }; diff --git a/crates/java-rs/src/java/java_error.rs b/crates/java-rs/src/java/java_error.rs index a310c7e..32cd14b 100644 --- a/crates/java-rs/src/java/java_error.rs +++ b/crates/java-rs/src/java/java_error.rs @@ -63,8 +63,8 @@ impl std::fmt::Display for JavaError { .collect::>() .join("\n"); - if root.is_some() { - write!(f, "{}{}{}", root.unwrap(), new_line, stack_frames) + if let Some(root) = root { + write!(f, "{}{}{}", root, new_line, stack_frames) } else { write!(f, "{}{}{}", self.alt_text, new_line, stack_frames) } diff --git a/crates/java-rs/src/java/java_field.rs b/crates/java-rs/src/java/java_field.rs index fc8085e..3074cf9 100644 --- a/crates/java-rs/src/java/java_field.rs +++ b/crates/java-rs/src/java/java_field.rs @@ -185,7 +185,7 @@ impl<'a> JavaObjectField<'a> { Self(field) } - pub fn get(&self, object: &JavaObject<'_>) -> ResultType> { + pub fn get(&'_ self, object: &JavaObject<'_>) -> ResultType>> { self.0.class.env().get_object_field(self, object) } @@ -257,7 +257,7 @@ impl<'a> StaticJavaObjectField<'a> { Self(field) } - pub fn get(&self) -> ResultType> { + pub fn get(&'_ self) -> ResultType>> { self.0 .class .env() diff --git a/crates/java-rs/src/java/java_type.rs b/crates/java-rs/src/java/java_type.rs index 06c7de6..92a82ff 100644 --- a/crates/java-rs/src/java/java_type.rs +++ b/crates/java-rs/src/java/java_type.rs @@ -261,7 +261,7 @@ impl JavaType { /// assert_eq!(java_type.to_string(), expected.to_string()); /// ``` pub fn from_method_return_type(method_signature: &str) -> ResultType { - let signature = method_signature.split(')').last().ok_or(format!( + let signature = method_signature.split(')').next_back().ok_or(format!( "Could not get the return type of signature '{}'", method_signature ))?; diff --git a/crates/java-rs/src/java/objects/class.rs b/crates/java-rs/src/java/objects/class.rs index a6e254d..95f18e1 100644 --- a/crates/java-rs/src/java/objects/class.rs +++ b/crates/java-rs/src/java/objects/class.rs @@ -155,7 +155,7 @@ impl<'a> JavaClass<'a> { StaticJavaBooleanMethod::new(method) } - pub fn get_constructor(&self, signature: &str) -> ResultType { + pub fn get_constructor(&'_ self, signature: &str) -> ResultType> { self.env().get_constructor(self, signature) } diff --git a/crates/java-rs/src/java/traits.rs b/crates/java-rs/src/java/traits.rs index 12cb56c..b8e6631 100644 --- a/crates/java-rs/src/java/traits.rs +++ b/crates/java-rs/src/java/traits.rs @@ -33,5 +33,5 @@ pub trait IsInstanceOf { } pub trait GetClass { - fn get_class(&self) -> ResultType; + fn get_class(&'_ self) -> ResultType>; } diff --git a/test/ConfigTest.test.ts b/test/ConfigTest.test.ts index e52c5e5..37befe8 100644 --- a/test/ConfigTest.test.ts +++ b/test/ConfigTest.test.ts @@ -203,10 +203,7 @@ describe('Config test', () => { await JavaString.newInstanceAsync(null); expect.fail('Expected an error'); } catch (e) { - checkJavaErrorCause( - e, - 'Cannot invoke "java.lang.StringBuffer.toString()" because "buffer" is null' - ); + checkJavaErrorCause(e, null); } try { diff --git a/test/StringTest.test.ts b/test/StringTest.test.ts index 933f8b1..92a0fd0 100644 --- a/test/StringTest.test.ts +++ b/test/StringTest.test.ts @@ -157,10 +157,7 @@ describe('StringTest', () => { new JavaString(null); expect.fail('Expected an error'); } catch (e: unknown) { - checkJavaErrorCause( - e, - 'Cannot invoke "java.lang.StringBuffer.toString()" because "buffer" is null' - ); + checkJavaErrorCause(e, null); } try { diff --git a/test/testUtil.ts b/test/testUtil.ts index f096417..0bb5270 100644 --- a/test/testUtil.ts +++ b/test/testUtil.ts @@ -156,19 +156,30 @@ export class ClassTool { } } -export const checkJavaErrorCause = (e: unknown, errorMessage: string) => { +export const checkJavaErrorCause = ( + e: unknown, + errorMessage: string | null +) => { if (e instanceof AssertionError) { throw e; } expect(e).property('cause').to.not.be.null; const error = e as JavaError; - expect(error.cause.toString()).to.equal( - `java.lang.NullPointerException: ${errorMessage}` - ); + if (errorMessage !== null) { + expect(error.cause.toString()).to.equal( + `java.lang.NullPointerException: ${errorMessage}` + ); + } else { + expect(error.cause.toString()).to.match( + /java\.lang\.NullPointerException.*/gm + ); + } const stack = error.cause.getStackTraceSync(); expect(stack).to.not.be.null; expect(stack).to.be.an('array'); - expect(stack.length).to.be.greaterThan(0); + if (errorMessage !== null) { + expect(stack.length).to.be.greaterThan(0); + } };