From 1d6ec91dbc274b389b4f0d616752f36aec6f4ed8 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Sun, 1 Mar 2026 05:28:43 -0500 Subject: [PATCH] [2.x] Fix lazy val name handling in Eval (#8818) (#8852) Co-authored-by: kenji yoshida <6b656e6a69@gmail.com> --- buildfile/src/main/scala/sbt/internal/Eval.scala | 6 ++++-- .../sbt-test/project-load/lazy-val-name/build.sbt | 13 +++++++++++++ .../src/sbt-test/project-load/lazy-val-name/test | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 sbt-app/src/sbt-test/project-load/lazy-val-name/build.sbt create mode 100644 sbt-app/src/sbt-test/project-load/lazy-val-name/test diff --git a/buildfile/src/main/scala/sbt/internal/Eval.scala b/buildfile/src/main/scala/sbt/internal/Eval.scala index 04befb995..4fa853dc8 100644 --- a/buildfile/src/main/scala/sbt/internal/Eval.scala +++ b/buildfile/src/main/scala/sbt/internal/Eval.scala @@ -19,6 +19,7 @@ import java.nio.file.{ Files, Path, Paths, StandardOpenOption } import java.security.MessageDigest import scala.jdk.CollectionConverters.* import scala.quoted.* +import scala.reflect.NameTransformer import sbt.io.{ Hash, IO } /** @@ -429,8 +430,9 @@ object Eval: vals ::= name.mangledString case tpd.ValDef(name, tpt, _) if name.is(NameKinds.LazyLocalName) => val str = name.mangledString - val methodName = str.take(str.indexOf("$lzy")) - val m = tree.symbol.owner.requiredMethod(methodName.replace("$minus", "-")) + val methodName = str.take(str.indexOf(NameTransformer.LAZY_LOCAL_SUFFIX_STRING)) + val decodedName = NameTransformer.decode(methodName) + val m = tree.symbol.owner.requiredMethod(decodedName) if isAcceptableType(m.info) then vals ::= methodName case t: tpd.Template => this((), t.body) case t: tpd.PackageDef => this((), t.stats) diff --git a/sbt-app/src/sbt-test/project-load/lazy-val-name/build.sbt b/sbt-app/src/sbt-test/project-load/lazy-val-name/build.sbt new file mode 100644 index 000000000..76cf18d6b --- /dev/null +++ b/sbt-app/src/sbt-test/project-load/lazy-val-name/build.sbt @@ -0,0 +1,13 @@ +lazy val `a + b` = "2.13.18" + +// https://github.com/scala/scala3/blob/3.8.2/library/src/scala/reflect/NameTransformer.scala#L47-L64 +lazy val ~=<>!#%^&|*/+-:\\?@ = "my-name" + +scalaVersion := `a + b` + +name := ~=<>!#%^&|*/+-:\\?@ + +InputKey[Unit]("check") := { + assert(scalaVersion.value == "2.13.18") + assert(name.value == "my-name") +} diff --git a/sbt-app/src/sbt-test/project-load/lazy-val-name/test b/sbt-app/src/sbt-test/project-load/lazy-val-name/test new file mode 100644 index 000000000..e3bd83da1 --- /dev/null +++ b/sbt-app/src/sbt-test/project-load/lazy-val-name/test @@ -0,0 +1,2 @@ +> compile +> check