summaryrefslogtreecommitdiff
path: root/scalalib
diff options
context:
space:
mode:
Diffstat (limited to 'scalalib')
-rw-r--r--scalalib/api/src/ZincWorkerApi.scala9
-rw-r--r--scalalib/src/JavaModule.scala7
-rw-r--r--scalalib/src/ScalaModule.scala5
-rw-r--r--scalalib/src/TestRunner.scala4
-rw-r--r--scalalib/worker/src/ZincWorkerImpl.scala77
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