diff options
Diffstat (limited to 'scalalib')
-rw-r--r-- | scalalib/api/src/ZincWorkerApi.scala | 9 | ||||
-rw-r--r-- | scalalib/src/JavaModule.scala | 7 | ||||
-rw-r--r-- | scalalib/src/ScalaModule.scala | 5 | ||||
-rw-r--r-- | scalalib/src/TestRunner.scala | 4 | ||||
-rw-r--r-- | scalalib/worker/src/ZincWorkerImpl.scala | 77 |
5 files changed, 76 insertions, 26 deletions
diff --git a/scalalib/api/src/ZincWorkerApi.scala b/scalalib/api/src/ZincWorkerApi.scala index e80895d6..dfda44b8 100644 --- a/scalalib/api/src/ZincWorkerApi.scala +++ b/scalalib/api/src/ZincWorkerApi.scala @@ -1,9 +1,10 @@ package mill.scalalib.api import mill.api.Loose.Agg -import mill.api.PathRef +import mill.api.{PathRef, BuildProblemReporter} import mill.api.JsonFormatters._ -import sbt.internal.inc._ + + object ZincWorkerApi{ type Ctx = mill.api.Ctx.Dest with mill.api.Ctx.Log with mill.api.Ctx.Home @@ -14,7 +15,7 @@ trait ZincWorkerApi { sources: Agg[os.Path], compileClasspath: Agg[os.Path], javacOptions: Seq[String], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] /** Compile a mixed Scala/Java or Scala-only project */ @@ -27,7 +28,7 @@ trait ZincWorkerApi { scalacOptions: Seq[String], compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] def discoverMainClasses(compilationResult: CompilationResult) diff --git a/scalalib/src/JavaModule.scala b/scalalib/src/JavaModule.scala index 5405828f..051f6804 100644 --- a/scalalib/src/JavaModule.scala +++ b/scalalib/src/JavaModule.scala @@ -13,9 +13,6 @@ import mill.modules.Jvm.{createAssembly, createJar} import Lib._ import mill.scalalib.publish.{Artifact, Scope} import mill.api.Loose.Agg -import sbt.internal.inc.ManagedLoggedReporter -import sbt.internal.util.{ConsoleOut, MainAppender} -import sbt.util.LogExchange /** * Core configuration required to compile a single Scala compilation target @@ -221,7 +218,7 @@ trait JavaModule extends mill.Module with TaskModule with GenIdeaModule { outer upstreamCompileOutput(), allSourceFiles().map(_.path), compileClasspath().map(_.path), - javacOptions() ++ T.ctx().bsp.args, + javacOptions(), T.ctx().reporter(hashCode) ) } @@ -613,7 +610,7 @@ trait TestModule extends JavaModule with TaskModule { runClasspath().map(_.path), Agg(compile().classes.path), args, - T.ctx().bsp + T.ctx().testReporter ) TestModule.handleResults(doneMsg, results) diff --git a/scalalib/src/ScalaModule.scala b/scalalib/src/ScalaModule.scala index 5669ca8c..daf4adcc 100644 --- a/scalalib/src/ScalaModule.scala +++ b/scalalib/src/ScalaModule.scala @@ -10,9 +10,6 @@ import mill.scalalib.api.Util.isDotty import Lib._ import mill.api.Loose.Agg import mill.api.DummyInputStream -import sbt.internal.inc.ManagedLoggedReporter -import sbt.internal.util.{ConsoleOut, MainAppender} -import sbt.util.LogExchange /** * Core configuration required to compile a single Scala compilation target @@ -140,7 +137,7 @@ trait ScalaModule extends JavaModule { outer => javacOptions(), scalaVersion(), scalaOrganization(), - scalacOptions() ++ T.ctx.bsp.args, + scalacOptions(), scalaCompilerClasspath().map(_.path), scalacPluginClasspath().map(_.path), T.ctx().reporter(hashCode) diff --git a/scalalib/src/TestRunner.scala b/scalalib/src/TestRunner.scala index 2e6c2ba9..8d69723f 100644 --- a/scalalib/src/TestRunner.scala +++ b/scalalib/src/TestRunner.scala @@ -1,7 +1,7 @@ package mill.scalalib import ammonite.util.Colors import mill.Agg -import mill.api.{DummyReporter, TestReporter} +import mill.api.{DummyTestReporter, TestReporter} import mill.modules.Jvm import mill.scalalib.Lib.discoverTests import mill.util.{Ctx, PrintLogger} @@ -48,7 +48,7 @@ object TestRunner { entireClasspath = Agg.from(classpath.map(os.Path(_))), testClassfilePath = Agg(os.Path(testCp)), args = arguments, - DummyReporter + DummyTestReporter )(ctx) // Clear interrupted state in case some badly-behaved test suite diff --git a/scalalib/worker/src/ZincWorkerImpl.scala b/scalalib/worker/src/ZincWorkerImpl.scala index a1d632df..0f2cbf10 100644 --- a/scalalib/worker/src/ZincWorkerImpl.scala +++ b/scalalib/worker/src/ZincWorkerImpl.scala @@ -3,16 +3,17 @@ package mill.scalalib.worker import java.io.File import java.util.Optional -import scala.ref.WeakReference import mill.api.Loose.Agg -import mill.api.{KeyedLockedCache, PathRef} -import xsbti.compile.{CompilerCache => _, FileAnalysisStore => _, ScalaInstance => _, _} +import mill.api.{Info, KeyedLockedCache, PathRef, Problem, ProblemPosition, Severity, Warn, BuildProblemReporter} import mill.scalalib.api.Util.{grepJar, isDotty, scalaBinaryVersion} +import mill.scalalib.api.{CompilationResult, ZincWorkerApi} import sbt.internal.inc._ import sbt.internal.util.{ConsoleOut, MainAppender} import sbt.util.LogExchange -import mill.scalalib.api.{CompilationResult, ZincWorkerApi} -import upickle.core.Visitor +import xsbti.compile.{CompilerCache => _, FileAnalysisStore => _, ScalaInstance => _, _} + +import scala.ref.WeakReference + case class MockedLookup(am: File => Optional[CompileAnalysis]) extends PerClasspathEntryLookup { override def analysis(classpathEntry: File): Optional[CompileAnalysis] = am(classpathEntry) @@ -21,6 +22,45 @@ case class MockedLookup(am: File => Optional[CompileAnalysis]) extends PerClassp Locate.definesClass(classpathEntry) } +class ZincProblem(base: xsbti.Problem) extends Problem { + override def category: String = base.category() + + override def severity: Severity = base.severity() match { + case xsbti.Severity.Info => mill.api.Info + case xsbti.Severity.Warn => mill.api.Warn + case xsbti.Severity.Error => mill.api.Error + } + + override def message: String = base.message() + + override def position: ProblemPosition = new ZincProblemPosition(base.position()) +} + +class ZincProblemPosition(base: xsbti.Position) extends ProblemPosition { + + object JavaOptionConverter { + implicit def convertInt(x: Optional[Integer]): Option[Int] = if (x.isEmpty) None else Some(x.get().intValue()) + implicit def convert[T](x: Optional[T]): Option[T] = if (x.isEmpty) None else Some(x.get()) + } + + import JavaOptionConverter._ + + override def line: Option[Int] = base.line() + + override def lineContent: String = base.lineContent() + + override def offset: Option[Int] = base.offset() + + override def pointer: Option[Int] = base.pointer() + + override def pointerSpace: Option[String] = base.pointerSpace() + + override def sourcePath: Option[String] = base.sourcePath() + + override def sourceFile: Option[File] = base.sourceFile() +} + + class ZincWorkerImpl(compilerBridge: Either[ (ZincWorkerApi.Ctx, (String, String) => (Option[Array[os.Path]], os.Path)), String => os.Path @@ -156,7 +196,7 @@ class ZincWorkerImpl(compilerBridge: Either[ sources: Agg[os.Path], compileClasspath: Agg[os.Path], javacOptions: Seq[String], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] = { for(res <- compileJava0( @@ -171,7 +211,7 @@ class ZincWorkerImpl(compilerBridge: Either[ sources: Agg[os.Path], compileClasspath: Agg[os.Path], javacOptions: Seq[String], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[(os.Path, os.Path)] = { compileInternal( upstreamCompileOutput, @@ -193,7 +233,7 @@ class ZincWorkerImpl(compilerBridge: Either[ scalacOptions: Seq[String], compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] = { for (res <- compileMixed0( @@ -219,7 +259,7 @@ class ZincWorkerImpl(compilerBridge: Either[ scalacOptions: Seq[String], compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path], - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[(os.Path, os.Path)] = { withCompilers( scalaVersion, @@ -307,7 +347,7 @@ class ZincWorkerImpl(compilerBridge: Either[ javacOptions: Seq[String], scalacOptions: Seq[String], compilers: Compilers, - reporter: Option[ManagedLoggedReporter]) + reporter: Option[BuildProblemReporter]) (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[(os.Path, os.Path)] = { os.makeDir.all(ctx.dest) @@ -323,7 +363,22 @@ class ZincWorkerImpl(compilerBridge: Either[ } val newReporter = reporter match { case None => new ManagedLoggedReporter(10, logger) - case r: Option[ManagedLoggedReporter] => r.get + case Some(r) => new ManagedLoggedReporter(10, logger) { + override def logError(problem: xsbti.Problem): Unit = { + r.logError(new ZincProblem(problem)) + super.logError(problem) + } + + override def logWarning(problem: xsbti.Problem): Unit = { + r.logWarning(new ZincProblem(problem)) + super.logWarning(problem) + } + + override def logInfo(problem: xsbti.Problem): Unit = { + r.logInfo(new ZincProblem(problem)) + super.logInfo(problem) + } + } } val analysisMap0 = upstreamCompileOutput.map(_.swap).toMap |