diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala index d191c498d84..6b90138d189 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/BuildTargetClassesFinder.scala @@ -143,6 +143,9 @@ class BuildTargetClassesFinder( case class BuildTargetNotFoundException(buildTargetName: String) extends Exception(s"Build target not found: $buildTargetName") +case class BuildTargetUndefinedException() + extends Exception("Debugger configuration is missing 'buildTarget' param.") + case class ClassNotFoundInBuildTargetException( className: String, buildTarget: b.BuildTarget diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala index faeac2535d9..1eb8fa44431 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugProvider.scala @@ -393,8 +393,8 @@ class DebugProvider( def resolveAttachRemoteParams( params: DebugUnresolvedAttachRemoteParams - ): Future[b.DebugSessionParams] = - buildTargets.findByDisplayName(params.buildTarget) match { + )(implicit ec: ExecutionContext): Future[b.DebugSessionParams] = { + val result = buildTargets.findByDisplayName(params.buildTarget) match { case Some(target) => Future.successful( new b.DebugSessionParams( @@ -404,8 +404,11 @@ class DebugProvider( ) ) case None => - Future.failed(new ju.NoSuchElementException(params.buildTarget)) + Future.failed(BuildTargetUndefinedException()) } + result.failed.foreach(reportErrors) + result + } private val reportErrors: PartialFunction[Throwable, Unit] = { case _ if buildClient.buildHasErrors => @@ -440,6 +443,10 @@ class DebugProvider( languageClient.showMessage( Messages.errorMessageParams(e.getMessage()) ) + case e: BuildTargetUndefinedException => + languageClient.showMessage( + Messages.errorMessageParams(e.getMessage()) + ) case e: NoTestsFoundException => languageClient.showMessage( Messages.errorMessageParams(e.getMessage())