diff options
Diffstat (limited to 'test/files/run/t4332.scala')
-rw-r--r-- | test/files/run/t4332.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/files/run/t4332.scala b/test/files/run/t4332.scala new file mode 100644 index 0000000000..5a67922911 --- /dev/null +++ b/test/files/run/t4332.scala @@ -0,0 +1,44 @@ +import scala.tools.partest._ + +object Test extends DirectTest { + override def code = "" + lazy val global = newCompiler("-usejavacp") + import global._, definitions._ + + override def show() { + new global.Run() + // Once we plug all of the view gaps, the output should be empty! + checkViews() + } + + def isExempt(sym: Symbol) = { + val exempt = Set("view", "repr", "sliceWithKnownDelta", "sliceWithKnownBound", "transform") + (exempt contains sym.name.decoded) + } + + def checkView(viewType: Type, viewLikeType: Type) { + val sep = "=" * 70 + println(s"\n$sep\nChecking ${viewType.typeSymbol.fullName}\n$sep") + val termMembers = viewType.nonPrivateMembers.toList filter (_.isTerm) map fullyInitializeSymbol + val inheritedFromGenericCollection + = termMembers filterNot (_.owner.name.decoded contains "ViewLike") filterNot (_.owner == viewType.typeSymbol) + def returnsView(sym: Symbol) = viewType.memberType(sym).finalResultType contains viewType.typeSymbol + val needOverride = inheritedFromGenericCollection filterNot isExempt filter returnsView + + val grouped = needOverride.groupBy(_.owner).toSeq.sortBy { case (owner, _) => viewType baseTypeIndex owner } + val report = grouped.map { + case (owner, syms) => s"\n$owner\n${"-" * 70}\n${syms.map(_.defString).sorted.mkString("\n")}" + }.mkString("\n") + println(report) + } + + def checkViews() { + import collection._ + checkView(typeOf[TraversableView[_, _]], typeOf[TraversableViewLike[_, _, _]]) + checkView(typeOf[IterableView[_, _]], typeOf[IterableViewLike[_, _, _]]) + checkView(typeOf[SeqView[_, _]], typeOf[SeqViewLike[_, _, _]]) + checkView(typeOf[mutable.IndexedSeqView[_, _]], typeOf[SeqViewLike[_, _, _]]) + checkView(typeOf[immutable.StreamView[_, _]], typeOf[immutable.StreamViewLike[_, _, _]]) + // Parallel views not checked, assuming we will drop them in 2.11 + } +} |