Fix taskDyn

This commit is contained in:
Eugene Yokota
2023-01-15 23:50:30 -05:00
parent 9f5525c989
commit 193b47b49b
3 changed files with 39 additions and 28 deletions
+1 -1
View File
@@ -232,7 +232,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
inline def task[A1](inline a1: A1): Def.Initialize[Task[A1]] = inline def task[A1](inline a1: A1): Def.Initialize[Task[A1]] =
${ TaskMacro.taskMacroImpl[A1]('a1) } ${ TaskMacro.taskMacroImpl[A1]('a1) }
inline def taskDyn[A1](a1: Def.Initialize[Task[A1]]): Def.Initialize[Task[A1]] = inline def taskDyn[A1](inline a1: Def.Initialize[Task[A1]]): Def.Initialize[Task[A1]] =
${ TaskMacro.taskDynMacroImpl[A1]('a1) } ${ TaskMacro.taskDynMacroImpl[A1]('a1) }
inline def setting[A1](inline a: A1): Def.Initialize[A1] = ${ settingMacroImpl[A1]('a) } inline def setting[A1](inline a: A1): Def.Initialize[A1] = ${ settingMacroImpl[A1]('a) }
@@ -87,6 +87,12 @@ object Assign {
mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value
} }
val dyn: Def.Initialize[Task[Int]] = Def.taskDyn {
val a = ak.value
if a < 1 then Def.task { 1 }
else Def.task { 0 }
}
import DefaultParsers._ import DefaultParsers._
val p = Def.setting { name.value ~> Space ~> ID } val p = Def.setting { name.value ~> Space ~> ID }
val is = Seq( val is = Seq(
+32 -27
View File
@@ -1099,34 +1099,39 @@ object Defaults extends BuildCommon {
} }
def scalaInstanceTask: Initialize[Task[ScalaInstance]] = def scalaInstanceTask: Initialize[Task[ScalaInstance]] =
(Def.task { (Keys.scalaHome.value, appConfiguration.value, scalaVersion.value) }).flatMapTask { Def.taskDyn {
case (Some(h), _, _) => scalaInstanceFromHome(h) val sh = Keys.scalaHome.value
case (_, app, version) => val app = appConfiguration.value
val scalaProvider = app.provider.scalaProvider val sv = scalaVersion.value
if version == scalaProvider.version then sh match
// use the same class loader as the Scala classes used by sbt case Some(h) => scalaInstanceFromHome(h)
Def.task { case _ =>
val allJars = scalaProvider.jars val scalaProvider = app.provider.scalaProvider
val libraryJars = allJars if sv == scalaProvider.version then
.filter { jar => // use the same class loader as the Scala classes used by sbt
(jar.getName == "scala-library.jar") || (jar.getName.startsWith("scala3-library_3")) Def.task {
} val allJars = scalaProvider.jars
(allJars.filter { jar => val libraryJars = allJars
jar.getName == "scala-compiler.jar" || jar.getName.startsWith("scala3-compiler_3") .filter { jar =>
}) match { (jar.getName == "scala-library.jar") || (jar.getName.startsWith(
case Array(compilerJar) if libraryJars.nonEmpty => "scala3-library_3"
makeScalaInstance( ))
version, }
libraryJars, (allJars.filter { jar =>
allJars, jar.getName == "scala-compiler.jar" || jar.getName.startsWith("scala3-compiler_3")
Seq.empty, }) match
state.value, case Array(compilerJar) if libraryJars.nonEmpty =>
scalaInstanceTopLoader.value makeScalaInstance(
) sv,
case _ => ScalaInstance(version, scalaProvider) libraryJars,
allJars.toSeq,
Seq.empty,
state.value,
scalaInstanceTopLoader.value
)
case _ => ScalaInstance(sv, scalaProvider)
} }
} else scalaInstanceFromUpdate
else scalaInstanceFromUpdate
} }
// Returns the ScalaInstance only if it was not constructed via `update` // Returns the ScalaInstance only if it was not constructed via `update`