diff options
17 files changed, 87 insertions, 80 deletions
@@ -165,3 +165,4 @@ def releaseAssembly = T{ assemblyBase(assemblyClasspath().flatten, "") } +def idea = T{ mill.scalaplugin.GenIdea() }
\ No newline at end of file diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala index 4f0ace0c..5ca89793 100644 --- a/core/src/main/scala/mill/eval/Evaluator.scala +++ b/core/src/main/scala/mill/eval/Evaluator.scala @@ -13,10 +13,12 @@ import mill.util._ import scala.collection.mutable -class Evaluator(workspacePath: Path, - labeling: Map[Target[_], LabelledTarget[_]], - log: Logger, - val classLoaderSig: Seq[(Path, Long)] = Evaluator.classLoaderSig){ +class Evaluator[T](workspacePath: Path, + val mapping: Discovered.Mapping[T], + log: Logger, + val classLoaderSig: Seq[(Path, Long)] = Evaluator.classLoaderSig){ + + val labeling = mapping.value val workerCache = mutable.Map.empty[Ctx.Loader[_], Any] def evaluate(goals: OSet[Task[_]]): Evaluator.Results = { @@ -48,15 +50,7 @@ class Evaluator(workspacePath: Path, Evaluator.Results(goals.indexed.map(results), evaluated, transitive, failing) } - def resolveDestPaths(t: LabelledTarget[_]): (Path, Path) = { - val segmentStrings = t.segments.flatMap{ - case Mirror.Segment.Label(s) => Seq(s) - case Mirror.Segment.Cross(values) => values.map(_.toString) - } - val targetDestPath = workspacePath / segmentStrings - val metadataPath = targetDestPath / up / (targetDestPath.last + ".mill.json") - (targetDestPath, metadataPath) - } + def evaluateGroupCached(terminal: Either[Task[_], LabelledTarget[_]], group: OSet[Task[_]], @@ -74,7 +68,7 @@ class Evaluator(workspacePath: Path, case Left(task) => evaluateGroup(group, results, targetDestPath = None, maybeTargetLabel = None) case Right(labelledTarget) => - val (destPath, metadataPath) = resolveDestPaths(labelledTarget) + val (destPath, metadataPath) = Evaluator.resolveDestPaths(workspacePath, labelledTarget) val cached = for{ json <- scala.util.Try(upickle.json.read(read(metadataPath))).toOption (cachedHash, terminalResult) <- scala.util.Try(upickle.default.readJs[(Int, upickle.Js.Value)](json)).toOption @@ -168,7 +162,8 @@ class Evaluator(workspacePath: Path, def load[T](x: Ctx.Loader[T]): T = { workerCache.getOrElseUpdate(x, x.make()).asInstanceOf[T] } - } + }, + mapping ) val out = System.out @@ -211,6 +206,16 @@ class Evaluator(workspacePath: Path, object Evaluator{ + def resolveDestPaths(workspacePath: Path, t: LabelledTarget[_]): (Path, Path) = { + val segmentStrings = t.segments.flatMap{ + case Mirror.Segment.Label(s) => Seq(s) + case Mirror.Segment.Cross(values) => values.map(_.toString) + } + val targetDestPath = workspacePath / segmentStrings + val metadataPath = targetDestPath / up / (targetDestPath.last + ".mill.json") + (targetDestPath, metadataPath) + } + // check if the build itself has changed def classLoaderSig = Thread.currentThread().getContextClassLoader match { case scl: SpecialClassLoader => scl.classpathSignature diff --git a/core/src/main/scala/mill/main/MainRunner.scala b/core/src/main/scala/mill/main/MainRunner.scala index 9239463f..b99c4dc4 100644 --- a/core/src/main/scala/mill/main/MainRunner.scala +++ b/core/src/main/scala/mill/main/MainRunner.scala @@ -9,7 +9,7 @@ class MainRunner(config: ammonite.main.Cli.Config) config, System.out, System.err, System.in, System.out, System.err ){ - var lastEvaluator: Option[(Seq[(Path, Long)], Discovered.Mapping[_], Evaluator)] = None + var lastEvaluator: Option[(Seq[(Path, Long)], Discovered.Mapping[_], Evaluator[_])] = None override def runScript(scriptPath: Path, scriptArgs: List[String]) = watchLoop( isRepl = false, diff --git a/core/src/main/scala/mill/main/MainWrapper.scala b/core/src/main/scala/mill/main/MainWrapper.scala index 813cd06b..403740aa 100644 --- a/core/src/main/scala/mill/main/MainWrapper.scala +++ b/core/src/main/scala/mill/main/MainWrapper.scala @@ -12,7 +12,7 @@ trait MainWrapper[T]{ new mill.main.ReplApplyHandler( new mill.eval.Evaluator( ammonite.ops.pwd / 'out, - mapping.value, + mapping, new mill.util.PrintLogger(true) ) ) diff --git a/core/src/main/scala/mill/main/ReplApplyHandler.scala b/core/src/main/scala/mill/main/ReplApplyHandler.scala index bb55c03f..f91d0ff2 100644 --- a/core/src/main/scala/mill/main/ReplApplyHandler.scala +++ b/core/src/main/scala/mill/main/ReplApplyHandler.scala @@ -6,7 +6,7 @@ import mill.define.Task import mill.eval.Evaluator import mill.util.{OSet} -class ReplApplyHandler(evaluator: Evaluator) extends ApplyHandler[Task] { +class ReplApplyHandler(evaluator: Evaluator[_]) extends ApplyHandler[Task] { // Evaluate classLoaderSig only once in the REPL to avoid busting caches // as the user enters more REPL commands and changes the classpath val classLoaderSig = Evaluator.classLoaderSig diff --git a/core/src/main/scala/mill/main/RunScript.scala b/core/src/main/scala/mill/main/RunScript.scala index 14d521fe..decc18a0 100644 --- a/core/src/main/scala/mill/main/RunScript.scala +++ b/core/src/main/scala/mill/main/RunScript.scala @@ -25,8 +25,8 @@ object RunScript{ path: Path, interp: ammonite.interp.Interpreter, scriptArgs: Seq[String], - lastEvaluator: Option[(Seq[(Path, Long)], Discovered.Mapping[_], Evaluator)]) - : Res[(Discovered.Mapping[_], Evaluator, Seq[(Path, Long)], Boolean)] = { + lastEvaluator: Option[(Seq[(Path, Long)], Discovered.Mapping[_], Evaluator[_])]) + : Res[(Discovered.Mapping[_], Evaluator[_], Seq[(Path, Long)], Boolean)] = { val log = new PrintLogger(true) for{ @@ -38,13 +38,12 @@ object RunScript{ case _ => interp.watch(path) for(mapping <- evaluateMapping(wd, path, interp)) - yield (mapping, new Evaluator(pwd / 'out, mapping.value, log)) + yield (mapping, new Evaluator(pwd / 'out, mapping, log)) } } yield { val evaluationWatches = mutable.Buffer.empty[(Path, Long)] val res = evaluateTarget( evaluator, - mapping, scriptArgs, p => evaluationWatches.append((p, Interpreter.pathSignature(p))) ) @@ -95,8 +94,7 @@ object RunScript{ _ <- Res(consistencyCheck(mapping)) } yield mapping } - def evaluateTarget[T](evaluator: Evaluator, - mapping: Discovered.Mapping[T], + def evaluateTarget[T](evaluator: Evaluator[_], scriptArgs: Seq[String], watch: Path => Unit) = { @@ -107,11 +105,11 @@ object RunScript{ case Mirror.Segment.Cross(x) => x.toList.map(_.toString) case _ => Nil } - target <- mill.main.Resolve.resolve(sel, mapping.mirror, mapping.base, rest, crossSelectors, Nil) + target <- mill.main.Resolve.resolve(sel, evaluator.mapping.mirror, evaluator.mapping.base, rest, crossSelectors, Nil) _ <- evaluate(evaluator, target, watch).toLeft(()) } yield () } - def evaluate(evaluator: Evaluator, + def evaluate(evaluator: Evaluator[_], target: Task[Any], watch: Path => Unit): Option[String] = { val evaluated = evaluator.evaluate(OSet(target)) diff --git a/core/src/main/scala/mill/util/Ctx.scala b/core/src/main/scala/mill/util/Ctx.scala index 6549531f..ad9b32db 100644 --- a/core/src/main/scala/mill/util/Ctx.scala +++ b/core/src/main/scala/mill/util/Ctx.scala @@ -2,7 +2,7 @@ package mill.util import ammonite.ops.Path import mill.define.Applicative.ImplicitStub -import mill.util.Ctx.{ArgCtx, DestCtx, LoaderCtx, LogCtx} +import mill.util.Ctx.{ArgCtx, DestCtx, LoaderCtx, LogCtx, MappingCtx} import scala.annotation.compileTimeOnly import scala.language.implicitConversions @@ -31,11 +31,20 @@ object Ctx{ trait Loader[T]{ def make(): T } + trait MappingCtx{ + def mapping: mill.discover.Discovered.Mapping[_] + } } class Ctx(val args: IndexedSeq[_], val dest: Path, val log: Logger, - workerCtx0: Ctx.LoaderCtx) extends DestCtx with LogCtx with ArgCtx with LoaderCtx{ + workerCtx0: Ctx.LoaderCtx, + val mapping: mill.discover.Discovered.Mapping[_]) + extends DestCtx + with LogCtx + with ArgCtx + with LoaderCtx + with MappingCtx{ def load[T](x: Ctx.Loader[T]): T = workerCtx0.load(x) def length = args.length diff --git a/core/src/test/scala/mill/define/CacherTests.scala b/core/src/test/scala/mill/define/CacherTests.scala index fe8e1b89..d85e9e6b 100644 --- a/core/src/test/scala/mill/define/CacherTests.scala +++ b/core/src/test/scala/mill/define/CacherTests.scala @@ -29,7 +29,7 @@ object CacherTests extends TestSuite{ def eval[V](mapping: Discovered.Mapping[_], v: Task[V])(implicit tp: TestPath) = { val workspace = ammonite.ops.pwd / 'target / 'workspace / tp.value - val evaluator = new Evaluator(workspace, mapping.value, DummyLogger) + val evaluator = new Evaluator(workspace, mapping, DummyLogger) evaluator.evaluate(OSet(v)).values(0) } diff --git a/core/src/test/scala/mill/eval/EvaluationTests.scala b/core/src/test/scala/mill/eval/EvaluationTests.scala index 31a330d1..8b13987b 100644 --- a/core/src/test/scala/mill/eval/EvaluationTests.scala +++ b/core/src/test/scala/mill/eval/EvaluationTests.scala @@ -15,7 +15,7 @@ object EvaluationTests extends TestSuite{ val workspace = ammonite.ops.pwd / 'target / 'workspace / tp.value ammonite.ops.rm(ammonite.ops.Path(workspace, ammonite.ops.pwd)) // Make sure data is persisted even if we re-create the evaluator each time - def evaluator = new Evaluator(workspace, mapping.value, DummyLogger) + def evaluator = new Evaluator(workspace, mapping, DummyLogger) def apply(target: Task[_], expValue: Any, expEvaled: OSet[Task[_]], diff --git a/core/src/test/scala/mill/eval/FailureTests.scala b/core/src/test/scala/mill/eval/FailureTests.scala index 84b13af5..42331a74 100644 --- a/core/src/test/scala/mill/eval/FailureTests.scala +++ b/core/src/test/scala/mill/eval/FailureTests.scala @@ -14,7 +14,7 @@ object FailureTests extends TestSuite{ } class Checker(mapping: Discovered.Mapping[_])(implicit tp: TestPath){ - val evaluator = new Evaluator(workspace, mapping.value, DummyLogger) + val evaluator = new Evaluator(workspace, mapping, DummyLogger) def apply(target: Target[_], expectedFailCount: Int, expectedRawValues: Seq[Result[_]]) = { diff --git a/core/src/test/scala/mill/eval/JavaCompileJarTests.scala b/core/src/test/scala/mill/eval/JavaCompileJarTests.scala index 356ffea1..7587b3d9 100644 --- a/core/src/test/scala/mill/eval/JavaCompileJarTests.scala +++ b/core/src/test/scala/mill/eval/JavaCompileJarTests.scala @@ -51,7 +51,7 @@ object JavaCompileJarTests extends TestSuite{ val mapping = Discovered.mapping(Build) def eval[T](t: Task[T]): Either[Result.Failing, (T, Int)] = { - val evaluator = new Evaluator(workspacePath, mapping.value, DummyLogger) + val evaluator = new Evaluator(workspacePath, mapping, DummyLogger) val evaluated = evaluator.evaluate(OSet(t)) if (evaluated.failing.keyCount == 0){ @@ -68,7 +68,7 @@ object JavaCompileJarTests extends TestSuite{ } def check(targets: OSet[Task[_]], expected: OSet[Task[_]]) = { - val evaluator = new Evaluator(workspacePath, mapping.value, DummyLogger) + val evaluator = new Evaluator(workspacePath, mapping, DummyLogger) val evaluated = evaluator.evaluate(targets) .evaluated diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/GenIdea.scala b/scalaplugin/src/main/scala/mill/scalaplugin/GenIdea.scala index 07a9e998..86e33d8d 100644 --- a/scalaplugin/src/main/scala/mill/scalaplugin/GenIdea.scala +++ b/scalaplugin/src/main/scala/mill/scalaplugin/GenIdea.scala @@ -16,20 +16,19 @@ object GenIdea { val workspacePath = pwd / 'out - val evaluator = new Evaluator(workspacePath, mapping.value, new PrintLogger(true)) + val evaluator = new Evaluator(workspacePath, mapping, new PrintLogger(true)) for((relPath, xml) <- xmlFileLayout(mapping, evaluator)){ write.over(pwd/relPath, pp.format(xml)) } } - def xmlFileLayout[T](mapping: Discovered.Mapping[T], - evaluator: Evaluator): Seq[(RelPath, scala.xml.Node)] = { + def xmlFileLayout[T](evaluator: Evaluator): Seq[(RelPath, scala.xml.Node)] = { val modules = Mirror - .traverse(mapping.base, mapping.mirror){ (h, p) => - h.node(mapping.base, p.reverse.map{case Mirror.Segment.Cross(vs) => vs.toList case _ => Nil}.toList) match { + .traverse(evaluator.mapping.base, evaluator.mapping.mirror){ (h, p) => + h.node(evaluator.mapping.base, p.reverse.map{case Mirror.Segment.Cross(vs) => vs.toList case _ => Nil}.toList) match { case m: ScalaModule => Seq(p -> m) case _ => Nil } diff --git a/scalaplugin/src/test/scala/mill/scalaplugin/AcyclicTests.scala b/scalaplugin/src/test/scala/mill/scalaplugin/AcyclicTests.scala index 42d93c2a..71bf5213 100644 --- a/scalaplugin/src/test/scala/mill/scalaplugin/AcyclicTests.scala +++ b/scalaplugin/src/test/scala/mill/scalaplugin/AcyclicTests.scala @@ -53,15 +53,10 @@ object AcyclicTests extends TestSuite{ mkdir(workspacePath/up) cp(srcPath, workspacePath) val mapping = Discovered.mapping(AcyclicBuild) - def eval[T](t: Task[T]) = TestEvaluator.eval(mapping.value, workspacePath)(t) + val eval = new TestEvaluator(mapping, workspacePath) val packageScala = workspacePath/'src/'main/'scala/'acyclic/"package.scala" - 'scala210 - check("2.10.6", full = false) - 'scala211 - check("2.11.8", full = false) - 'scala2123 - check("2.12.3", full = true) - 'scala2124 - check("2.12.4", full = false) - val allBinaryVersions = Seq("2.10", "2.11", "2.12") def check(scalaVersion: String, full: Boolean) = { // Dependencies are right; make sure every dependency is of the correct @@ -115,5 +110,10 @@ object AcyclicTests extends TestSuite{ } } + 'scala210 - check("2.10.6", full = false) + 'scala211 - check("2.11.8", full = false) + 'scala2123 - check("2.12.3", full = true) + 'scala2124 - check("2.12.4", full = false) + } } diff --git a/scalaplugin/src/test/scala/mill/scalaplugin/BetterFilesTests.scala b/scalaplugin/src/test/scala/mill/scalaplugin/BetterFilesTests.scala index c9c8618c..84e83a02 100644 --- a/scalaplugin/src/test/scala/mill/scalaplugin/BetterFilesTests.scala +++ b/scalaplugin/src/test/scala/mill/scalaplugin/BetterFilesTests.scala @@ -97,7 +97,7 @@ object BetterFilesTests extends TestSuite{ mkdir(workspacePath/up) cp(srcPath, workspacePath) val mapping = Discovered.mapping(BetterFilesBuild) - def eval[T](t: Task[T]) = TestEvaluator.eval(mapping.value, workspacePath)(t) + val eval = new TestEvaluator(mapping, workspacePath) 'test - { diff --git a/scalaplugin/src/test/scala/mill/scalaplugin/HelloWorldTests.scala b/scalaplugin/src/test/scala/mill/scalaplugin/HelloWorldTests.scala index 41783efb..2ada6463 100644 --- a/scalaplugin/src/test/scala/mill/scalaplugin/HelloWorldTests.scala +++ b/scalaplugin/src/test/scala/mill/scalaplugin/HelloWorldTests.scala @@ -6,7 +6,7 @@ import mill._ import mill.define.{Target, Task} import mill.discover.Discovered import mill.discover.Mirror.LabelledTarget -import mill.eval.Result +import mill.eval.{Evaluator, Result} import mill.scalaplugin.publish._ import sbt.internal.inc.CompileFailed import utest._ @@ -57,8 +57,10 @@ object HelloWorldTests extends TestSuite { val outputPath = workspacePath / 'out val mainObject = workspacePath / 'src / 'main / 'scala / "Main.scala" - def eval[T](t: Task[T], mapping: Map[Target[_], LabelledTarget[_]]) = - TestEvaluator.eval(mapping, outputPath)(t) + def eval[T](t: Task[T], mapping: Discovered.Mapping[_]) = { + val eval = new TestEvaluator(mapping, workspacePath) + eval(t) + } val helloWorldMapping = Discovered.mapping(HelloWorld) val helloWorldWithMainMapping = Discovered.mapping(HelloWorldWithMain) @@ -68,7 +70,7 @@ object HelloWorldTests extends TestSuite { 'scalaVersion - { 'fromBuild - { val Right((result, evalCount)) = - eval(HelloWorld.scalaVersion, helloWorldMapping.value) + eval(HelloWorld.scalaVersion, helloWorldMapping) assert( result == "2.12.4", @@ -82,7 +84,7 @@ object HelloWorldTests extends TestSuite { val Right((result, evalCount)) = eval(HelloWorldScalaOverride.scalaVersion, - Discovered.mapping(HelloWorldScalaOverride).value) + Discovered.mapping(HelloWorldScalaOverride)) assert( result == "2.11.11", @@ -93,7 +95,7 @@ object HelloWorldTests extends TestSuite { 'scalacOptions - { 'emptyByDefault - { val Right((result, evalCount)) = - eval(HelloWorld.scalacOptions, helloWorldMapping.value) + eval(HelloWorld.scalacOptions, helloWorldMapping) assert( result.isEmpty, @@ -103,7 +105,7 @@ object HelloWorldTests extends TestSuite { 'override - { val Right((result, evalCount)) = eval(HelloWorldFatalWarnings.scalacOptions, - Discovered.mapping(HelloWorldFatalWarnings).value) + Discovered.mapping(HelloWorldFatalWarnings)) assert( result == Seq("-Ywarn-unused", "-Xfatal-warnings"), @@ -114,7 +116,7 @@ object HelloWorldTests extends TestSuite { 'compile - { 'fromScratch - { val Right((result, evalCount)) = - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) val outPath = result.classes.path val analysisFile = result.analysisFile @@ -131,31 +133,30 @@ object HelloWorldTests extends TestSuite { // don't recompile if nothing changed val Right((_, unchangedEvalCount)) = - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) assert(unchangedEvalCount == 0) } 'recompileOnChange - { val Right((_, freshCount)) = - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) assert(freshCount > 0) write.append(mainObject, "\n") val Right((_, incCompileCount)) = - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) assert(incCompileCount > 0, incCompileCount < freshCount) } 'failOnError - { write.append(mainObject, "val x: ") val Left(Result.Exception(err)) = - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) assert(err.isInstanceOf[CompileFailed]) val (compilePath, compileMetadataPath) = - TestEvaluator.resolveDestPaths(outputPath)( - helloWorldMapping.value(HelloWorld.compile)) + Evaluator.resolveDestPaths(outputPath, helloWorldMapping.value(HelloWorld.compile)) assert( ls.rec(compilePath / 'classes).isEmpty, @@ -166,7 +167,7 @@ object HelloWorldTests extends TestSuite { // compilation fails because of "-Xfatal-warnings" flag val Left(Result.Exception(err)) = eval(HelloWorldFatalWarnings.compile, - Discovered.mapping(HelloWorldFatalWarnings).value) + Discovered.mapping(HelloWorldFatalWarnings)) assert(err.isInstanceOf[CompileFailed]) } @@ -174,7 +175,7 @@ object HelloWorldTests extends TestSuite { 'runMain - { 'runMainObject - { val Right((_, evalCount)) = - eval(HelloWorld.runMain("Main"), helloWorldMapping.value) + eval(HelloWorld.runMain("Main"), helloWorldMapping) assert(evalCount > 0) @@ -186,7 +187,7 @@ object HelloWorldTests extends TestSuite { } 'notRunInvalidMainObject - { val Left(Result.Exception(err)) = - eval(HelloWorld.runMain("Invalid"), helloWorldMapping.value) + eval(HelloWorld.runMain("Invalid"), helloWorldMapping) assert( err.isInstanceOf[InteractiveShelloutException] @@ -196,7 +197,7 @@ object HelloWorldTests extends TestSuite { write.append(mainObject, "val x: ") val Left(Result.Exception(err)) = - eval(HelloWorld.runMain("Main"), helloWorldMapping.value) + eval(HelloWorld.runMain("Main"), helloWorldMapping) assert( err.isInstanceOf[CompileFailed] @@ -206,7 +207,7 @@ object HelloWorldTests extends TestSuite { 'run - { 'runIfMainClassProvided - { val Right((_, evalCount)) = - eval(HelloWorldWithMain.run(), helloWorldWithMainMapping.value) + eval(HelloWorldWithMain.run(), helloWorldWithMainMapping) assert(evalCount > 0) @@ -218,7 +219,7 @@ object HelloWorldTests extends TestSuite { } 'notRunWithoutMainClass - { val Left(Result.Exception(err)) = - eval(HelloWorld.run(), helloWorldMapping.value) + eval(HelloWorld.run(), helloWorldMapping) assert( err.isInstanceOf[RuntimeException] @@ -228,7 +229,7 @@ object HelloWorldTests extends TestSuite { 'jar - { 'nonEmpty - { val Right((result, evalCount)) = - eval(HelloWorld.jar, helloWorldMapping.value) + eval(HelloWorld.jar, helloWorldMapping) assert( exists(result.path), @@ -253,7 +254,7 @@ object HelloWorldTests extends TestSuite { } 'runJar - { val Right((result, evalCount)) = - eval(HelloWorldWithMain.jar, helloWorldWithMainMapping.value) + eval(HelloWorldWithMain.jar, helloWorldWithMainMapping) assert( exists(result.path), @@ -269,7 +270,7 @@ object HelloWorldTests extends TestSuite { ) } 'logOutputToFile { - eval(HelloWorld.compile, helloWorldMapping.value) + eval(HelloWorld.compile, helloWorldMapping) val logFile = outputPath / "compile.log" assert(exists(logFile)) diff --git a/scalaplugin/src/test/scala/mill/scalaplugin/JawnTests.scala b/scalaplugin/src/test/scala/mill/scalaplugin/JawnTests.scala index 892857c9..97dff017 100644 --- a/scalaplugin/src/test/scala/mill/scalaplugin/JawnTests.scala +++ b/scalaplugin/src/test/scala/mill/scalaplugin/JawnTests.scala @@ -74,7 +74,7 @@ object JawnTests extends TestSuite{ mkdir(workspacePath/up) cp(srcPath, workspacePath) val mapping = Discovered.mapping(JawnBuild) - def eval[T](t: Task[T]) = TestEvaluator.eval(mapping.value, workspacePath)(t) + val eval = new TestEvaluator(mapping, workspacePath) 'test - { def compileOutput = workspacePath / 'jawn / "2.12.3" / 'Parser / 'compile diff --git a/scalaplugin/src/test/scala/mill/scalaplugin/TestEvaluator.scala b/scalaplugin/src/test/scala/mill/scalaplugin/TestEvaluator.scala index 58e4f5f3..05d53e8d 100644 --- a/scalaplugin/src/test/scala/mill/scalaplugin/TestEvaluator.scala +++ b/scalaplugin/src/test/scala/mill/scalaplugin/TestEvaluator.scala @@ -2,20 +2,14 @@ package mill.scalaplugin import ammonite.ops.Path import mill.define.{Target, Task} -import mill.discover.Mirror +import mill.discover.{Discovered, Mirror} import mill.eval.{Evaluator, Result} import mill.util.{DummyLogger, OSet, PrintLogger} -object TestEvaluator { +class TestEvaluator(mapping: Discovered.Mapping[_], workspacePath: Path){ + val evaluator = new Evaluator(workspacePath, mapping, DummyLogger) - - def resolveDestPaths(workspacePath: Path)(t: Mirror.LabelledTarget[_]): (Path, Path) = { - new Evaluator(workspacePath, Map.empty, DummyLogger).resolveDestPaths(t) - } - - def eval[T](mapping: Map[Target[_], Mirror.LabelledTarget[_]], - workspacePath: Path)(t: Task[T]): Either[Result.Failing, (T, Int)] = { - val evaluator = new Evaluator(workspacePath, mapping, DummyLogger) + def apply[T](t: Task[T]): Either[Result.Failing, (T, Int)] = { val evaluated = evaluator.evaluate(OSet(t)) if (evaluated.failing.keyCount == 0) { @@ -23,7 +17,7 @@ object TestEvaluator { Tuple2( evaluated.rawValues.head.asInstanceOf[Result.Success[T]].value, evaluated.evaluated.collect { - case t: Target[_] if mapping.contains(t) => t + case t: Target[_] if mapping.value.contains(t) => t case t: mill.define.Command[_] => t }.size )) |