def simplify[T]()

in finagle-core/src/main/scala/com/twitter/finagle/NameTree.scala [159:198]


  def simplify[T](tree: NameTree[T]): NameTree[T] = tree match {
    case Alt() => Neg
    case Alt(tree) => simplify(tree)
    case Alt(trees @ _*) =>
      @tailrec def loop(trees: Seq[NameTree[T]], accum: Seq[NameTree[T]]): Seq[NameTree[T]] =
        trees match {
          case Nil => accum
          case Seq(head, tail @ _*) =>
            simplify(head) match {
              case Fail => accum :+ Fail
              case Neg => loop(tail, accum)
              case head => loop(tail, accum :+ head)
            }
        }
      loop(trees, Nil) match {
        case Nil => Neg
        case Seq(head) => head
        case trees => Alt.fromSeq(trees)
      }

    case Union() => Neg
    case Union(Weighted(_, tree)) => simplify(tree)
    case Union(trees @ _*) =>
      @tailrec def loop(trees: Seq[Weighted[T]], accum: Seq[Weighted[T]]): Seq[Weighted[T]] =
        trees match {
          case Nil => accum
          case Seq(Weighted(w, tree), tail @ _*) =>
            simplify(tree) match {
              case Fail | Neg => loop(tail, accum)
              case tree => loop(tail, accum :+ Weighted(w, tree))
            }
        }
      loop(trees, Nil) match {
        case Nil => Neg
        case Seq(Weighted(_, tree)) => tree
        case trees => Union.fromSeq(trees)
      }

    case other => other
  }