Skip to content

Commit cbcca2c

Browse files
committed
Merge pull request scala#787 from axel22/issue/5971
Fix SI-5971.
2 parents 489b38b + ba542ba commit cbcca2c

File tree

5 files changed

+30
-3
lines changed

5 files changed

+30
-3
lines changed

src/library/scala/collection/IterableViewLike.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ trait IterableViewLike[+A,
4444
}
4545

4646
/** Explicit instantiation of the `Transformed` trait to reduce class file size in subclasses. */
47-
private[collection] abstract class AbstractTransformed[+B] extends super[TraversableViewLike].Transformed[B] with Transformed[B]
47+
private[collection] abstract class AbstractTransformed[+B] extends Iterable[B] with super[TraversableViewLike].Transformed[B] with Transformed[B]
4848

4949
trait EmptyView extends Transformed[Nothing] with super[TraversableViewLike].EmptyView with super[GenIterableViewLike].EmptyView
5050

src/library/scala/collection/SeqViewLike.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ trait SeqViewLike[+A,
4040
}
4141

4242
/** Explicit instantiation of the `Transformed` trait to reduce class file size in subclasses. */
43-
private[collection] abstract class AbstractTransformed[+B] extends super[IterableViewLike].AbstractTransformed[B] with Transformed[B]
43+
private[collection] abstract class AbstractTransformed[+B] extends Seq[B] with super[IterableViewLike].Transformed[B] with Transformed[B]
4444

4545
trait EmptyView extends Transformed[Nothing] with super[IterableViewLike].EmptyView with super[GenSeqViewLike].EmptyView
4646

src/library/scala/collection/TraversableViewLike.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ trait TraversableViewLike[+A,
117117
}
118118

119119
/** Explicit instantiation of the `Transformed` trait to reduce class file size in subclasses. */
120-
private[collection] abstract class AbstractTransformed[+B] extends Transformed[B]
120+
private[collection] abstract class AbstractTransformed[+B] extends Traversable[B] with Transformed[B]
121121

122122
trait EmptyView extends Transformed[Nothing] with super.EmptyView
123123

test/files/run/t5971.check

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
r,b
2+
r
3+
a,b
4+
r,a,b

test/files/run/t5971.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
3+
4+
5+
6+
/** When using `AbstractTransformed` abstract inner class in views in order
7+
* to force generating bridges, one must take care to push the corresponding
8+
* collection trait (such as `Iterable` or `Seq`) as far as possible to the
9+
* left in the linearization order -- otherwise, overridden methods from these
10+
* traits can override the already overridden methods in view. This was the
11+
* case with `takeWhile`.
12+
* Mind blowing, I know.
13+
*/
14+
object Test {
15+
16+
def main(args: Array[String]) {
17+
println("bar".view.reverse.filter(_ > 'a').mkString(","))
18+
println("bar".view.reverse.take(1).mkString(","))
19+
println("bar".view.reverse.dropWhile(_ > 'a').mkString(","))
20+
println("bar".view.reverse.takeWhile(_ => true).mkString(","))
21+
}
22+
23+
}

0 commit comments

Comments
 (0)