diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-12-05 22:29:57 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-12-05 22:29:57 -0800 |
commit | 5f2d41621915c0ff5337470915d18d167f6d20a0 (patch) | |
tree | 5d4762aa65b8e515e39b7df431d187bc05bf4891 /scalaplugin/src/main | |
parent | 7cd79bd7579bfdef0e3e13672ea90df904f6ab12 (diff) | |
download | mill-5f2d41621915c0ff5337470915d18d167f6d20a0.tar.gz mill-5f2d41621915c0ff5337470915d18d167f6d20a0.tar.bz2 mill-5f2d41621915c0ff5337470915d18d167f6d20a0.zip |
Hackily speed up repeated Scala compiles by keeping a global cache of hot ScalaInstance/Classloader instances around between compiles
Diffstat (limited to 'scalaplugin/src/main')
-rw-r--r-- | scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala index 001f5844..49d9660f 100644 --- a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala +++ b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala @@ -51,7 +51,6 @@ object ScalaModule{ .toIO } - val compilerJars = compilerClasspath.toArray.map(_.toIO) def binaryScalaVersion = scalaVersion.split('.').dropRight(1).mkString(".") val compilerBridgeJar = new java.io.File( @@ -60,7 +59,7 @@ object ScalaModule{ ) val classloaderSig = compilerClasspath.map(p => p.toString().hashCode + p.mtime.toMillis).sum - println("classloaderSig: " + classloaderSig) + val scalaInstance = scalaInstanceCache match{ case Some((k, v)) if k == classloaderSig => v case _ => @@ -76,16 +75,11 @@ object ScalaModule{ scalaInstance } - - - val scalac = ZincUtil.scalaCompiler(scalaInstance, compilerBridgeJar) - mkdir(ctx.dest) val ic = new sbt.internal.inc.IncrementalCompilerImpl() val logger = { - val consoleAppender = MainAppender.defaultScreen(ConsoleOut.printStreamOut( ctx.log.outputStream )) @@ -94,23 +88,13 @@ object ScalaModule{ LogExchange.bindLoggerAppenders("Hello", (consoleAppender -> sbt.util.Level.Info) :: Nil) l } - val compiler = new IncrementalCompilerImpl - - - val cs = compiler.compilers(scalaInstance, ClasspathOptionsUtil.boot, None, scalac) val lookup = MockedLookup(Function.const(Optional.empty[CompileAnalysis])) - val reporter = new ManagedLoggedReporter(10, logger) - val extra = Array(InterfaceUtil.t2(("key", "value"))) - - val ignoreProgress = new CompileProgress { - override def advance(current: Int, total: Int): Boolean = true - override def startUnit(phase: String, unitPath: String): Unit = () - } val zincFile = (ctx.dest/'zinc).toIO val store = FileAnalysisStore.binary(zincFile) val classesDir = (ctx.dest / 'classes).toIO + val newResult = ic.compile( ic.inputs( classpath = classesDir +: compileClasspathFiles, @@ -121,16 +105,21 @@ object ScalaModule{ maxErrors = 10, sourcePositionMappers = Array(), order = CompileOrder.Mixed, - compilers = cs, + compilers = ic.compilers( + scalaInstance, + ClasspathOptionsUtil.boot, + None, + ZincUtil.scalaCompiler(scalaInstance, compilerBridgeJar) + ), setup = ic.setup( lookup, skip = false, zincFile, new FreshCompilerCache, IncOptions.of(), - reporter, - Some(ignoreProgress), - extra + new ManagedLoggedReporter(10, logger), + None, + Array() ), pr = { val prev = store.get() |