diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 8ca8d88d2..bc7e6c040 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -73,10 +73,10 @@ private[sbt] object Load { val launcher = scalaProvider.launcher val stagingDirectory = getStagingDirectory(state, globalBase).getCanonicalFile val javaHome = Util.javaHome - val out = baseDirectory.toPath.resolve("target").resolve("out") + val out = app.baseDirectory.toPath.resolve("target").resolve("out") val rootPaths = Map( "OUT" -> out, - "BASE" -> baseDirectory.toPath, + "BASE" -> app.baseDirectory.toPath, "SBT_BOOT" -> launcher.bootDirectory.toPath, "IVY_HOME" -> launcher.ivyHome.toPath, "JAVA_HOME" -> javaHome, @@ -119,7 +119,9 @@ private[sbt] object Load { ) val evalPluginDef: (BuildStructure, State) => PluginData = EvaluateTask.evalPluginDef val delegates = defaultDelegates - val pluginMgmt = PluginManagement(loader) + import sbt.ProjectExtra.projectReturn + val pluginContext = PluginManagement.Context(false, Project.projectReturn(state).size - 1) + val pluginMgmt = PluginManagement(loader, pluginContext) val inject = InjectSettings(injectGlobal(state), Nil, const(Nil)) SysProp.setSwovalTempDir() SysProp.setIpcSocketTempDir() diff --git a/main/src/main/scala/sbt/internal/PluginManagement.scala b/main/src/main/scala/sbt/internal/PluginManagement.scala index 0a9c94980..e551b3c44 100644 --- a/main/src/main/scala/sbt/internal/PluginManagement.scala +++ b/main/src/main/scala/sbt/internal/PluginManagement.scala @@ -54,12 +54,15 @@ object PluginManagement { val emptyContext: Context = Context(false, 0) def apply(initialLoader: ClassLoader): PluginManagement = + PluginManagement(initialLoader, emptyContext) + + def apply(initialLoader: ClassLoader, context: Context): PluginManagement = PluginManagement( Set.empty, Set.empty, new PluginClassLoader(initialLoader), initialLoader, - emptyContext + context ) def extractOverrides(classpath: Classpath): Set[ModuleID] = diff --git a/sbt-app/src/sbt-test/project-load/metabuild/project/FooPlugin.scala b/sbt-app/src/sbt-test/project-load/metabuild/project/FooPlugin.scala new file mode 100644 index 000000000..5633f3307 --- /dev/null +++ b/sbt-app/src/sbt-test/project-load/metabuild/project/FooPlugin.scala @@ -0,0 +1,24 @@ +package example + +import sbt.* +import Keys.* +import complete.DefaultParsers.{ *, given } + +object FooPlugin extends AutoPlugin: + override def requires = empty + override def trigger = allRequirements + + lazy object autoImport: + @transient + lazy val foo = taskKey[Unit]("foo") + lazy val check = inputKey[Unit]("check") + + import autoImport.* + override def projectSettings: Seq[Def.Setting[?]] = Seq( + foo := println("foo"), + check := { + val args = spaceDelimited("").parsed + assert(name.value.endsWith(args.head), s"${name.value} does not end with ${args.head}") + }, + ) +end FooPlugin diff --git a/sbt-app/src/sbt-test/project-load/metabuild/project/project/FooPlugin.scala b/sbt-app/src/sbt-test/project-load/metabuild/project/project/FooPlugin.scala new file mode 100644 index 000000000..5633f3307 --- /dev/null +++ b/sbt-app/src/sbt-test/project-load/metabuild/project/project/FooPlugin.scala @@ -0,0 +1,24 @@ +package example + +import sbt.* +import Keys.* +import complete.DefaultParsers.{ *, given } + +object FooPlugin extends AutoPlugin: + override def requires = empty + override def trigger = allRequirements + + lazy object autoImport: + @transient + lazy val foo = taskKey[Unit]("foo") + lazy val check = inputKey[Unit]("check") + + import autoImport.* + override def projectSettings: Seq[Def.Setting[?]] = Seq( + foo := println("foo"), + check := { + val args = spaceDelimited("").parsed + assert(name.value.endsWith(args.head), s"${name.value} does not end with ${args.head}") + }, + ) +end FooPlugin diff --git a/sbt-app/src/sbt-test/project-load/metabuild/test b/sbt-app/src/sbt-test/project-load/metabuild/test new file mode 100644 index 000000000..68aec72a2 --- /dev/null +++ b/sbt-app/src/sbt-test/project-load/metabuild/test @@ -0,0 +1,9 @@ +> foo +> reload plugins +> check -build +> foo +> reload plugins +> reload return +> reload return +> compile +> foo