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
|
||||
}
|
||||
def transformInc[T](result: Result[T]): Result[T] =
|
||||
result.toEither.left.map { i =>
|
||||
Incomplete.transform(i) {
|
||||
case in @ Incomplete(Some(node: Task[_]), _, _, _, _) => in.copy(node = transformNode(node))
|
||||
case _ => i
|
||||
result.toEither.left.map { i => Incomplete.transformBU(i)(liftAnonymous andThen taskToKey ) }
|
||||
def taskToKey: Incomplete => Incomplete = {
|
||||
case in @ Incomplete(Some(node: Task[_]), _, _, _, _) => in.copy(node = transformNode(node))
|
||||
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[_]] =
|
||||
node.info.attributes get taskDefinitionKey
|
||||
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ final case class Incomplete(node: Option[AnyRef], tpe: IValue = Error, message:
|
|||
object Incomplete extends Enumeration {
|
||||
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._
|
||||
val visited: collection.mutable.Map[Incomplete,Incomplete] = new java.util.IdentityHashMap[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 =
|
||||
inc.copy(causes = inc.causes.map(visit) )
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue