@@ -3,17 +3,19 @@ package mill.bsp.worker
33import ch .epfl .scala .bsp4j
44import ch .epfl .scala .bsp4j ._
55import com .google .gson .JsonObject
6- import mill .api .{DummyTestReporter , Result , Strict }
6+ import mill .api .Loose .Agg
7+ import mill .api .{CompileProblemReporter , DummyTestReporter , Result , Strict , TestReporter }
78import mill .bsp .{BspServerResult , Constants }
89import mill .bsp .worker .Utils .{makeBuildTarget , outputPaths , sanitizeUri }
910import mill .define .Segment .Label
10- import mill .define .{Args , Discover , ExternalModule , Task }
11+ import mill .define .{Args , Discover , ExternalModule , NamedTask , Task }
1112import mill .eval .Evaluator
1213import mill .eval .Evaluator .TaskResult
1314import mill .main .MainModule
1415import mill .runner .MillBuildRootModule
1516import mill .scalalib .bsp .{BspModule , JvmBuildTarget , ScalaBuildTarget }
1617import mill .scalalib .{JavaModule , SemanticDbJavaModule , TestModule }
18+ import mill .util .ColorLogger
1719
1820import java .io .PrintStream
1921import java .util .concurrent .CompletableFuture
@@ -393,7 +395,8 @@ private class MillBuildServer(
393395 val result = compileTasksEvs
394396 .groupMap(_._2)(_._1)
395397 .map { case (ev, ts) =>
396- ev.evaluate(
398+ evaluate(
399+ ev,
397400 ts,
398401 Utils .getBspLoggedReporterPool(p.getOriginId, state.bspIdByModule, client),
399402 DummyTestReporter ,
@@ -443,7 +446,8 @@ private class MillBuildServer(
443446
444447 val args = params.getArguments.getOrElse(Seq .empty[String ])
445448 val runTask = module.run(Task .Anon (Args (args)))
446- val runResult = ev.evaluate(
449+ val runResult = evaluate(
450+ ev,
447451 Strict .Agg (runTask),
448452 Utils .getBspLoggedReporterPool(runParams.getOriginId, state.bspIdByModule, client),
449453 logger = new MillBspLogger (client, runTask.hashCode(), ev.baseLogger)
@@ -508,7 +512,8 @@ private class MillBuildServer(
508512 Seq .empty[String ]
509513 )
510514
511- val results = ev.evaluate(
515+ val results = evaluate(
516+ ev,
512517 Strict .Agg (testTask),
513518 Utils .getBspLoggedReporterPool(
514519 testParams.getOriginId,
@@ -568,7 +573,8 @@ private class MillBuildServer(
568573 val compileTargetName = (module.millModuleSegments ++ Label (" compile" )).render
569574 debug(s " about to clean: ${compileTargetName}" )
570575 val cleanTask = mainModule.clean(ev, Seq (compileTargetName): _* )
571- val cleanResult = ev.evaluate(
576+ val cleanResult = evaluate(
577+ ev,
572578 Strict .Agg (cleanTask),
573579 logger = new MillBspLogger (client, cleanTask.hashCode, ev.baseLogger)
574580 )
@@ -642,7 +648,7 @@ private class MillBuildServer(
642648 // group by evaluator (different root module)
643649 val evaluated = groupList(tasksSeq.toSeq)(_._2)(_._1)
644650 .map { case ((ev, id), ts) =>
645- val results = ev. evaluate(ts)
651+ val results = evaluate(ev, ts)
646652 val failures = results.results.collect {
647653 case (_, TaskResult (res : Result .Failing [_], _)) => res
648654 }
@@ -768,6 +774,34 @@ private class MillBuildServer(
768774 override def onRunReadStdin (params : ReadParams ): Unit = {
769775 debug(" onRunReadStdin is current unsupported" )
770776 }
777+
778+ private def evaluate (
779+ evaluator : Evaluator ,
780+ goals : Agg [Task [_]],
781+ reporter : Int => Option [CompileProblemReporter ] = _ => Option .empty[CompileProblemReporter ],
782+ testReporter : TestReporter = DummyTestReporter ,
783+ logger : ColorLogger = null
784+ ): Evaluator .Results = {
785+ val logger0 = Option (logger).getOrElse(evaluator.baseLogger)
786+ mill.runner.MillMain .withOutLock(
787+ noBuildLock = false ,
788+ noWaitForBuildLock = false ,
789+ out = evaluator.outPath,
790+ targetsAndParams = goals.toSeq.map {
791+ case n : NamedTask [_] => n.label
792+ case t => t.toString
793+ },
794+ streams = logger0.systemStreams
795+ ) {
796+ evaluator.evaluate(
797+ goals,
798+ reporter,
799+ testReporter,
800+ logger0,
801+ serialCommandExec = false
802+ )
803+ }
804+ }
771805}
772806
773807private object MillBuildServer {
0 commit comments