From cbd0239622f23ed6d72f740a711d12ce4260e391 Mon Sep 17 00:00:00 2001 From: He-Pin Date: Sat, 20 Jun 2026 04:03:38 +0800 Subject: [PATCH] fix: remove deprecated Thread.stop() and enforce -Werror on server/client Motivation: The server module had a deprecation warning from Thread.stop() across all Scala versions (3.3.7, 2.13.18, 2.12.21). The server and client modules also lacked -Werror/-deprecation flags, allowing future warnings to slip through undetected. Modification: - Remove Thread.stop() call entirely. It was redundant because: - When client disconnects: interruptServer() calls System.exit(0), terminating the JVM and all threads - When thread completes normally: interrupt() on a finished thread is a no-op - Add -deprecation -Werror to server module scalacOptions - Add -Xlint:deprecation -Werror to client module javacOptions Result: All modules compile with zero warnings across all Scala versions (3.3.7, 2.13.18, 2.12.21) and all platforms (JVM, JS, WASM, Native). Future deprecation warnings will be caught as compilation errors. --- build.mill | 4 ++-- sjsonnet/server/src/sjsonnet/SjsonnetServerMain.scala | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/build.mill b/build.mill index 3cd9d0a3..12c64f07 100644 --- a/build.mill +++ b/build.mill @@ -390,7 +390,7 @@ object sjsonnet extends VersionFileModule { object client extends JavaModule with SjsonnetPublishModule { def artifactName = "sjsonnet-server" - def javacOptions = super.javacOptions() ++ Seq("--release", "17") + def javacOptions = super.javacOptions() ++ Seq("--release", "17", "-Xlint:deprecation", "-Werror") object test extends JavaTests with TestModule.Junit4 } @@ -398,7 +398,7 @@ object sjsonnet extends VersionFileModule { def artifactName = "sjsonnet-server" def scalaVersion = SjsonnnetJvmModule.this.crossValue def moduleDeps = Seq(SjsonnnetJvmModule.this, client) - def scalacOptions = super.scalacOptions() ++ Seq("-release", "17") + def scalacOptions = super.scalacOptions() ++ Seq("-release", "17", "-deprecation", "-Werror") def javacOptions = super.javacOptions() ++ Seq("--release", "17") override def prependShellScript = mill.util.Jvm.universalScript( diff --git a/sjsonnet/server/src/sjsonnet/SjsonnetServerMain.scala b/sjsonnet/server/src/sjsonnet/SjsonnetServerMain.scala index bedb8519..6c3bcf75 100644 --- a/sjsonnet/server/src/sjsonnet/SjsonnetServerMain.scala +++ b/sjsonnet/server/src/sjsonnet/SjsonnetServerMain.scala @@ -213,9 +213,6 @@ class Server[T]( if (!idle) interruptServer() t.interrupt() - // Thread.stop() is removed in Java 25+; try it for older JVMs but ignore failures - try t.stop() - catch { case NonFatal(_) => } if (ClientUtil.isWindows) { // Closing the socket on Windows can sometimes take a few seconds.