summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bincompat-backward.whitelist.conf6
-rw-r--r--bincompat-forward.whitelist.conf6
-rw-r--r--src/library/scala/concurrent/impl/Promise.scala4
-rw-r--r--test/files/jvm/future-spec/FutureTests.scala20
-rw-r--r--versions.properties2
5 files changed, 35 insertions, 3 deletions
diff --git a/bincompat-backward.whitelist.conf b/bincompat-backward.whitelist.conf
index 0d85590b41..0770b3cb95 100644
--- a/bincompat-backward.whitelist.conf
+++ b/bincompat-backward.whitelist.conf
@@ -217,6 +217,12 @@ filter {
{
matchName="scala.concurrent.impl.Promise$DefaultPromise"
problemName=MissingTypesProblem
+ },
+ // SI-9488: Due to SI-8362 above, toString was silently changed to the AtomicReference toString implementation,
+ // This is fixed by SI-9488, and this should be safe since the class in question is stdlib internal.
+ {
+ matchName="scala.concurrent.impl.Promise.toString"
+ problemName=MissingMethodProblem
}
]
}
diff --git a/bincompat-forward.whitelist.conf b/bincompat-forward.whitelist.conf
index a9fbaa7b87..c6cffee846 100644
--- a/bincompat-forward.whitelist.conf
+++ b/bincompat-forward.whitelist.conf
@@ -381,6 +381,12 @@ filter {
{
matchName="scala.concurrent.impl.Promise$DefaultPromise"
problemName=MissingTypesProblem
+ },
+ // SI-9488: Due to SI-8362 above, toString was silently changed to the AtomicReference toString implementation,
+ // This is fixed by SI-9488, and this should be safe since the class in question is stdlib internal.
+ {
+ matchName="scala.concurrent.impl.Promise.toString"
+ problemName=MissingMethodProblem
}
]
}
diff --git a/src/library/scala/concurrent/impl/Promise.scala b/src/library/scala/concurrent/impl/Promise.scala
index b15601058e..6d2fc5c87c 100644
--- a/src/library/scala/concurrent/impl/Promise.scala
+++ b/src/library/scala/concurrent/impl/Promise.scala
@@ -19,6 +19,10 @@ import java.util.concurrent.locks.AbstractQueuedSynchronizer
private[concurrent] trait Promise[T] extends scala.concurrent.Promise[T] with scala.concurrent.Future[T] {
def future: this.type = this
+ override def toString: String = value match {
+ case Some(result) => "Future("+result+")"
+ case None => "Future(<not completed>)"
+ }
}
/* Precondition: `executor` is prepared, i.e., `executor` has been returned from invocation of `prepare` on some other `ExecutionContext`.
diff --git a/test/files/jvm/future-spec/FutureTests.scala b/test/files/jvm/future-spec/FutureTests.scala
index a290af9cd3..efe9c59d7a 100644
--- a/test/files/jvm/future-spec/FutureTests.scala
+++ b/test/files/jvm/future-spec/FutureTests.scala
@@ -24,7 +24,7 @@ class FutureTests extends MinimalScalaTest {
"A future with custom ExecutionContext" should {
"shouldHandleThrowables" in {
val ms = new mutable.HashSet[Throwable] with mutable.SynchronizedSet[Throwable]
- implicit val ec = scala.concurrent.ExecutionContext.fromExecutor(new scala.concurrent.forkjoin.ForkJoinPool(), {
+ implicit val ec = scala.concurrent.ExecutionContext.fromExecutorService(new scala.concurrent.forkjoin.ForkJoinPool(), {
t =>
ms += t
})
@@ -64,7 +64,7 @@ class FutureTests extends MinimalScalaTest {
Await.ready(waiting, 2000 millis)
ms.size mustBe (4)
- //FIXME should check
+ ec.shutdownNow()
}
}
@@ -543,6 +543,22 @@ class FutureTests extends MinimalScalaTest {
Await.ready(f, defaultTimeout).value.get.toString mustBe expected.toString
}
+ "should have a decent toString representation" in {
+ val i = scala.concurrent.forkjoin.ThreadLocalRandom.current.nextInt()
+ val e = new Exception(i.toString)
+ val successString = "Future(Success("+i+"))"
+ val failureString = "Future(Failure("+e+"))"
+ val notCompletedString = "Future(<not completed>)"
+
+ Future.successful(i).toString mustBe successString
+ Future.failed[Int](e).toString mustBe failureString
+ Promise[Int]().toString mustBe notCompletedString
+ Promise[Int]().success(i).toString mustBe successString
+ Promise[Int]().failure(e).toString mustBe failureString
+ Await.ready(Future(i)(ExecutionContext.global), defaultTimeout).toString mustBe successString
+ Await.ready(Future(throw e)(ExecutionContext.global), defaultTimeout).toString mustBe failureString
+ }
+
}
}
diff --git a/versions.properties b/versions.properties
index 7883f0e3c7..afea93f666 100644
--- a/versions.properties
+++ b/versions.properties
@@ -25,7 +25,7 @@ scala.binary.version=2.11
scala.full.version=2.11.8
# external modules shipped with distribution, as specified by scala-library-all's pom
-scala-xml.version.number=1.0.4
+scala-xml.version.number=1.0.5
scala-parser-combinators.version.number=1.0.4
scala-continuations-plugin.version.number=1.0.2
scala-continuations-library.version.number=1.0.2