Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
46 lines (40 sloc) 1.48 KB
package sbt
import java.net.URI
object Resolve
{
def apply(index: BuildUtil[_], current: ScopeAxis[Reference], key: AttributeKey[_], mask: ScopeMask): Scope => Scope =
{
val rs =
resolveProject(current, mask) _ ::
resolveExtra(mask) _ ::
resolveTask(mask) _ ::
resolveConfig(index, key, mask) _ ::
Nil
scope => (scope /: rs) { (s, f) => f(s) }
}
def resolveTask(mask: ScopeMask)(scope: Scope): Scope =
if(mask.task) scope else scope.copy(task = Global)
def resolveProject(current: ScopeAxis[Reference], mask: ScopeMask)(scope: Scope): Scope =
if(mask.project) scope else scope.copy(project = current)
def resolveExtra(mask: ScopeMask)(scope: Scope): Scope =
if(mask.extra) scope else scope.copy(extra = Global)
def resolveConfig[P](index: BuildUtil[P], key: AttributeKey[_], mask: ScopeMask)(scope: Scope): Scope =
if(mask.config)
scope
else
{
val (resolvedRef, proj) = scope.project match {
case Select(ref) =>
val r = index resolveRef ref
(Some(r), index.projectFor(r))
case Global | This =>
(None, index.rootProject(index.root))
}
val task = scope.task.toOption
val keyIndex = index.keyIndex
val definesKey = (c: ScopeAxis[ConfigKey]) => keyIndex.keys(resolvedRef, c.toOption.map(_.name), task) contains key.label
val projectConfigs = index.configurations(proj).map(ck => Select(ck))
val config: ScopeAxis[ConfigKey] = (Global +: projectConfigs) find definesKey getOrElse Global
scope.copy(config = config)
}
}
Something went wrong with that request. Please try again.