Correct handling of resolving ThisProject

In ca71b4b902 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.
This commit is contained in:
Dale Wijnand 2017-10-05 17:53:31 +01:00
parent 05c2c506b2
commit f4b2fc4228
No known key found for this signature in database
GPG Key ID: 4F256E3D151DF5EF
3 changed files with 7 additions and 14 deletions

View File

@ -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(

View File

@ -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 {

View File

@ -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,