Skip to content

Commit 8a87361

Browse files
committed
better logs in case of bloop failure in bsp
1 parent 3900ce8 commit 8a87361

File tree

2 files changed

+45
-17
lines changed

2 files changed

+45
-17
lines changed

modules/build/src/main/scala/scala/build/bsp/BspServer.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ class BspServer(
3333
}
3434

3535
// Can we accept some errors in some circumstances?
36-
override protected def onFatalError(throwable: Throwable): Unit = {
36+
override protected def onFatalError(throwable: Throwable, context: String): Unit = {
3737
val sw = new StringWriter()
3838
throwable.printStackTrace(new PrintWriter(sw))
39-
val message = s"Fatal error has occured, shutting down the server:\n ${sw.toString}"
39+
val message =
40+
s"Fatal error has occured within $context. Shutting down the server:\n ${sw.toString}"
4041
System.err.println(message)
4142
client.foreach(_.onBuildLogMessage(new LogMessageParams(MessageType.ERROR, message)))
4243

modules/build/src/main/scala/scala/build/bsp/BuildServerForwardStubs.scala

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,50 +9,77 @@ import java.util.function.BiFunction
99
trait BuildServerForwardStubs extends b.BuildServer {
1010
protected def forwardTo: b.BuildServer
1111

12-
protected def onFatalError(throwable: Throwable): Unit
12+
protected def onFatalError(throwable: Throwable, context: String): Unit
1313

14-
def fatalExceptionHandler[T] = new BiFunction[T, Throwable, T] {
14+
def fatalExceptionHandler[T](methodName: String, params: Any*) = new BiFunction[T, Throwable, T] {
1515
override def apply(maybeValue: T, maybeException: Throwable): T =
1616
maybeException match {
1717
case null =>
1818
maybeValue
1919
case error =>
20-
onFatalError(error)
20+
val methodContext = s"bloop bsp server, method: $methodName"
21+
val context =
22+
if (params.isEmpty) methodContext
23+
else
24+
params.mkString(s"$methodContext, with params: ", ", ", "")
25+
onFatalError(error, context)
2126
throw error
2227
}
2328
}
2429

2530
override def buildShutdown(): CompletableFuture[Object] =
26-
forwardTo.buildShutdown().handleAsync(fatalExceptionHandler)
31+
forwardTo.buildShutdown().handleAsync(fatalExceptionHandler("buildShutdown"))
32+
2733
override def buildTargetCleanCache(
2834
params: b.CleanCacheParams
2935
): CompletableFuture[b.CleanCacheResult] =
30-
forwardTo.buildTargetCleanCache(params).handleAsync(fatalExceptionHandler)
36+
forwardTo.buildTargetCleanCache(params)
37+
.handleAsync(fatalExceptionHandler("buildTargetCleanCache", params))
38+
3139
override def buildTargetCompile(params: b.CompileParams): CompletableFuture[b.CompileResult] =
32-
forwardTo.buildTargetCompile(params).handleAsync(fatalExceptionHandler)
40+
forwardTo.buildTargetCompile(params)
41+
.handleAsync(fatalExceptionHandler("buildTargetCompile", params))
42+
3343
override def buildTargetDependencySources(
3444
params: b.DependencySourcesParams
3545
): CompletableFuture[b.DependencySourcesResult] =
36-
forwardTo.buildTargetDependencySources(params).handleAsync(fatalExceptionHandler)
46+
forwardTo.buildTargetDependencySources(params)
47+
.handleAsync(fatalExceptionHandler("buildTargetDependencySources", params))
48+
3749
override def buildTargetInverseSources(
3850
params: b.InverseSourcesParams
3951
): CompletableFuture[b.InverseSourcesResult] =
40-
forwardTo.buildTargetInverseSources(params).handleAsync(fatalExceptionHandler)
52+
forwardTo.buildTargetInverseSources(params)
53+
.handleAsync(fatalExceptionHandler("buildTargetInverseSources", params))
54+
4155
override def buildTargetResources(
4256
params: b.ResourcesParams
4357
): CompletableFuture[b.ResourcesResult] =
44-
forwardTo.buildTargetResources(params).handleAsync(fatalExceptionHandler)
58+
forwardTo.buildTargetResources(params)
59+
.handleAsync(fatalExceptionHandler("buildTargetResources", params))
60+
4561
override def buildTargetRun(params: b.RunParams): CompletableFuture[b.RunResult] =
46-
forwardTo.buildTargetRun(params).handleAsync(fatalExceptionHandler)
62+
forwardTo.buildTargetRun(params)
63+
.handleAsync(fatalExceptionHandler("buildTargetRun", params))
64+
4765
override def buildTargetSources(params: b.SourcesParams): CompletableFuture[b.SourcesResult] =
48-
forwardTo.buildTargetSources(params).handleAsync(fatalExceptionHandler)
66+
forwardTo.buildTargetSources(params)
67+
.handleAsync(fatalExceptionHandler("buildTargetSources", params))
68+
4969
override def buildTargetTest(params: b.TestParams): CompletableFuture[b.TestResult] =
50-
forwardTo.buildTargetTest(params).handleAsync(fatalExceptionHandler)
70+
forwardTo.buildTargetTest(params)
71+
.handleAsync(fatalExceptionHandler("buildTargetTest", params))
72+
5173
override def workspaceBuildTargets(): CompletableFuture[b.WorkspaceBuildTargetsResult] =
52-
forwardTo.workspaceBuildTargets().handleAsync(fatalExceptionHandler)
74+
forwardTo.workspaceBuildTargets()
75+
.handleAsync(fatalExceptionHandler("workspaceBuildTargets"))
76+
5377
override def workspaceReload(): CompletableFuture[Object] =
54-
forwardTo.workspaceReload().handleAsync(fatalExceptionHandler)
78+
forwardTo.workspaceReload()
79+
.handleAsync(fatalExceptionHandler("workspaceReload"))
80+
5581
override def buildTargetDependencyModules(params: DependencyModulesParams)
5682
: CompletableFuture[DependencyModulesResult] =
57-
forwardTo.buildTargetDependencyModules(params).handleAsync(fatalExceptionHandler)
83+
forwardTo.buildTargetDependencyModules(params)
84+
.handleAsync(fatalExceptionHandler("buildTargetDependencyModules", params))
5885
}

0 commit comments

Comments
 (0)