summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-02-25 19:46:52 +0000
committerPaul Phillips <paulp@improving.org>2011-02-25 19:46:52 +0000
commit34d3f1cb95b1cc0fba242296026e546366c483d9 (patch)
tree2007c4f9d36eb4e1c4bc24cbf02577ef0db548d3
parent49e8a4eef6d2e650f80f4e4817973102d1ea6335 (diff)
downloadscala-34d3f1cb95b1cc0fba242296026e546366c483d9.tar.gz
scala-34d3f1cb95b1cc0fba242296026e546366c483d9.tar.bz2
scala-34d3f1cb95b1cc0fba242296026e546366c483d9.zip
Made mkString work correctly on views.
about how to obtain a String and how not to. Closes #4297, no review.
-rw-r--r--src/library/scala/collection/TraversableViewLike.scala10
-rw-r--r--src/library/scala/collection/mutable/StringBuilder.scala13
-rw-r--r--src/library/scala/collection/parallel/ParIterableView.scala1
-rw-r--r--src/library/scala/collection/parallel/ParIterableViewLike.scala1
-rw-r--r--test/files/run/bug4297.scala7
5 files changed, 30 insertions, 2 deletions
diff --git a/src/library/scala/collection/TraversableViewLike.scala b/src/library/scala/collection/TraversableViewLike.scala
index 0c01cb893e..8d94a7f381 100644
--- a/src/library/scala/collection/TraversableViewLike.scala
+++ b/src/library/scala/collection/TraversableViewLike.scala
@@ -200,9 +200,19 @@ self =>
buf.result
}
+ // Have to overload all three to work around #4299. The overload
+ // is because mkString should force a view but toString should not.
+ override def mkString: String = mkString("")
+ override def mkString(sep: String): String = mkString("", sep, "")
+ override def mkString(start: String, sep: String, end: String): String = {
+ thisSeq.addString(new StringBuilder(), start, sep, end).toString
+ }
+
override def addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder =
b append start append "..." append end
+ override def toString = stringPrefix+"(...)"
+
override def filter(p: A => Boolean): This = newFiltered(p).asInstanceOf[This]
override def withFilter(p: A => Boolean): This = newFiltered(p).asInstanceOf[This]
override def partition(p: A => Boolean): (This, This) = (filter(p), filter(!p(_)))
diff --git a/src/library/scala/collection/mutable/StringBuilder.scala b/src/library/scala/collection/mutable/StringBuilder.scala
index 6c3715e560..73d3778650 100644
--- a/src/library/scala/collection/mutable/StringBuilder.scala
+++ b/src/library/scala/collection/mutable/StringBuilder.scala
@@ -432,11 +432,24 @@ final class StringBuilder(private val underlying: JavaStringBuilder)
/** Returns a new String representing the data in this sequence.
*
+ * @note because toString is inherited from AnyRef and used for
+ * many purposes, it is better practice to call mkString
+ * to obtain a StringBuilder result.
* @return the current contents of this sequence as a String
*/
override def toString = underlying.toString
+
+ /** Returns a new String representing the data in this sequence.
+ *
+ * @return the current contents of this sequence as a String
+ */
override def mkString = toString
+ /** Returns the result of this Builder, which in the case
+ * of StringBuilders is a StringBuilder (not a String.)
+ *
+ * @return this StringBuilder
+ */
def result(): StringBuilder = this
}
diff --git a/src/library/scala/collection/parallel/ParIterableView.scala b/src/library/scala/collection/parallel/ParIterableView.scala
index 0bcad549a2..f8e0f9909c 100644
--- a/src/library/scala/collection/parallel/ParIterableView.scala
+++ b/src/library/scala/collection/parallel/ParIterableView.scala
@@ -13,7 +13,6 @@ package scala.collection.parallel
import scala.collection.Parallel
-import scala.collection.TraversableViewLike
import scala.collection.IterableView
import scala.collection.generic.CanCombineFrom
diff --git a/src/library/scala/collection/parallel/ParIterableViewLike.scala b/src/library/scala/collection/parallel/ParIterableViewLike.scala
index d34aa10977..2b7bd03e7a 100644
--- a/src/library/scala/collection/parallel/ParIterableViewLike.scala
+++ b/src/library/scala/collection/parallel/ParIterableViewLike.scala
@@ -13,7 +13,6 @@ package scala.collection.parallel
import scala.collection.Parallel
-import scala.collection.TraversableViewLike
import scala.collection.IterableView
import scala.collection.IterableViewLike
import scala.collection.generic.CanBuildFrom
diff --git a/test/files/run/bug4297.scala b/test/files/run/bug4297.scala
new file mode 100644
index 0000000000..7497dfe4c2
--- /dev/null
+++ b/test/files/run/bug4297.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ def f = List(1,2,3).view
+ assert(f.toString == "SeqView(...)")
+ assert(f.mkString == "123")
+ }
+}