From e5ce083d3cbc1e78e3c5f26ca922581d098ba260 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Sat, 7 May 2016 21:52:12 +0200 Subject: Add Types#TypeTraverser for convenience This works similarly to `Trees#TreeTraverser`. --- src/dotty/tools/dotc/core/Types.scala | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala index 50800bec7..09d7f0185 100644 --- a/src/dotty/tools/dotc/core/Types.scala +++ b/src/dotty/tools/dotc/core/Types.scala @@ -3408,6 +3408,12 @@ object Types { } } + abstract class TypeTraverser(implicit ctx: Context) extends TypeAccumulator[Unit] { + def traverse(tp: Type): Unit + def apply(x: Unit, tp: Type): Unit = traverse(tp) + protected def traverseChildren(tp: Type) = foldOver((), tp) + } + class ExistsAccumulator(p: Type => Boolean)(implicit ctx: Context) extends TypeAccumulator[Boolean] { override def stopAtStatic = false def apply(x: Boolean, tp: Type) = x || p(tp) || foldOver(x, tp) -- cgit v1.2.3