From e7ac7323693edbdc350ec36b578ba3e101657360 Mon Sep 17 00:00:00 2001 From: Robby Date: Mon, 19 Mar 2018 10:13:03 -0500 Subject: Java 9 optimization by caching rt.jar (#239) * Upgraded Ammonite to 1.0.5-7-f032887 that includes a Java 9 performance optimization for mill's client-server mode (lihaoyi/Ammonite#773). * Java 9 optimization for interactive mode by caching rt.jar. * Refactored based on @lihaoyi's comments on #239. * Removed client side rt.jar caching. * Propagatio of home path from Cli. * Propagation, propagation, propagation! --- main/src/mill/Main.scala | 6 ++++-- main/src/mill/main/MainRunner.scala | 1 + main/src/mill/main/ReplApplyHandler.scala | 5 ++++- main/src/mill/main/RunScript.scala | 5 +++-- main/src/mill/modules/Jvm.scala | 3 ++- main/test/src/mill/util/TestEvaluator.scala | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) (limited to 'main') diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala index 6c10f6f2..a899c8c6 100644 --- a/main/src/mill/Main.scala +++ b/main/src/mill/Main.scala @@ -59,7 +59,7 @@ object Main { val millArgSignature = Cli.genericSignature.filter(a => !removed(a.name)) :+ interactiveSignature - val millHome = home / ".mill" / "ammonite" + val millHome = mill.util.Ctx.defaultHome Cli.groupArgs( args.toList, @@ -88,12 +88,14 @@ object Main { stderr.println("Build repl needs to be run with the -i/--interactive flag") (false, stateCache) }else{ + val tqs = "\"\"\"" val config = if(!repl) cliConfig else cliConfig.copy( predefCode = - """import $file.build, build._ + s"""import $$file.build, build._ |implicit val replApplyHandler = mill.main.ReplApplyHandler( + | ammonite.ops.Path($tqs${cliConfig.home.toIO.getCanonicalPath.replaceAllLiterally("$", "$$")}$tqs), | interp.colors(), | repl.pprinter(), | build.millSelf.get, diff --git a/main/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala index ff7bcbbd..efebd5a5 100644 --- a/main/src/mill/main/MainRunner.scala +++ b/main/src/mill/main/MainRunner.scala @@ -62,6 +62,7 @@ class MainRunner(val config: ammonite.main.Cli.Config, printing = true, mainCfg => { val (result, interpWatched) = RunScript.runScript( + config.home, mainCfg.wd, scriptPath, mainCfg.instantiateInterpreter(), diff --git a/main/src/mill/main/ReplApplyHandler.scala b/main/src/mill/main/ReplApplyHandler.scala index a2b042ad..9ce30142 100644 --- a/main/src/mill/main/ReplApplyHandler.scala +++ b/main/src/mill/main/ReplApplyHandler.scala @@ -1,6 +1,7 @@ package mill.main +import ammonite.ops.Path import mill.define.Applicative.ApplyHandler import mill.define.Segment.Label import mill.define._ @@ -9,13 +10,15 @@ import mill.util.Strict.Agg import scala.collection.mutable object ReplApplyHandler{ - def apply[T](colors: ammonite.util.Colors, + def apply[T](home: Path, + colors: ammonite.util.Colors, pprinter0: pprint.PPrinter, rootModule: mill.define.BaseModule, discover: Discover[_]) = { new ReplApplyHandler( pprinter0, new Evaluator( + home, ammonite.ops.pwd / 'out, ammonite.ops.pwd / 'out, rootModule, diff --git a/main/src/mill/main/RunScript.scala b/main/src/mill/main/RunScript.scala index 553f5b69..4d8653fb 100644 --- a/main/src/mill/main/RunScript.scala +++ b/main/src/mill/main/RunScript.scala @@ -23,7 +23,8 @@ import scala.reflect.ClassTag * subsystem */ object RunScript{ - def runScript(wd: Path, + def runScript(home: Path, + wd: Path, path: Path, instantiateInterpreter: => Either[(Res.Failing, Seq[(Path, Long)]), ammonite.interp.Interpreter], scriptArgs: Seq[String], @@ -52,7 +53,7 @@ object RunScript{ val evalRes = for(s <- evalState) - yield new Evaluator[Any](wd / 'out, wd / 'out, s.rootModule, log, s.classLoaderSig, s.workerCache) + yield new Evaluator[Any](home, wd / 'out, wd / 'out, s.rootModule, log, s.classLoaderSig, s.workerCache) val evaluated = for{ evaluator <- evalRes diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index d71cf75c..2ded95db 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -101,7 +101,8 @@ object Jvm { def inprocess[T](classPath: Agg[Path], classLoaderOverrideSbtTesting: Boolean, - body: ClassLoader => T): T = { + body: ClassLoader => T) + (implicit ctx: Ctx.Home): T = { val cl = if (classLoaderOverrideSbtTesting) { val outerClassLoader = getClass.getClassLoader new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, mill.util.ClassLoader.create(Seq(), null)){ diff --git a/main/test/src/mill/util/TestEvaluator.scala b/main/test/src/mill/util/TestEvaluator.scala index 078254f1..ffff4b99 100644 --- a/main/test/src/mill/util/TestEvaluator.scala +++ b/main/test/src/mill/util/TestEvaluator.scala @@ -30,7 +30,7 @@ class TestEvaluator[T <: TestUtil.BaseModule](module: T) // true, // ammonite.util.Colors.Default, System.out, System.out, System.err, System.in // ) - val evaluator = new Evaluator(outPath, TestEvaluator.externalOutPath, module, logger) + val evaluator = new Evaluator(Ctx.defaultHome, outPath, TestEvaluator.externalOutPath, module, logger) def apply[T](t: Task[T]): Either[Result.Failing[T], (T, Int)] = { val evaluated = evaluator.evaluate(Agg(t)) -- cgit v1.2.3