diff --git a/main/Build.scala b/main/Build.scala index b7aeec170..65cf0db94 100644 --- a/main/Build.scala +++ b/main/Build.scala @@ -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 diff --git a/tasks/Incomplete.scala b/tasks/Incomplete.scala index 28c30ef8c..e8bd1b5d3 100644 --- a/tasks/Incomplete.scala +++ b/tasks/Incomplete.scala @@ -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) )