From bf758122b72b56d992ba6fe49257dfcc50214092 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 9 Jun 2021 14:49:58 +0200 Subject: [PATCH] Use sbt makeScalaInstance --- project/Bootstrap.scala | 55 --------------------------------------- project/Build.scala | 31 +++++++++++++--------- project/build.properties | 2 +- project/project/build.sbt | 2 +- 4 files changed, 20 insertions(+), 70 deletions(-) delete mode 100644 project/Bootstrap.scala diff --git a/project/Bootstrap.scala b/project/Bootstrap.scala deleted file mode 100644 index 0b516b8041dd..000000000000 --- a/project/Bootstrap.scala +++ /dev/null @@ -1,55 +0,0 @@ -package sbt - -import sbt.internal.classpath.ClassLoaderCache -import sbt.internal.inc.ScalaInstance - -// This class needs to be in package sbt to access the ClassLoaderCache -object Bootstrap { - /** A ScalaInstance (without scaladoc). */ - def makeScalaInstance( - state: State, - version: String, - libraryJars: Array[File], - compilerJars: Array[File], - topLoader: ClassLoader - ): ScalaInstance = { - // `extendedClassLoaderCache` is package private in package sbt - val cache = state.extendedClassLoaderCache - - val libraryLoader = cache(libraryJars.toList, topLoader) - val compilerLoader = cache(compilerJars.toList, libraryLoader) - - new ScalaInstance( - version = version, - loader = compilerLoader, - loaderCompilerOnly = compilerLoader, - loaderLibraryOnly = libraryLoader, - libraryJars = libraryJars, - compilerJars = compilerJars, - allJars = libraryJars ++ compilerJars, - explicitActual = Some(version) - ) - } - - /** A ScalaInstance identical to `base` but with additional jars for scaladoc. */ - def makeDocScalaInstance( - state: State, - base: ScalaInstance, - docJars: Array[File] - ): ScalaInstance = { - val cache = state.extendedClassLoaderCache - - val fullLoader = cache(docJars.toList, base.loaderCompilerOnly) - - new ScalaInstance( - version = base.version, - loader = fullLoader, - loaderCompilerOnly = base.loaderCompilerOnly, - loaderLibraryOnly = base.loaderLibraryOnly, - libraryJars = base.libraryJars, - compilerJars = base.compilerJars, - allJars = base.allJars ++ docJars, - explicitActual = base.explicitActual - ) - } -} diff --git a/project/Build.scala b/project/Build.scala index da1e8eb4c04c..8b47a032e183 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -386,15 +386,14 @@ object Build { val scala3Compiler = (`scala3-compiler` / Compile / packageBin).value val libraryJars = Array(scala3Library) ++ externalLibraryDeps - val compilerJars = Array(tastyCore, scala3Interfaces, scala3Compiler) ++ (externalCompilerDeps -- externalLibraryDeps) + val compilerJars = Seq(tastyCore, scala3Interfaces, scala3Compiler) ++ (externalCompilerDeps -- externalLibraryDeps) - // should be replaced by sbt.Defaults.makeScalaInstance when released - // See https://github.com/sbt/sbt/pull/6480 - Bootstrap.makeScalaInstance( - state.value, + Defaults.makeScalaInstance( scalaVersion.value, libraryJars = libraryJars, - compilerJars = compilerJars, + allCompilerJars = compilerJars, + allDocJars = Seq.empty, + state.value, scalaInstanceTopLoader.value ) }, @@ -404,16 +403,22 @@ object Build { // in the `scalaInstance` of the `doc` task which allows us to run // `scala3-library-bootstrapped/doc` for example. doc / scalaInstance := { - val externalCompilerDeps = (`scala3-compiler` / Compile / externalDependencyClasspath).value.map(_.data).toSet - val externalScaladocDeps = (LocalProject("scaladoc") / Compile / externalDependencyClasspath).value.map(_.data).toSet + val externalDeps = (LocalProject("scaladoc") / Compile / externalDependencyClasspath).value.map(_.data) val scalaDoc = (LocalProject("scaladoc") / Compile / packageBin).value - val docJars = Array(scalaDoc) ++ (externalScaladocDeps -- externalCompilerDeps) - - Bootstrap.makeDocScalaInstance( + val docJars = Array(scalaDoc) ++ externalDeps + + val base = scalaInstance.value + val docScalaInstance = Defaults.makeScalaInstance( + version = base.version, + libraryJars = base.libraryJars, + allCompilerJars = base.compilerJars, + allDocJars = docJars, state.value, - scalaInstance.value, - docJars + scalaInstanceTopLoader.value ) + // assert that sbt reuses the same compiler class loader + assert(docScalaInstance.loaderCompilerOnly == base.loaderCompilerOnly) + docScalaInstance }, Compile / doc / scalacOptions ++= scalacOptionsDocSettings ) diff --git a/project/build.properties b/project/build.properties index 19479ba46ff2..67d27a1dfe00 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.2 +sbt.version=1.5.3 diff --git a/project/project/build.sbt b/project/project/build.sbt index 41880f2a21f0..72edda4a4c1f 100644 --- a/project/project/build.sbt +++ b/project/project/build.sbt @@ -1,2 +1,2 @@ // Some dependencies are shared between the regular build and the meta-build -sources in Compile += baseDirectory.value / "../Dependencies.scala" +Compile / sources += baseDirectory.value / "../Dependencies.scala"