summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorJosh Suereth <joshua.suereth@gmail.com>2012-09-04 11:01:44 -0400
committerJosh Suereth <joshua.suereth@gmail.com>2012-09-11 07:27:18 -0400
commit674e0f80016dd70cd04c533daceeaa12161dae17 (patch)
treed76de33b3152f1ee0f0d3e9f13cb8ff364abfff1 /src/library
parentca23e50d2df14ce999c657a5f3cf79e5ffb6a450 (diff)
downloadscala-674e0f80016dd70cd04c533daceeaa12161dae17.tar.gz
scala-674e0f80016dd70cd04c533daceeaa12161dae17.tar.bz2
scala-674e0f80016dd70cd04c533daceeaa12161dae17.zip
Fix t6114 - ++ on JList wrapper modifies underlying collection.
We solve this by overriding clone for JListWrapper to actually do a full clone. Note: This fix may need to be included other places, *but* we're not sure we've cloned the collection sensibly. I.e. is ArrayList a good default?
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/convert/Wrappers.scala7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/library/scala/collection/convert/Wrappers.scala b/src/library/scala/collection/convert/Wrappers.scala
index 75707b69b0..7c97972c48 100644
--- a/src/library/scala/collection/convert/Wrappers.scala
+++ b/src/library/scala/collection/convert/Wrappers.scala
@@ -96,6 +96,9 @@ private[collection] trait Wrappers {
def remove(i: Int) = underlying.remove(i)
def clear() = underlying.clear()
def result = this
+ // Note: Clone cannot just call underlying.clone because in Java, only specific collections
+ // expose clone methods. Generically, they're protected.
+ override def clone(): JListWrapper[A] = JListWrapper(new ju.ArrayList[A](underlying))
}
class SetWrapper[A](underlying: Set[A]) extends ju.AbstractSet[A] {
@@ -149,6 +152,10 @@ private[collection] trait Wrappers {
override def clear() = underlying.clear()
override def empty = JSetWrapper(new ju.HashSet[A])
+ // Note: Clone cannot just call underlying.clone because in Java, only specific collections
+ // expose clone methods. Generically, they're protected.
+ override def clone() =
+ new JSetWrapper[A](new ju.LinkedHashSet[A](underlying))
}
class MapWrapper[A, B](underlying: Map[A, B]) extends ju.AbstractMap[A, B] { self =>