mirror of https://github.com/sbt/sbt.git
lift anonymous Incompletes to the next keyed, empty Incomplete
This commit is contained in:
parent
32d1bc9e4e
commit
1e7d628dbb
|
|
@ -192,12 +192,19 @@ object EvaluateTask
|
||||||
replaced
|
replaced
|
||||||
}
|
}
|
||||||
def transformInc[T](result: Result[T]): Result[T] =
|
def transformInc[T](result: Result[T]): Result[T] =
|
||||||
result.toEither.left.map { i =>
|
result.toEither.left.map { i => Incomplete.transformBU(i)(liftAnonymous andThen taskToKey ) }
|
||||||
Incomplete.transform(i) {
|
def taskToKey: Incomplete => Incomplete = {
|
||||||
case in @ Incomplete(Some(node: Task[_]), _, _, _, _) => in.copy(node = transformNode(node))
|
case in @ Incomplete(Some(node: Task[_]), _, _, _, _) => in.copy(node = transformNode(node))
|
||||||
case _ => i
|
case i => i
|
||||||
|
}
|
||||||
|
def liftAnonymous: Incomplete => Incomplete = {
|
||||||
|
case i @ Incomplete(node, tpe, None, causes, None) =>
|
||||||
|
causes.find( inc => inc.message.isDefined || inc.directCause.isDefined) match {
|
||||||
|
case Some(lift) => i.copy(directCause = lift.directCause, message = lift.message)
|
||||||
|
case None => i
|
||||||
}
|
}
|
||||||
}
|
case i => i
|
||||||
|
}
|
||||||
def transformNode(node: Task[_]): Option[ScopedKey[_]] =
|
def transformNode(node: Task[_]): Option[ScopedKey[_]] =
|
||||||
node.info.attributes get taskDefinitionKey
|
node.info.attributes get taskDefinitionKey
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,14 @@ final case class Incomplete(node: Option[AnyRef], tpe: IValue = Error, message:
|
||||||
object Incomplete extends Enumeration {
|
object Incomplete extends Enumeration {
|
||||||
val Skipped, Error = Value
|
val Skipped, Error = Value
|
||||||
|
|
||||||
def transform(i: Incomplete)(f: Incomplete => Incomplete): Incomplete =
|
def transformTD(i: Incomplete)(f: Incomplete => Incomplete): Incomplete = transform(i, true)(f)
|
||||||
|
def transformBU(i: Incomplete)(f: Incomplete => Incomplete): Incomplete = transform(i, false)(f)
|
||||||
|
def transform(i: Incomplete, topDown: Boolean)(f: Incomplete => Incomplete): Incomplete =
|
||||||
{
|
{
|
||||||
import collection.JavaConversions._
|
import collection.JavaConversions._
|
||||||
val visited: collection.mutable.Map[Incomplete,Incomplete] = new java.util.IdentityHashMap[Incomplete, Incomplete]
|
val visited: collection.mutable.Map[Incomplete,Incomplete] = new java.util.IdentityHashMap[Incomplete, Incomplete]
|
||||||
def visit(inc: Incomplete): Incomplete =
|
def visit(inc: Incomplete): Incomplete =
|
||||||
visited.getOrElseUpdate(inc, visitCauses(f(inc)) )
|
visited.getOrElseUpdate(inc, if(topDown) visitCauses(f(inc)) else f(visitCauses(inc)))
|
||||||
def visitCauses(inc: Incomplete): Incomplete =
|
def visitCauses(inc: Incomplete): Incomplete =
|
||||||
inc.copy(causes = inc.causes.map(visit) )
|
inc.copy(causes = inc.causes.map(visit) )
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue