diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-04 10:46:29 +0200 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-04 10:48:57 +0200 |
commit | 628eaa5aca0117823327571a1384f0d717fd7b4e (patch) | |
tree | 4b0826cea24d0c94c15bbca0b23e6b177336682d | |
parent | f146d5826fc335ee1ca9c285d69086a7475cb71e (diff) | |
download | scala-628eaa5aca0117823327571a1384f0d717fd7b4e.tar.gz scala-628eaa5aca0117823327571a1384f0d717fd7b4e.tar.bz2 scala-628eaa5aca0117823327571a1384f0d717fd7b4e.zip |
Fix for si-5018.
Methods keySet, values and withDefault now return serializable collections.
-rw-r--r-- | src/library/scala/collection/Map.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/MapLike.scala | 4 | ||||
-rw-r--r-- | test/files/run/t5018.scala (renamed from test/pending/run/t5018.scala) | 5 |
3 files changed, 7 insertions, 4 deletions
diff --git a/src/library/scala/collection/Map.scala b/src/library/scala/collection/Map.scala index a124e60c96..42a56a9c5a 100644 --- a/src/library/scala/collection/Map.scala +++ b/src/library/scala/collection/Map.scala @@ -45,7 +45,7 @@ object Map extends MapFactory[Map] { /** An abstract shell used by { mutable, immutable }.Map but not by collection.Map * because of variance issues. */ - abstract class WithDefault[A, +B](underlying: Map[A, B], d: A => B) extends AbstractMap[A, B] with Map[A, B] { + abstract class WithDefault[A, +B](underlying: Map[A, B], d: A => B) extends AbstractMap[A, B] with Map[A, B] with Serializable { override def size = underlying.size def get(key: A) = underlying.get(key) // removed in 2.9: orElse Some(default(key)) def iterator = underlying.iterator diff --git a/src/library/scala/collection/MapLike.scala b/src/library/scala/collection/MapLike.scala index 034c1a0c0c..b2b687e75a 100644 --- a/src/library/scala/collection/MapLike.scala +++ b/src/library/scala/collection/MapLike.scala @@ -165,7 +165,7 @@ self => /** The implementation class of the set returned by `keySet`. */ - protected class DefaultKeySet extends AbstractSet[A] with Set[A] { + protected class DefaultKeySet extends AbstractSet[A] with Set[A] with Serializable { def contains(key : A) = self.contains(key) def iterator = keysIterator def + (elem: A): Set[A] = (Set[A]() ++ this + elem).asInstanceOf[Set[A]] // !!! concrete overrides abstract problem @@ -200,7 +200,7 @@ self => /** The implementation class of the iterable returned by `values`. */ - protected class DefaultValuesIterable extends AbstractIterable[B] with Iterable[B] { + protected class DefaultValuesIterable extends AbstractIterable[B] with Iterable[B] with Serializable { def iterator = valuesIterator override def size = self.size override def foreach[C](f: B => C) = self.valuesIterator foreach f diff --git a/test/pending/run/t5018.scala b/test/files/run/t5018.scala index 30c0d5ac94..bb67a252e5 100644 --- a/test/pending/run/t5018.scala +++ b/test/files/run/t5018.scala @@ -18,7 +18,7 @@ object Test { def main(args: Array[String]) { val values = mutable.Map(1 -> 1).values - assert(serializeDeserialize(values) == values) + assert(serializeDeserialize(values).toList == values.toList) val keyset = mutable.Map(1 -> 1).keySet assert(serializeDeserialize(keyset) == keyset) @@ -28,6 +28,9 @@ object Test { val defaultmap = immutable.Map(1 -> 1).withDefaultValue(1) assert(serializeDeserialize(defaultmap) == defaultmap) + + val minusmap = mutable.Map(1 -> 1).withDefault(x => -x) + assert(serializeDeserialize(minusmap) == minusmap) } } |