From 4804cc2fa4f85928f89af8c88ddc4c5f68d458f8 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 25 Jun 2021 14:01:01 +0200 Subject: [PATCH] Simplify bspReload cmd by calling doLoadProject Fixes #6010: Send real error message when realod failed --- .../internal/server/BuildServerProtocol.scala | 38 ++++++------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 7036a379b..d97e77960 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -22,7 +22,7 @@ import sbt.StandardMain.exchange import sbt.internal.bsp._ import sbt.internal.langserver.ErrorCodes import sbt.internal.protocol.JsonRpcRequestMessage -import sbt.internal.util.Attributed +import sbt.internal.util.{ Attributed, ErrorHandling } import sbt.internal.util.complete.{ Parser, Parsers } import sbt.librarymanagement.CrossVersion.binaryScalaVersion import sbt.librarymanagement.{ Configuration, ScalaArtifacts } @@ -53,35 +53,19 @@ object BuildServerProtocol { ) private val bspReload = "bspReload" - private val bspReloadFailed = "bspReloadFailed" - private val bspReloadSucceed = "bspReloadSucceed" lazy val commands: Seq[Command] = Seq( Command.single(bspReload) { (state, reqId) => - import sbt.BasicCommandStrings._ - import sbt.internal.CommandStrings._ - val result = List( - StashOnFailure, - s"$OnFailure $bspReloadFailed $reqId", - LoadProjectImpl, - s"$bspReloadSucceed $reqId", - PopOnFailure, - FailureWall - ) ::: state - result - }, - Command.single(bspReloadFailed) { (state, reqId) => - exchange.respondError( - ErrorCodes.InternalError, - "reload failed", - Some(reqId), - state.source - ) - state - }, - Command.single(bspReloadSucceed) { (state, reqId) => - exchange.respondEvent(JNull, Some(reqId), state.source) - state + try { + val newState = BuiltinCommands.doLoadProject(state, Project.LoadAction.Current) + exchange.respondEvent(JNull, Some(reqId), state.source) + newState + } catch { + case NonFatal(e) => + val msg = ErrorHandling.reducedToString(e) + exchange.respondError(ErrorCodes.InternalError, msg, Some(reqId), state.source) + state.fail + } } )