diff options
author | Samvel Abrahamyan <samvel1024@gmail.com> | 2019-09-08 22:13:11 +0200 |
---|---|---|
committer | Samvel Abrahamyan <samvel1024@gmail.com> | 2019-10-12 14:33:17 +0200 |
commit | fc9b6e8b573fb2ad61801d0f335a05f07e3a2d83 (patch) | |
tree | 77d4441b271b315335131343c0b0883c767ea293 /scalalib/worker/src/ZincWorkerImpl.scala | |
parent | 91cddda19106c468fbc0422b6aefc62618a4e128 (diff) | |
download | mill-fc9b6e8b573fb2ad61801d0f335a05f07e3a2d83.tar.gz mill-fc9b6e8b573fb2ad61801d0f335a05f07e3a2d83.tar.bz2 mill-fc9b6e8b573fb2ad61801d0f335a05f07e3a2d83.zip |
Remove the dependency to bsp and zinc from core modules
Diffstat (limited to 'scalalib/worker/src/ZincWorkerImpl.scala')
-rw-r--r-- | scalalib/worker/src/ZincWorkerImpl.scala | 77 |
1 files changed, 66 insertions, 11 deletions
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 |