diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-12-19 19:04:55 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-12-19 19:04:55 +0800 |
commit | 497f044545d8a8299c963e8e3dd5241882270362 (patch) | |
tree | d4e2fa124983377df9c2f8631ee4804a97cd74db /scalalib | |
parent | b44fe2753c62349b3b133d1da0e41a19178233a1 (diff) | |
parent | de175e69977082e35539097a54d381e465dddf8e (diff) | |
download | mill-497f044545d8a8299c963e8e3dd5241882270362.tar.gz mill-497f044545d8a8299c963e8e3dd5241882270362.tar.bz2 mill-497f044545d8a8299c963e8e3dd5241882270362.zip |
Merge branch 'master' into bump-zinc
Diffstat (limited to 'scalalib')
-rw-r--r-- | scalalib/api/src/ZincWorkerApi.scala (renamed from scalalib/api/src/mill/scalalib/api/ZincWorkerApi.scala) | 16 | ||||
-rw-r--r-- | scalalib/backgroundwrapper/src/BackgroundWrapper.java (renamed from scalalib/backgroundwrapper/src/mill/scalalib/backgroundwrapper/BackgroundWrapper.java) | 0 | ||||
-rw-r--r-- | scalalib/src/Dep.scala (renamed from scalalib/src/mill/scalalib/Dep.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/Dependency.scala (renamed from scalalib/src/mill/scalalib/Dependency.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/GenIdeaImpl.scala (renamed from scalalib/src/mill/scalalib/GenIdeaImpl.scala) | 6 | ||||
-rw-r--r-- | scalalib/src/JavaModule.scala (renamed from scalalib/src/mill/scalalib/JavaModule.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/Lib.scala (renamed from scalalib/src/mill/scalalib/Lib.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/MiscModule.scala (renamed from scalalib/src/mill/scalalib/MiscModule.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/PublishModule.scala (renamed from scalalib/src/mill/scalalib/PublishModule.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/ScalaModule.scala (renamed from scalalib/src/mill/scalalib/ScalaModule.scala) | 35 | ||||
-rw-r--r-- | scalalib/src/TestRunner.scala (renamed from scalalib/src/mill/scalalib/TestRunner.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/Versions.scala (renamed from scalalib/src/mill/scalalib/Versions.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/ZincWorkerModule.scala | 109 | ||||
-rw-r--r-- | scalalib/src/dependency/DependencyUpdatesImpl.scala (renamed from scalalib/src/mill/scalalib/dependency/DependencyUpdatesImpl.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/metadata/MavenMetadataLoader.scala (renamed from scalalib/src/mill/scalalib/dependency/metadata/MavenMetadataLoader.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/metadata/MetadataLoader.scala (renamed from scalalib/src/mill/scalalib/dependency/metadata/MetadataLoader.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/metadata/MetadataLoaderFactory.scala (renamed from scalalib/src/mill/scalalib/dependency/metadata/MetadataLoaderFactory.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/updates/ModuleDependenciesUpdates.scala (renamed from scalalib/src/mill/scalalib/dependency/updates/ModuleDependenciesUpdates.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/updates/UpdatesFinder.scala (renamed from scalalib/src/mill/scalalib/dependency/updates/UpdatesFinder.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/versions/ModuleDependenciesVersions.scala (renamed from scalalib/src/mill/scalalib/dependency/versions/ModuleDependenciesVersions.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/versions/Version.scala (renamed from scalalib/src/mill/scalalib/dependency/versions/Version.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/versions/VersionParser.scala (renamed from scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/dependency/versions/VersionsFinder.scala (renamed from scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ZincWorkerModule.scala | 56 | ||||
-rw-r--r-- | scalalib/src/package.scala (renamed from scalalib/src/mill/scalalib/package.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/Ivy.scala (renamed from scalalib/src/mill/scalalib/publish/Ivy.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/publish/JsonFormatters.scala (renamed from scalalib/src/mill/scalalib/publish/JsonFormatters.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/Licence.scala (renamed from scalalib/src/mill/scalalib/publish/Licence.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/LocalPublisher.scala (renamed from scalalib/src/mill/scalalib/publish/LocalPublisher.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/Pom.scala (renamed from scalalib/src/mill/scalalib/publish/Pom.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/publish/SonatypeHttpApi.scala (renamed from scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/SonatypePublisher.scala (renamed from scalalib/src/mill/scalalib/publish/SonatypePublisher.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/VersionControl.scala (renamed from scalalib/src/mill/scalalib/publish/VersionControl.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/package.scala (renamed from scalalib/src/mill/scalalib/publish/package.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/publish/settings.scala (renamed from scalalib/src/mill/scalalib/publish/settings.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/scalafmt/ScalafmtModule.scala (renamed from scalalib/src/mill/scalalib/scalafmt/ScalafmtModule.scala) | 0 | ||||
-rw-r--r-- | scalalib/src/scalafmt/ScalafmtWorker.scala (renamed from scalalib/src/mill/scalalib/scalafmt/ScalafmtWorker.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/resources/hello-java/app/src/Main.java (renamed from scalalib/test/resources/hello-java/app/src/hello/Main.java) | 0 | ||||
-rw-r--r-- | scalalib/test/resources/hello-java/app/test/src/MyAppTests.java (renamed from scalalib/test/resources/hello-java/app/test/src/hello/MyAppTests.java) | 0 | ||||
-rw-r--r-- | scalalib/test/resources/hello-java/core/src/Core.java (renamed from scalalib/test/resources/hello-java/core/src/hello/Core.java) | 0 | ||||
-rw-r--r-- | scalalib/test/resources/hello-java/core/test/src/MyCoreTests.java (renamed from scalalib/test/resources/hello-java/core/test/src/hello/MyCoreTests.java) | 0 | ||||
-rw-r--r-- | scalalib/test/src/GenIdeaTests.scala (renamed from scalalib/test/src/mill/scalalib/GenIdeaTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/HelloJavaTests.scala (renamed from scalalib/test/src/mill/scalalib/HelloJavaTests.scala) | 4 | ||||
-rw-r--r-- | scalalib/test/src/HelloWorldTests.scala (renamed from scalalib/test/src/mill/scalalib/HelloWorldTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/ResolveDepsTests.scala (renamed from scalalib/test/src/mill/scalalib/ResolveDepsTests.scala) | 2 | ||||
-rw-r--r-- | scalalib/test/src/VersionControlTests.scala (renamed from scalalib/test/src/mill/scalalib/VersionControlTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/dependency/metadata/MetadataLoaderFactoryTests.scala (renamed from scalalib/test/src/mill/scalalib/dependency/metadata/MetadataLoaderFactoryTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/dependency/updates/UpdatesFinderTests.scala (renamed from scalalib/test/src/mill/scalalib/dependency/updates/UpdatesFinderTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/dependency/versions/VersionTests.scala (renamed from scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/publish/IvyTests.scala (renamed from scalalib/test/src/mill/scalalib/publish/IvyTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/publish/PomTests.scala (renamed from scalalib/test/src/mill/scalalib/publish/PomTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/test/src/scalafmt/ScalafmtTests.scala (renamed from scalalib/test/src/mill/scalalib/scalafmt/ScalafmtTests.scala) | 0 | ||||
-rw-r--r-- | scalalib/worker/src/ZincWorkerImpl.scala (renamed from scalalib/worker/src/mill/scalalib/worker/ZincWorkerImpl.scala) | 199 |
53 files changed, 233 insertions, 204 deletions
diff --git a/scalalib/api/src/mill/scalalib/api/ZincWorkerApi.scala b/scalalib/api/src/ZincWorkerApi.scala index c5230ec5..d42be9f3 100644 --- a/scalalib/api/src/mill/scalalib/api/ZincWorkerApi.scala +++ b/scalalib/api/src/ZincWorkerApi.scala @@ -3,14 +3,16 @@ package mill.scalalib.api import mill.api.Loose.Agg import mill.api.PathRef import mill.api.JsonFormatters._ - +object ZincWorkerApi{ + type Ctx = mill.api.Ctx.Dest with mill.api.Ctx.Log with mill.api.Ctx.Home +} trait ZincWorkerApi { /** Compile a Java-only project */ def compileJava(upstreamCompileOutput: Seq[CompilationResult], sources: Agg[os.Path], compileClasspath: Agg[os.Path], javacOptions: Seq[String]) - (implicit ctx: mill.api.Ctx): mill.api.Result[CompilationResult] + (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] /** Compile a mixed Scala/Java or Scala-only project */ def compileMixed(upstreamCompileOutput: Seq[CompilationResult], @@ -18,21 +20,21 @@ trait ZincWorkerApi { compileClasspath: Agg[os.Path], javacOptions: Seq[String], scalaVersion: String, + scalaOrganization: String, scalacOptions: Seq[String], - compilerBridgeSources: os.Path, compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path]) - (implicit ctx: mill.api.Ctx): mill.api.Result[CompilationResult] + (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] def discoverMainClasses(compilationResult: CompilationResult) - (implicit ctx: mill.api.Ctx): Seq[String] + (implicit ctx: ZincWorkerApi.Ctx): Seq[String] def docJar(scalaVersion: String, - compilerBridgeSources: os.Path, + scalaOrganization: String, compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path], args: Seq[String]) - (implicit ctx: mill.api.Ctx): Boolean + (implicit ctx: ZincWorkerApi.Ctx): Boolean } diff --git a/scalalib/backgroundwrapper/src/mill/scalalib/backgroundwrapper/BackgroundWrapper.java b/scalalib/backgroundwrapper/src/BackgroundWrapper.java index 02ee23eb..02ee23eb 100644 --- a/scalalib/backgroundwrapper/src/mill/scalalib/backgroundwrapper/BackgroundWrapper.java +++ b/scalalib/backgroundwrapper/src/BackgroundWrapper.java diff --git a/scalalib/src/mill/scalalib/Dep.scala b/scalalib/src/Dep.scala index 714fa21e..714fa21e 100644 --- a/scalalib/src/mill/scalalib/Dep.scala +++ b/scalalib/src/Dep.scala diff --git a/scalalib/src/mill/scalalib/Dependency.scala b/scalalib/src/Dependency.scala index 0c589663..0c589663 100644 --- a/scalalib/src/mill/scalalib/Dependency.scala +++ b/scalalib/src/Dependency.scala diff --git a/scalalib/src/mill/scalalib/GenIdeaImpl.scala b/scalalib/src/GenIdeaImpl.scala index 2d76d804..b8f9d35e 100644 --- a/scalalib/src/mill/scalalib/GenIdeaImpl.scala +++ b/scalalib/src/GenIdeaImpl.scala @@ -5,8 +5,8 @@ import coursier.{Cache, CoursierPaths, Repository} import mill.define._ import mill.eval.{Evaluator, PathRef, Result} import mill.api.Ctx.{Home, Log} -import mill.util.Strict.Agg -import mill.util.{Loose, Strict} +import mill.api.Strict.Agg +import mill.api.{Loose, Strict} import mill.{T, scalalib} import scala.util.Try @@ -43,7 +43,7 @@ object GenIdeaImpl { val evaluator = new Evaluator(ctx.home, os.pwd / 'out, os.pwd / 'out, rootModule, ctx.log) for((relPath, xml) <- xmlFileLayout(evaluator, rootModule, jdkInfo)){ - os.write.over(os.pwd/relPath, pp.format(xml)) + os.write.over(os.pwd/relPath, pp.format(xml), createFolders = true) } } diff --git a/scalalib/src/mill/scalalib/JavaModule.scala b/scalalib/src/JavaModule.scala index 78be8893..72c0a5a6 100644 --- a/scalalib/src/mill/scalalib/JavaModule.scala +++ b/scalalib/src/JavaModule.scala @@ -9,7 +9,7 @@ import mill.modules.{Assembly, Jvm} import mill.modules.Jvm.{createAssembly, createJar} import Lib._ import mill.scalalib.publish.{Artifact, Scope} -import mill.util.Loose.Agg +import mill.api.Loose.Agg /** * Core configuration required to compile a single Scala compilation target diff --git a/scalalib/src/mill/scalalib/Lib.scala b/scalalib/src/Lib.scala index b8b253bd..b8b253bd 100644 --- a/scalalib/src/mill/scalalib/Lib.scala +++ b/scalalib/src/Lib.scala diff --git a/scalalib/src/mill/scalalib/MiscModule.scala b/scalalib/src/MiscModule.scala index c6449d6e..bf64f1f3 100644 --- a/scalalib/src/mill/scalalib/MiscModule.scala +++ b/scalalib/src/MiscModule.scala @@ -4,7 +4,7 @@ package scalalib import mill.define.Cross.Resolver import mill.define.{Cross, Task} import mill.eval.{PathRef, Result} -import mill.util.Loose.Agg +import mill.api.Loose.Agg object CrossModuleBase{ def scalaVersionPaths(scalaVersion: String, f: String => os.Path) = { for(segments <- scalaVersion.split('.').inits.filter(_.nonEmpty)) diff --git a/scalalib/src/mill/scalalib/PublishModule.scala b/scalalib/src/PublishModule.scala index 588781f4..588781f4 100644 --- a/scalalib/src/mill/scalalib/PublishModule.scala +++ b/scalalib/src/PublishModule.scala diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/ScalaModule.scala index 9d669bf4..5fad1664 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/ScalaModule.scala @@ -8,7 +8,7 @@ import mill.modules.Jvm import mill.modules.Jvm.createJar import mill.scalalib.api.Util.isDotty import Lib._ -import mill.util.Loose.Agg +import mill.api.Loose.Agg import mill.api.DummyInputStream /** @@ -79,36 +79,7 @@ trait ScalaModule extends JavaModule { outer => def scalaDocOptions = T{ scalacOptions() } - private val Milestone213 = raw"""2.13.(\d+)-M(\d+)""".r - def scalaCompilerBridgeSources = T { - val (scalaVersion0, scalaBinaryVersion0) = scalaVersion() match { - case Milestone213(_, _) => ("2.13.0-M2", "2.13.0-M2") - case _ => (scalaVersion(), mill.scalalib.api.Util.scalaBinaryVersion(scalaVersion())) - } - - val (bridgeDep, bridgeName, bridgeVersion) = - if (isDotty(scalaVersion0)) { - val org = scalaOrganization() - val name = "dotty-sbt-bridge" - val version = scalaVersion() - (ivy"$org:$name:$version", name, version) - } else { - val org = "org.scala-sbt" - val name = "compiler-bridge" - val version = Versions.zinc - (ivy"$org::$name:$version", s"${name}_$scalaBinaryVersion0", version) - } - - resolveDependencies( - repositories, - Lib.depToDependency(_, scalaVersion0, platformSuffix()), - Seq(bridgeDep), - sources = true - ).map(deps => - mill.scalalib.api.Util.grepJar(deps.map(_.path), bridgeName, bridgeVersion, sources = true) - ) - } /** * The local classpath of Scala compiler plugins on-disk; you can add @@ -159,8 +130,8 @@ trait ScalaModule extends JavaModule { outer => compileClasspath().map(_.path), javacOptions(), scalaVersion(), + scalaOrganization(), scalacOptions(), - scalaCompilerBridgeSources(), scalaCompilerClasspath().map(_.path), scalacPluginClasspath().map(_.path), ) @@ -187,7 +158,7 @@ trait ScalaModule extends JavaModule { outer => else { zincWorker.worker().docJar( scalaVersion(), - scalaCompilerBridgeSources(), + scalaOrganization(), scalaCompilerClasspath().map(_.path), scalacPluginClasspath().map(_.path), files ++ options diff --git a/scalalib/src/mill/scalalib/TestRunner.scala b/scalalib/src/TestRunner.scala index 42e65d63..42e65d63 100644 --- a/scalalib/src/mill/scalalib/TestRunner.scala +++ b/scalalib/src/TestRunner.scala diff --git a/scalalib/src/mill/scalalib/Versions.scala b/scalalib/src/Versions.scala index e3697abb..e3697abb 100644 --- a/scalalib/src/mill/scalalib/Versions.scala +++ b/scalalib/src/Versions.scala diff --git a/scalalib/src/ZincWorkerModule.scala b/scalalib/src/ZincWorkerModule.scala new file mode 100644 index 00000000..97d84aaf --- /dev/null +++ b/scalalib/src/ZincWorkerModule.scala @@ -0,0 +1,109 @@ +package mill.scalalib + +import coursier.Cache +import coursier.maven.MavenRepository +import mill.Agg +import mill.T +import mill.api.KeyedLockedCache +import mill.define.{Discover, Worker} +import mill.scalalib.Lib.resolveDependencies +import mill.scalalib.api.Util.isDotty +import mill.scalalib.api.ZincWorkerApi +import mill.api.Loose +import mill.util.JsonFormatters._ + +object ZincWorkerModule extends mill.define.ExternalModule with ZincWorkerModule{ + lazy val millDiscover = Discover[this.type] +} +trait ZincWorkerModule extends mill.Module{ + def repositories = Seq( + Cache.ivy2Local, + MavenRepository("https://repo1.maven.org/maven2"), + MavenRepository("https://oss.sonatype.org/content/repositories/releases") + ) + + def classpath = T{ + mill.modules.Util.millProjectModule("MILL_SCALA_WORKER", "mill-scalalib-worker", repositories) + } + + def scalalibClasspath = T{ + mill.modules.Util.millProjectModule("MILL_SCALA_LIB", "mill-scalalib", repositories) + } + + def backgroundWrapperClasspath = T{ + mill.modules.Util.millProjectModule( + "MILL_BACKGROUNDWRAPPER", "mill-scalalib-backgroundwrapper", + repositories, artifactSuffix = "" + ) + } + + def worker: Worker[mill.scalalib.api.ZincWorkerApi] = T.worker{ + val cl = mill.api.ClassLoader.create( + classpath().map(_.path.toNIO.toUri.toURL).toVector, + getClass.getClassLoader + ) + val cls = cl.loadClass("mill.scalalib.worker.ZincWorkerImpl") + val instance = cls.getConstructor( + classOf[ + Either[ + (ZincWorkerApi.Ctx, Array[os.Path], (String, String) => os.Path), + String => os.Path + ] + ], + classOf[(Agg[os.Path], String) => os.Path], + classOf[(Agg[os.Path], String) => os.Path], + classOf[KeyedLockedCache[_]] + ) + .newInstance( + Left(( + T.ctx(), + compilerInterfaceClasspath().map(_.path).toArray, + (x: String, y: String) => scalaCompilerBridgeSourceJar(x, y).asSuccess.get.value + )), + mill.scalalib.api.Util.grepJar(_, "scala-library", _, sources = false), + mill.scalalib.api.Util.grepJar(_, "scala-compiler", _, sources = false), + new KeyedLockedCache.RandomBoundedCache(1, 1) + ) + instance.asInstanceOf[mill.scalalib.api.ZincWorkerApi] + } + + private val Milestone213 = raw"""2.13.(\d+)-M(\d+)""".r + def scalaCompilerBridgeSourceJar(scalaVersion: String, + scalaOrganization: String) = { + val (scalaVersion0, scalaBinaryVersion0) = scalaVersion match { + case Milestone213(_, _) => ("2.13.0-M2", "2.13.0-M2") + case _ => (scalaVersion, mill.scalalib.api.Util.scalaBinaryVersion(scalaVersion)) + } + + val (bridgeDep, bridgeName, bridgeVersion) = + if (isDotty(scalaVersion0)) { + val org = scalaOrganization + val name = "dotty-sbt-bridge" + val version = scalaVersion + (ivy"$org:$name:$version", name, version) + } else { + val org = "org.scala-sbt" + val name = "compiler-bridge" + val version = Versions.zinc + (ivy"$org::$name:$version", s"${name}_$scalaBinaryVersion0", version) + } + + resolveDependencies( + repositories, + Lib.depToDependency(_, scalaVersion0, ""), + Seq(bridgeDep), + sources = true + ).map(deps => + mill.scalalib.api.Util.grepJar(deps.map(_.path), bridgeName, bridgeVersion, sources = true) + ) + } + + def compilerInterfaceClasspath = T{ + resolveDependencies( + repositories, + Lib.depToDependency(_, "2.12.4", ""), + Seq(ivy"org.scala-sbt:compiler-interface:${Versions.zinc}") + ) + } + +} diff --git a/scalalib/src/mill/scalalib/dependency/DependencyUpdatesImpl.scala b/scalalib/src/dependency/DependencyUpdatesImpl.scala index 3bb94202..3bb94202 100644 --- a/scalalib/src/mill/scalalib/dependency/DependencyUpdatesImpl.scala +++ b/scalalib/src/dependency/DependencyUpdatesImpl.scala diff --git a/scalalib/src/mill/scalalib/dependency/metadata/MavenMetadataLoader.scala b/scalalib/src/dependency/metadata/MavenMetadataLoader.scala index 491911bf..491911bf 100644 --- a/scalalib/src/mill/scalalib/dependency/metadata/MavenMetadataLoader.scala +++ b/scalalib/src/dependency/metadata/MavenMetadataLoader.scala diff --git a/scalalib/src/mill/scalalib/dependency/metadata/MetadataLoader.scala b/scalalib/src/dependency/metadata/MetadataLoader.scala index 20271f0e..20271f0e 100644 --- a/scalalib/src/mill/scalalib/dependency/metadata/MetadataLoader.scala +++ b/scalalib/src/dependency/metadata/MetadataLoader.scala diff --git a/scalalib/src/mill/scalalib/dependency/metadata/MetadataLoaderFactory.scala b/scalalib/src/dependency/metadata/MetadataLoaderFactory.scala index 4495d6b0..4495d6b0 100644 --- a/scalalib/src/mill/scalalib/dependency/metadata/MetadataLoaderFactory.scala +++ b/scalalib/src/dependency/metadata/MetadataLoaderFactory.scala diff --git a/scalalib/src/mill/scalalib/dependency/updates/ModuleDependenciesUpdates.scala b/scalalib/src/dependency/updates/ModuleDependenciesUpdates.scala index a989cd31..a989cd31 100644 --- a/scalalib/src/mill/scalalib/dependency/updates/ModuleDependenciesUpdates.scala +++ b/scalalib/src/dependency/updates/ModuleDependenciesUpdates.scala diff --git a/scalalib/src/mill/scalalib/dependency/updates/UpdatesFinder.scala b/scalalib/src/dependency/updates/UpdatesFinder.scala index 3430592f..3430592f 100644 --- a/scalalib/src/mill/scalalib/dependency/updates/UpdatesFinder.scala +++ b/scalalib/src/dependency/updates/UpdatesFinder.scala diff --git a/scalalib/src/mill/scalalib/dependency/versions/ModuleDependenciesVersions.scala b/scalalib/src/dependency/versions/ModuleDependenciesVersions.scala index 12d57059..12d57059 100644 --- a/scalalib/src/mill/scalalib/dependency/versions/ModuleDependenciesVersions.scala +++ b/scalalib/src/dependency/versions/ModuleDependenciesVersions.scala diff --git a/scalalib/src/mill/scalalib/dependency/versions/Version.scala b/scalalib/src/dependency/versions/Version.scala index a2719023..a2719023 100644 --- a/scalalib/src/mill/scalalib/dependency/versions/Version.scala +++ b/scalalib/src/dependency/versions/Version.scala diff --git a/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala b/scalalib/src/dependency/versions/VersionParser.scala index 10aebd73..10aebd73 100644 --- a/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala +++ b/scalalib/src/dependency/versions/VersionParser.scala diff --git a/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala b/scalalib/src/dependency/versions/VersionsFinder.scala index a831ffc3..a9ecc763 100644 --- a/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala +++ b/scalalib/src/dependency/versions/VersionsFinder.scala @@ -5,7 +5,7 @@ import mill.eval.Evaluator import mill.scalalib.dependency.metadata.MetadataLoaderFactory import mill.scalalib.{Dep, JavaModule, Lib} import mill.api.Ctx.{Home, Log} -import mill.util.{Loose, Strict} +import mill.api.{Loose, Strict} private[dependency] object VersionsFinder { diff --git a/scalalib/src/mill/scalalib/ZincWorkerModule.scala b/scalalib/src/mill/scalalib/ZincWorkerModule.scala deleted file mode 100644 index 5ca824ce..00000000 --- a/scalalib/src/mill/scalalib/ZincWorkerModule.scala +++ /dev/null @@ -1,56 +0,0 @@ -package mill.scalalib - -import coursier.Cache -import coursier.maven.MavenRepository -import mill.Agg -import mill.T -import mill.define.{Discover, Worker} -import mill.scalalib.Lib.resolveDependencies -import mill.util.Loose -import mill.util.JsonFormatters._ - -object ZincWorkerModule extends mill.define.ExternalModule with ZincWorkerModule{ - lazy val millDiscover = Discover[this.type] -} -trait ZincWorkerModule extends mill.Module{ - def repositories = Seq( - Cache.ivy2Local, - MavenRepository("https://repo1.maven.org/maven2"), - MavenRepository("https://oss.sonatype.org/content/repositories/releases") - ) - - def classpath = T{ - mill.modules.Util.millProjectModule("MILL_SCALA_WORKER", "mill-scalalib-worker", repositories) - } - - def scalalibClasspath = T{ - mill.modules.Util.millProjectModule("MILL_SCALA_LIB", "mill-scalalib", repositories) - } - - def backgroundWrapperClasspath = T{ - mill.modules.Util.millProjectModule( - "MILL_BACKGROUNDWRAPPER", "mill-scalalib-backgroundwrapper", - repositories, artifactSuffix = "" - ) - } - - def worker: Worker[mill.scalalib.api.ZincWorkerApi] = T.worker{ - val cl = mill.api.ClassLoader.create( - classpath().map(_.path.toNIO.toUri.toURL).toVector, - getClass.getClassLoader - ) - val cls = cl.loadClass("mill.scalalib.worker.ZincWorkerImpl") - val instance = cls.getConstructor(classOf[mill.api.Ctx], classOf[Array[String]]) - .newInstance(T.ctx(), compilerInterfaceClasspath().map(_.path.toString).toArray[String]) - instance.asInstanceOf[mill.scalalib.api.ZincWorkerApi] - } - - def compilerInterfaceClasspath = T{ - resolveDependencies( - repositories, - Lib.depToDependency(_, "2.12.4", ""), - Seq(ivy"org.scala-sbt:compiler-interface:${Versions.zinc}") - ) - } - -} diff --git a/scalalib/src/mill/scalalib/package.scala b/scalalib/src/package.scala index 5a282e82..5a282e82 100644 --- a/scalalib/src/mill/scalalib/package.scala +++ b/scalalib/src/package.scala diff --git a/scalalib/src/mill/scalalib/publish/Ivy.scala b/scalalib/src/publish/Ivy.scala index 22e26ff6..e06efadd 100644 --- a/scalalib/src/mill/scalalib/publish/Ivy.scala +++ b/scalalib/src/publish/Ivy.scala @@ -1,6 +1,6 @@ package mill.scalalib.publish -import mill.util.Loose.Agg +import mill.api.Loose.Agg import scala.xml.PrettyPrinter diff --git a/scalalib/src/mill/scalalib/publish/JsonFormatters.scala b/scalalib/src/publish/JsonFormatters.scala index 8fc90632..8fc90632 100644 --- a/scalalib/src/mill/scalalib/publish/JsonFormatters.scala +++ b/scalalib/src/publish/JsonFormatters.scala diff --git a/scalalib/src/mill/scalalib/publish/Licence.scala b/scalalib/src/publish/Licence.scala index 8838ef69..8838ef69 100644 --- a/scalalib/src/mill/scalalib/publish/Licence.scala +++ b/scalalib/src/publish/Licence.scala diff --git a/scalalib/src/mill/scalalib/publish/LocalPublisher.scala b/scalalib/src/publish/LocalPublisher.scala index d9839831..d9839831 100644 --- a/scalalib/src/mill/scalalib/publish/LocalPublisher.scala +++ b/scalalib/src/publish/LocalPublisher.scala diff --git a/scalalib/src/mill/scalalib/publish/Pom.scala b/scalalib/src/publish/Pom.scala index 57a0e196..a7f1f6fc 100644 --- a/scalalib/src/mill/scalalib/publish/Pom.scala +++ b/scalalib/src/publish/Pom.scala @@ -1,6 +1,6 @@ package mill.scalalib.publish -import mill.util.Loose.Agg +import mill.api.Loose.Agg import scala.xml.{Atom, Elem, NodeSeq, PrettyPrinter} diff --git a/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala b/scalalib/src/publish/SonatypeHttpApi.scala index 12defa93..12defa93 100644 --- a/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala +++ b/scalalib/src/publish/SonatypeHttpApi.scala diff --git a/scalalib/src/mill/scalalib/publish/SonatypePublisher.scala b/scalalib/src/publish/SonatypePublisher.scala index 1843943b..1843943b 100644 --- a/scalalib/src/mill/scalalib/publish/SonatypePublisher.scala +++ b/scalalib/src/publish/SonatypePublisher.scala diff --git a/scalalib/src/mill/scalalib/publish/VersionControl.scala b/scalalib/src/publish/VersionControl.scala index aad38ac3..aad38ac3 100644 --- a/scalalib/src/mill/scalalib/publish/VersionControl.scala +++ b/scalalib/src/publish/VersionControl.scala diff --git a/scalalib/src/mill/scalalib/publish/package.scala b/scalalib/src/publish/package.scala index 99eeec14..99eeec14 100644 --- a/scalalib/src/mill/scalalib/publish/package.scala +++ b/scalalib/src/publish/package.scala diff --git a/scalalib/src/mill/scalalib/publish/settings.scala b/scalalib/src/publish/settings.scala index bca81cf0..bca81cf0 100644 --- a/scalalib/src/mill/scalalib/publish/settings.scala +++ b/scalalib/src/publish/settings.scala diff --git a/scalalib/src/mill/scalalib/scalafmt/ScalafmtModule.scala b/scalalib/src/scalafmt/ScalafmtModule.scala index 6a81d975..6a81d975 100644 --- a/scalalib/src/mill/scalalib/scalafmt/ScalafmtModule.scala +++ b/scalalib/src/scalafmt/ScalafmtModule.scala diff --git a/scalalib/src/mill/scalalib/scalafmt/ScalafmtWorker.scala b/scalalib/src/scalafmt/ScalafmtWorker.scala index 47d8375f..47d8375f 100644 --- a/scalalib/src/mill/scalalib/scalafmt/ScalafmtWorker.scala +++ b/scalalib/src/scalafmt/ScalafmtWorker.scala diff --git a/scalalib/test/resources/hello-java/app/src/hello/Main.java b/scalalib/test/resources/hello-java/app/src/Main.java index 23ddd679..23ddd679 100644 --- a/scalalib/test/resources/hello-java/app/src/hello/Main.java +++ b/scalalib/test/resources/hello-java/app/src/Main.java diff --git a/scalalib/test/resources/hello-java/app/test/src/hello/MyAppTests.java b/scalalib/test/resources/hello-java/app/test/src/MyAppTests.java index df0d0351..df0d0351 100644 --- a/scalalib/test/resources/hello-java/app/test/src/hello/MyAppTests.java +++ b/scalalib/test/resources/hello-java/app/test/src/MyAppTests.java diff --git a/scalalib/test/resources/hello-java/core/src/hello/Core.java b/scalalib/test/resources/hello-java/core/src/Core.java index 3ecb1f61..3ecb1f61 100644 --- a/scalalib/test/resources/hello-java/core/src/hello/Core.java +++ b/scalalib/test/resources/hello-java/core/src/Core.java diff --git a/scalalib/test/resources/hello-java/core/test/src/hello/MyCoreTests.java b/scalalib/test/resources/hello-java/core/test/src/MyCoreTests.java index 38bebaeb..38bebaeb 100644 --- a/scalalib/test/resources/hello-java/core/test/src/hello/MyCoreTests.java +++ b/scalalib/test/resources/hello-java/core/test/src/MyCoreTests.java diff --git a/scalalib/test/src/mill/scalalib/GenIdeaTests.scala b/scalalib/test/src/GenIdeaTests.scala index 50db95c0..50db95c0 100644 --- a/scalalib/test/src/mill/scalalib/GenIdeaTests.scala +++ b/scalalib/test/src/GenIdeaTests.scala diff --git a/scalalib/test/src/mill/scalalib/HelloJavaTests.scala b/scalalib/test/src/HelloJavaTests.scala index 5b7b93b2..02c2567f 100644 --- a/scalalib/test/src/mill/scalalib/HelloJavaTests.scala +++ b/scalalib/test/src/HelloJavaTests.scala @@ -88,8 +88,8 @@ object HelloJavaTests extends TestSuite { 'failures - { val eval = init() - val mainJava = HelloJava.millSourcePath / 'app / 'src / 'hello / "Main.java" - val coreJava = HelloJava.millSourcePath / 'core / 'src / 'hello / "Core.java" + val mainJava = HelloJava.millSourcePath / 'app / 'src / "Main.java" + val coreJava = HelloJava.millSourcePath / 'core / 'src / "Core.java" val Right(_) = eval.apply(HelloJava.core.compile) val Right(_) = eval.apply(HelloJava.app.compile) diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/HelloWorldTests.scala index da08f056..da08f056 100644 --- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala +++ b/scalalib/test/src/HelloWorldTests.scala diff --git a/scalalib/test/src/mill/scalalib/ResolveDepsTests.scala b/scalalib/test/src/ResolveDepsTests.scala index 78361625..ce905907 100644 --- a/scalalib/test/src/mill/scalalib/ResolveDepsTests.scala +++ b/scalalib/test/src/ResolveDepsTests.scala @@ -4,7 +4,7 @@ import coursier.Cache import coursier.maven.MavenRepository import mill.api.Result.{Failure, Success} import mill.eval.{PathRef, Result} -import mill.util.Loose.Agg +import mill.api.Loose.Agg import utest._ object ResolveDepsTests extends TestSuite { diff --git a/scalalib/test/src/mill/scalalib/VersionControlTests.scala b/scalalib/test/src/VersionControlTests.scala index fafdca2d..fafdca2d 100644 --- a/scalalib/test/src/mill/scalalib/VersionControlTests.scala +++ b/scalalib/test/src/VersionControlTests.scala diff --git a/scalalib/test/src/mill/scalalib/dependency/metadata/MetadataLoaderFactoryTests.scala b/scalalib/test/src/dependency/metadata/MetadataLoaderFactoryTests.scala index 4c2206b8..4c2206b8 100644 --- a/scalalib/test/src/mill/scalalib/dependency/metadata/MetadataLoaderFactoryTests.scala +++ b/scalalib/test/src/dependency/metadata/MetadataLoaderFactoryTests.scala diff --git a/scalalib/test/src/mill/scalalib/dependency/updates/UpdatesFinderTests.scala b/scalalib/test/src/dependency/updates/UpdatesFinderTests.scala index 7b6e6e36..7b6e6e36 100644 --- a/scalalib/test/src/mill/scalalib/dependency/updates/UpdatesFinderTests.scala +++ b/scalalib/test/src/dependency/updates/UpdatesFinderTests.scala diff --git a/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala b/scalalib/test/src/dependency/versions/VersionTests.scala index b916c86f..b916c86f 100644 --- a/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala +++ b/scalalib/test/src/dependency/versions/VersionTests.scala diff --git a/scalalib/test/src/mill/scalalib/publish/IvyTests.scala b/scalalib/test/src/publish/IvyTests.scala index d187f969..d187f969 100644 --- a/scalalib/test/src/mill/scalalib/publish/IvyTests.scala +++ b/scalalib/test/src/publish/IvyTests.scala diff --git a/scalalib/test/src/mill/scalalib/publish/PomTests.scala b/scalalib/test/src/publish/PomTests.scala index 307ae379..307ae379 100644 --- a/scalalib/test/src/mill/scalalib/publish/PomTests.scala +++ b/scalalib/test/src/publish/PomTests.scala diff --git a/scalalib/test/src/mill/scalalib/scalafmt/ScalafmtTests.scala b/scalalib/test/src/scalafmt/ScalafmtTests.scala index dcbdb769..dcbdb769 100644 --- a/scalalib/test/src/mill/scalalib/scalafmt/ScalafmtTests.scala +++ b/scalalib/test/src/scalafmt/ScalafmtTests.scala diff --git a/scalalib/worker/src/mill/scalalib/worker/ZincWorkerImpl.scala b/scalalib/worker/src/ZincWorkerImpl.scala index 705d4682..c37ef162 100644 --- a/scalalib/worker/src/mill/scalalib/worker/ZincWorkerImpl.scala +++ b/scalalib/worker/src/ZincWorkerImpl.scala @@ -4,13 +4,13 @@ import java.io.File import java.util.Optional import mill.api.Loose.Agg -import mill.api.PathRef +import mill.api.{KeyedLockedCache, PathRef} import xsbti.compile.{CompilerCache => _, FileAnalysisStore => _, ScalaInstance => _, _} -import mill.scalalib.api.Util.{isDotty, grepJar, scalaBinaryVersion} +import mill.scalalib.api.Util.{grepJar, isDotty, scalaBinaryVersion} import sbt.internal.inc._ import sbt.internal.util.{ConsoleOut, MainAppender} import sbt.util.LogExchange -import mill.scalalib.api.CompilationResult +import mill.scalalib.api.{CompilationResult, ZincWorkerApi} case class MockedLookup(am: File => Optional[CompileAnalysis]) extends PerClasspathEntryLookup { override def analysis(classpathEntry: File): Optional[CompileAnalysis] = am(classpathEntry) @@ -19,10 +19,16 @@ case class MockedLookup(am: File => Optional[CompileAnalysis]) extends PerClassp Locate.definesClass(classpathEntry) } -class ZincWorkerImpl(ctx0: mill.api.Ctx, - compilerBridgeClasspath: Array[String]) extends mill.scalalib.api.ZincWorkerApi{ +class ZincWorkerImpl(compilerBridge: Either[ + (ZincWorkerApi.Ctx, Array[os.Path], (String, String) => os.Path), + String => os.Path + ], + libraryJarNameGrep: (Agg[os.Path], String) => os.Path, + compilerJarNameGrep: (Agg[os.Path], String) => os.Path, + compilerCache: KeyedLockedCache[Compilers]) + extends ZincWorkerApi{ private val ic = new sbt.internal.inc.IncrementalCompilerImpl() - val javaOnlyCompilers = { + lazy val javaOnlyCompilers = { // Keep the classpath as written by the user val classpathOptions = ClasspathOptions.of(false, false, false, false, false) @@ -42,68 +48,68 @@ class ZincWorkerImpl(ctx0: mill.api.Ctx, ) } - @volatile var mixedCompilersCache = Option.empty[(Long, Compilers)] - def docJar(scalaVersion: String, - compilerBridgeSources: os.Path, + scalaOrganization: String, compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path], args: Seq[String]) - (implicit ctx: mill.api.Ctx): Boolean = { - val compilers: Compilers = prepareCompilers( + (implicit ctx: ZincWorkerApi.Ctx): Boolean = { + withCompilers( scalaVersion, - compilerBridgeSources, + scalaOrganization, compilerClasspath, - scalacPluginClasspath - ) - val scaladocClass = compilers.scalac().scalaInstance().loader().loadClass("scala.tools.nsc.ScalaDoc") - val scaladocMethod = scaladocClass.getMethod("process", classOf[Array[String]]) - scaladocMethod.invoke(scaladocClass.newInstance(), args.toArray).asInstanceOf[Boolean] + scalacPluginClasspath, + ) { compilers: Compilers => + val scaladocClass = compilers.scalac().scalaInstance().loader().loadClass("scala.tools.nsc.ScalaDoc") + val scaladocMethod = scaladocClass.getMethod("process", classOf[Array[String]]) + scaladocMethod.invoke(scaladocClass.newInstance(), args.toArray).asInstanceOf[Boolean] + } } /** Compile the bridge if it doesn't exist yet and return the output directory. - * TODO: Proper invalidation, see #389 - */ - def compileZincBridgeIfNeeded(scalaVersion: String, - sourcesJar: os.Path, - compilerJars: Array[File]): os.Path = { - val workingDir = ctx0.dest / scalaVersion - val compiledDest = workingDir / 'compiled - if (!os.exists(workingDir)) { - - ctx0.log.info("Compiling compiler interface...") - - os.makeDir.all(workingDir) - os.makeDir.all(compiledDest) - - val sourceFolder = mill.api.IO.unpackZip(sourcesJar)(workingDir) - val classloader = mill.api.ClassLoader.create(compilerJars.map(_.toURI.toURL), null)(ctx0) - val compilerMain = classloader.loadClass( - if (isDotty(scalaVersion)) - "dotty.tools.dotc.Main" - else - "scala.tools.nsc.Main" - ) - val argsArray = Array[String]( - "-d", compiledDest.toString, - "-classpath", (compilerJars ++ compilerBridgeClasspath).mkString(File.pathSeparator) - ) ++ os.walk(sourceFolder.path).filter(_.ext == "scala").map(_.toString) - - compilerMain.getMethod("process", classOf[Array[String]]) - .invoke(null, argsArray) + * TODO: Proper invalidation, see #389 + */ + def compileZincBridgeIfNeeded(scalaVersion: String, scalaOrganization: String, compilerJars: Array[File]): os.Path = { + compilerBridge match{ + case Right(compiled) => compiled(scalaVersion) + case Left((ctx0, compilerBridgeClasspath, srcJars)) => + val workingDir = ctx0.dest / scalaVersion + val compiledDest = workingDir / 'compiled + if (!os.exists(workingDir)) { + ctx0.log.info("Compiling compiler interface...") + + os.makeDir.all(workingDir) + os.makeDir.all(compiledDest) + + val sourceFolder = mill.api.IO.unpackZip(srcJars(scalaVersion, scalaOrganization))(workingDir) + val classloader = mill.api.ClassLoader.create(compilerJars.map(_.toURI.toURL), null)(ctx0) + val compilerMain = classloader.loadClass( + if (isDotty(scalaVersion)) "dotty.tools.dotc.Main" + else "scala.tools.nsc.Main" + ) + val argsArray = Array[String]( + "-d", compiledDest.toString, + "-classpath", (compilerJars ++ compilerBridgeClasspath).mkString(File.pathSeparator) + ) ++ os.walk(sourceFolder.path).filter(_.ext == "scala").map(_.toString) + + compilerMain.getMethod("process", classOf[Array[String]]) + .invoke(null, argsArray) + } + compiledDest } - compiledDest + } - def discoverMainClasses(compilationResult: CompilationResult)(implicit ctx: mill.api.Ctx): Seq[String] = { + def discoverMainClasses(compilationResult: CompilationResult) + (implicit ctx: ZincWorkerApi.Ctx): Seq[String] = { def toScala[A](o: Optional[A]): Option[A] = if (o.isPresent) Some(o.get) else None toScala(FileAnalysisStore.binary(compilationResult.analysisFile.toIO).get()) .map(_.getAnalysis) .flatMap{ case analysis: Analysis => - Some(analysis.infos.allInfos.values.map(_.getMainClasses).flatten.toSeq.sorted) + Some(analysis.infos.allInfos.values.flatMap(_.getMainClasses).toSeq.sorted) case _ => None } @@ -114,7 +120,7 @@ class ZincWorkerImpl(ctx0: mill.api.Ctx, sources: Agg[os.Path], compileClasspath: Agg[os.Path], javacOptions: Seq[String]) - (implicit ctx: mill.api.Ctx): mill.api.Result[CompilationResult] = { + (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] = { compileInternal( upstreamCompileOutput, sources, @@ -130,73 +136,70 @@ class ZincWorkerImpl(ctx0: mill.api.Ctx, compileClasspath: Agg[os.Path], javacOptions: Seq[String], scalaVersion: String, + scalaOrganization: String, scalacOptions: Seq[String], - compilerBridgeSources: os.Path, compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path]) - (implicit ctx: mill.api.Ctx): mill.api.Result[CompilationResult] = { - val compilers: Compilers = prepareCompilers( + (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] = { + withCompilers( scalaVersion, - compilerBridgeSources, + scalaOrganization, compilerClasspath, - scalacPluginClasspath - ) - - compileInternal( - upstreamCompileOutput, - sources, - compileClasspath, - javacOptions, - scalacOptions = scalacPluginClasspath.map(jar => s"-Xplugin:${jar}").toSeq ++ scalacOptions, - compilers - ) + scalacPluginClasspath, + ) {compilers: Compilers => + compileInternal( + upstreamCompileOutput, + sources, + compileClasspath, + javacOptions, + scalacOptions = scalacPluginClasspath.map(jar => s"-Xplugin:$jar").toSeq ++ scalacOptions, + compilers + ) + } } - private def prepareCompilers(scalaVersion: String, - compilerBridgeSources: os.Path, + private def withCompilers[T](scalaVersion: String, + scalaOrganization: String, compilerClasspath: Agg[os.Path], scalacPluginClasspath: Agg[os.Path]) - (implicit ctx: mill.api.Ctx)= { + (f: Compilers => T) + (implicit ctx: ZincWorkerApi.Ctx)= { val combinedCompilerClasspath = compilerClasspath ++ scalacPluginClasspath val combinedCompilerJars = combinedCompilerClasspath.toArray.map(_.toIO) - val compilerBridge = compileZincBridgeIfNeeded( + val compiledCompilerBridge = compileZincBridgeIfNeeded( scalaVersion, - compilerBridgeSources, + scalaOrganization, compilerClasspath.toArray.map(_.toIO) ) - val compilerBridgeSig = os.mtime(compilerBridge) + + val compilerBridgeSig = os.mtime(compiledCompilerBridge) val compilersSig = compilerBridgeSig + combinedCompilerClasspath.map(p => p.toString().hashCode + os.mtime(p)).sum - val compilers = mixedCompilersCache match { - case Some((k, v)) if k == compilersSig => v - case _ => - val compilerName = - if (isDotty(scalaVersion)) - s"dotty-compiler_${scalaBinaryVersion(scalaVersion)}" - else - "scala-compiler" - val scalaInstance = new ScalaInstance( - version = scalaVersion, - loader = mill.api.ClassLoader.create(combinedCompilerJars.map(_.toURI.toURL), null), - libraryJar = grepJar(compilerClasspath, "scala-library", scalaVersion).toIO, - compilerJar = grepJar(compilerClasspath, compilerName, scalaVersion).toIO, - allJars = combinedCompilerJars, - explicitActual = None - ) - val compilers = ic.compilers( - scalaInstance, - ClasspathOptionsUtil.boot, - None, - ZincUtil.scalaCompiler(scalaInstance, compilerBridge.toIO) - ) - mixedCompilersCache = Some((compilersSig, compilers)) - compilers - } - compilers + compilerCache.withCachedValue(compilersSig){ + val compilerJar = + if (isDotty(scalaVersion)) + grepJar(compilerClasspath, s"dotty-compiler_${scalaBinaryVersion(scalaVersion)}", scalaVersion) + else + compilerJarNameGrep(compilerClasspath, scalaVersion) + val scalaInstance = new ScalaInstance( + version = scalaVersion, + loader = mill.api.ClassLoader.create(combinedCompilerJars.map(_.toURI.toURL), null), + libraryJar = libraryJarNameGrep(compilerClasspath, scalaVersion).toIO, + compilerJar = compilerJar.toIO, + allJars = combinedCompilerJars, + explicitActual = None + ) + ic.compilers( + scalaInstance, + ClasspathOptionsUtil.boot, + None, + ZincUtil.scalaCompiler(scalaInstance, compiledCompilerBridge.toIO) + ) + }(f) } private def compileInternal(upstreamCompileOutput: Seq[CompilationResult], @@ -205,7 +208,7 @@ class ZincWorkerImpl(ctx0: mill.api.Ctx, javacOptions: Seq[String], scalacOptions: Seq[String], compilers: Compilers) - (implicit ctx: mill.api.Ctx): mill.api.Result[CompilationResult] = { + (implicit ctx: ZincWorkerApi.Ctx): mill.api.Result[CompilationResult] = { os.makeDir.all(ctx.dest) val logger = { |