Skip to content

Commit ac96c1b

Browse files
committed
Optimise FutureConverters.toScala
Optimise `FutureConverters.toScala` for case when `CompletionStage` backed by `CompletableFuture`
1 parent 2002999 commit ac96c1b

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/main/scala/scala/compat/java8/FutureConverters.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
package scala.compat.java8
55

66
import scala.concurrent.java8.FuturesConvertersImpl._
7-
import scala.concurrent.{ Future, Promise, ExecutionContext, ExecutionContextExecutorService, ExecutionContextExecutor, impl }
8-
import java.util.concurrent.{ CompletionStage, Executor, ExecutorService, CompletableFuture }
9-
import scala.util.{ Try, Success, Failure }
10-
import java.util.function.{ BiConsumer, Function JF, Consumer, BiFunction }
7+
import scala.concurrent.{ExecutionContext, ExecutionContextExecutor, ExecutionContextExecutorService, Future, Promise}
8+
import java.util.concurrent.{CompletableFuture, CompletionStage, ExecutionException, Executor, ExecutorService}
9+
10+
import scala.util.{Failure, Try}
11+
import java.util.function.Consumer
1112

1213
/**
1314
* This class contains static methods which convert between Java CompletionStage
@@ -77,6 +78,8 @@ object FutureConverters {
7778
def toScala[T](cs: CompletionStage[T]): Future[T] = {
7879
cs match {
7980
case cf: CF[T] => cf.wrapped
81+
case cf: CompletableFuture[T] if cf.isDone =>
82+
Future fromTry Try(cf.get()).recoverWith { case e: ExecutionException => Failure(e.getCause) }
8083
case _ =>
8184
val p = new P[T](cs)
8285
cs whenComplete p

0 commit comments

Comments
 (0)