From 7209116540dee44916214870cc476546b20e0eae Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Thu, 1 Oct 2009 19:31:06 +0000 Subject: Fix and test case for #2075. --- src/library/scala/collection/SortedMapLike.scala | 8 +++----- src/library/scala/collection/SortedSet.scala | 2 +- src/library/scala/collection/SortedSetLike.scala | 2 ++ src/library/scala/collection/immutable/SortedSet.scala | 2 +- test/files/run/bug2075.scala | 7 +++++++ 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 test/files/run/bug2075.scala diff --git a/src/library/scala/collection/SortedMapLike.scala b/src/library/scala/collection/SortedMapLike.scala index 2e75053f9b..c7a8ebbd62 100644 --- a/src/library/scala/collection/SortedMapLike.scala +++ b/src/library/scala/collection/SortedMapLike.scala @@ -36,11 +36,9 @@ self => override def keySet : SortedSet[A] = new DefaultKeySortedSet protected class DefaultKeySortedSet extends super.DefaultKeySet with SortedSet[A] { - def ordering = self.ordering; - /** We can't give an implementation of +/- here because we do not have a generic sorted set implementation - */ - override def + (elem: A): SortedSet[A] = throw new UnsupportedOperationException("keySet.+") - override def - (elem: A): SortedSet[A] = throw new UnsupportedOperationException("keySet.-") + implicit def ordering = self.ordering + override def + (elem: A): SortedSet[A] = (SortedSet[A]() ++ this + elem) + override def - (elem: A): SortedSet[A] = (SortedSet[A]() ++ this - elem) override def rangeImpl(from : Option[A], until : Option[A]) : SortedSet[A] = { val map = self.rangeImpl(from, until) new map.DefaultKeySortedSet diff --git a/src/library/scala/collection/SortedSet.scala b/src/library/scala/collection/SortedSet.scala index a1213a9dc4..33e5551824 100644 --- a/src/library/scala/collection/SortedSet.scala +++ b/src/library/scala/collection/SortedSet.scala @@ -20,7 +20,7 @@ import generic._ */ trait SortedSet[A] extends Set[A] with SortedSetLike[A, SortedSet[A]] { /** Needs to be overridden in subclasses. */ - override def empty: SortedSet[A] = throw new UnsupportedOperationException("SortedMap.empty") + override def empty: SortedSet[A] = SortedSet.empty[A] } /** diff --git a/src/library/scala/collection/SortedSetLike.scala b/src/library/scala/collection/SortedSetLike.scala index b0a2f20992..1c41ee3a5a 100644 --- a/src/library/scala/collection/SortedSetLike.scala +++ b/src/library/scala/collection/SortedSetLike.scala @@ -21,6 +21,8 @@ import generic._ trait SortedSetLike[A, +This <: SortedSet[A] with SortedSetLike[A, This]] extends Sorted[A, This] with SetLike[A, This] { self => + implicit def ordering: Ordering[A] + override def keySet = repr override def firstKey: A = head diff --git a/src/library/scala/collection/immutable/SortedSet.scala b/src/library/scala/collection/immutable/SortedSet.scala index 0fd9365dd1..126b751164 100644 --- a/src/library/scala/collection/immutable/SortedSet.scala +++ b/src/library/scala/collection/immutable/SortedSet.scala @@ -24,7 +24,7 @@ import mutable.Builder */ trait SortedSet[A] extends Set[A] with scala.collection.SortedSet[A] with SortedSetLike[A, SortedSet[A]] { /** Needs to be overridden in subclasses. */ - override def empty: SortedSet[A] = throw new UnsupportedOperationException("SortedMap.empty") + override def empty: SortedSet[A] = SortedSet.empty[A] } /** diff --git a/test/files/run/bug2075.scala b/test/files/run/bug2075.scala new file mode 100644 index 0000000000..f328faddcb --- /dev/null +++ b/test/files/run/bug2075.scala @@ -0,0 +1,7 @@ +object Test extends Application { + var tm = new scala.collection.immutable.TreeMap[Int,Int] + for (i <- 0 to 100) + tm = tm.insert(i, i) + + tm.keySet.filter(_ < 40) +} \ No newline at end of file -- cgit v1.2.3