Merge pull request #8282 from eed3si9n/wip/gson

[2.x] fix: Catch gson parsing error
This commit is contained in:
eugene yokota 2025-09-14 00:30:07 -04:00 committed by GitHub
commit 8193d6befb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 11 deletions

View File

@ -8,7 +8,7 @@
package sbt package sbt
import com.google.gson.{ JsonObject, JsonParser } import com.google.gson.{ JsonObject, JsonParser, JsonSyntaxException }
import testing.{ Logger as _, Task as _, * } import testing.{ Logger as _, Task as _, * }
import java.io.* import java.io.*
import java.util.ArrayList import java.util.ArrayList
@ -25,6 +25,7 @@ import scala.collection.mutable
import scala.concurrent.{ Await, Promise } import scala.concurrent.{ Await, Promise }
import scala.concurrent.duration.Duration import scala.concurrent.duration.Duration
import scala.util.Random import scala.util.Random
import scala.util.control.NonFatal
import scala.jdk.CollectionConverters.* import scala.jdk.CollectionConverters.*
import scala.sys.process.Process import scala.sys.process.Process
@ -186,7 +187,7 @@ private class React(
val g = WorkerMain.mkGson() val g = WorkerMain.mkGson()
val promise: Promise[Int] = Promise() val promise: Promise[Int] = Promise()
override def apply(line: String): Unit = override def apply(line: String): Unit =
// scala.Console.err.println(line) try
val o = JsonParser.parseString(line).getAsJsonObject() val o = JsonParser.parseString(line).getAsJsonObject()
if o.has("id") then if o.has("id") then
val resId = o.getAsJsonPrimitive("id").getAsLong() val resId = o.getAsJsonPrimitive("id").getAsLong()
@ -197,6 +198,9 @@ private class React(
else () else ()
else if o.has("method") then processNotification(o) else if o.has("method") then processNotification(o)
else () else ()
catch
case _: JsonSyntaxException => log.info(line)
case NonFatal(_) => ()
override def notifyExit(p: Process): Unit = override def notifyExit(p: Process): Unit =
if !process.isAlive then promise.success(process.exitValue()) if !process.isAlive then promise.success(process.exitValue())