From f4b2fc422868ccb170dbcc19e3832b81d69a8f9f Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Thu, 5 Oct 2017 17:53:31 +0100 Subject: [PATCH] Correct handling of resolving ThisProject In ca71b4b9026d973b9fd2b55032144e6c7d5cd57a I went about fixing the inexhaustive matching in Scope's resolveProjectBuild and resolveProjectRef. Looking back the change was wrong. For resolveProjectBuild the new implementation is less wrong, but still not great, seeing as it doesn't actually do any build resolving. For resolveProjectRef the new implementation now blows up instead of lies. Which means it's less leneant, more "fail-fast". isProjectThis is unused; remnant of the pre-AutoPlugin days when build settings where defined in Plugin.settings. --- build.sbt | 2 ++ main-settings/src/main/scala/sbt/Scope.scala | 13 +++++-------- main/src/main/scala/sbt/internal/Load.scala | 6 ------ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/build.sbt b/build.sbt index 2f2cb6553..2a16a7065 100644 --- a/build.sbt +++ b/build.sbt @@ -391,6 +391,8 @@ lazy val mainProj = (project in file("main")) exclude[DirectMissingMethodProblem]("sbt.internal.KeyIndex.*"), // Removed unused val. internal. exclude[DirectMissingMethodProblem]("sbt.internal.RelayAppender.jsonFormat"), + // Removed unused def. internal. + exclude[DirectMissingMethodProblem]("sbt.internal.Load.isProjectThis"), ) ) .configure( diff --git a/main-settings/src/main/scala/sbt/Scope.scala b/main-settings/src/main/scala/sbt/Scope.scala index edfeb4826..34815405a 100644 --- a/main-settings/src/main/scala/sbt/Scope.scala +++ b/main-settings/src/main/scala/sbt/Scope.scala @@ -97,8 +97,7 @@ object Scope { case LocalProject(id) => ProjectRef(current, id) case RootProject(uri) => RootProject(resolveBuild(current, uri)) case ProjectRef(uri, id) => ProjectRef(resolveBuild(current, uri), id) - case ThisProject => - RootProject(current) // Is this right? It was an inexhaustive match before.. + case ThisProject => ThisProject // haven't exactly "resolved" anything.. } def resolveBuild(current: URI, uri: URI): URI = if (!uri.isAbsolute && current.isOpaque && uri.getSchemeSpecificPart == ".") @@ -118,13 +117,11 @@ object Scope { rootProject: URI => String, ref: ProjectReference): ProjectRef = ref match { - case LocalRootProject => ProjectRef(current, rootProject(current)) - case LocalProject(id) => ProjectRef(current, id) - case RootProject(uri) => - val res = resolveBuild(current, uri); ProjectRef(res, rootProject(res)) + case LocalRootProject => ProjectRef(current, rootProject(current)) + case LocalProject(id) => ProjectRef(current, id) + case RootProject(uri) => val u = resolveBuild(current, uri); ProjectRef(u, rootProject(u)) case ProjectRef(uri, id) => ProjectRef(resolveBuild(current, uri), id) - case ThisProject => - ProjectRef(current, rootProject(current)) // Is this right? It was an inexhaustive match before.. + case ThisProject => sys.error("Cannot resolve ThisProject w/o the current project") } def resolveBuildRef(current: URI, ref: BuildReference): BuildRef = ref match { diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index e0ac0b6f8..b10235eac 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -363,12 +363,6 @@ private[sbt] object Load { ) } - def isProjectThis(s: Setting[_]): Boolean = - s.key.scope.project match { - case This | Select(ThisProject) => true - case _ => false - } - def buildConfigurations( loaded: LoadedBuild, rootProject: URI => String,