diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala index 87c21204d..8e773dd54 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala @@ -266,7 +266,15 @@ trait Cont: (name: String, tpe: Type[x], qual: Term, oldTree: Term) => given Type[x] = tpe convert[x](name, qual) transform { (replacement: Term) => - val idx = inputs.indexWhere(input => input.qual == qual) + val idxEq = inputs.indexWhere(input => input.qual == qual) + // use show to compare trees for Def.task comparison + val idx = + if idxEq < 0 then inputs.indexWhere(input => input.qual.show == qual.show) + else idxEq + if idx < 0 then + sys.error( + s"qual (${qual}) not found in ${inputs.map(_.qual)}" + ) applyTuple(p0, br.inputTupleTypeRepr, idx) } val modifiedBody = diff --git a/sbt-app/src/sbt-test/project/nested-macro/build.sbt b/sbt-app/src/sbt-test/project/nested-macro/build.sbt new file mode 100644 index 000000000..a6d00c01d --- /dev/null +++ b/sbt-app/src/sbt-test/project/nested-macro/build.sbt @@ -0,0 +1,11 @@ +lazy val a1 = settingKey[Boolean]("") + +scalaVersion := "3.6.4" +a1 := true + +Compile / sourceGenerators += { + val _ = a1.value + Def.task { + Seq.empty[File] + }.taskValue +} diff --git a/sbt-app/src/sbt-test/project/nested-macro/test b/sbt-app/src/sbt-test/project/nested-macro/test new file mode 100644 index 000000000..5df2af1f3 --- /dev/null +++ b/sbt-app/src/sbt-test/project/nested-macro/test @@ -0,0 +1 @@ +> compile