This is an automated email from the ASF dual-hosted git repository.

hepin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-pekko.git


The following commit(s) were added to refs/heads/main by this push:
     new 0af7d3c5c1 Add toJavaPrimitive to OptionConverters
0af7d3c5c1 is described below

commit 0af7d3c5c166eb498748aa723736d26258d4dfe9
Author: Matthew de Detrich <[email protected]>
AuthorDate: Mon May 8 13:19:42 2023 +0200

    Add toJavaPrimitive to OptionConverters
---
 .../org/apache/pekko/util/Scala212CompatTest.scala | 40 ++++++++++++++++++++++
 .../org/apache/pekko/util/OptionConverters.scala   |  8 +++++
 .../org/apache/pekko/util/OptionConverters.scala   |  7 ++++
 3 files changed, 55 insertions(+)

diff --git 
a/actor-tests/src/test/scala/org/apache/pekko/util/Scala212CompatTest.scala 
b/actor-tests/src/test/scala/org/apache/pekko/util/Scala212CompatTest.scala
new file mode 100644
index 0000000000..c77edd6c34
--- /dev/null
+++ b/actor-tests/src/test/scala/org/apache/pekko/util/Scala212CompatTest.scala
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * license agreements; and to You under the Apache License, version 2.0:
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * This file is part of the Apache Pekko project, derived from Akka.
+ */
+
+package org.apache.pekko.util
+
+import org.apache.pekko.util.OptionConverters._
+
+import java.util._
+
+/**
+ * These tests are here to ensure that methods from 
[[org.apache.pekko.util.FutureConverters]], 
[[org.apache.pekko.util.OptionConverters]]
+ * and [[org.apache.pekko.util.FunctionConverters]] that used within Pekko 
ecosystem but not Pekko core properly cross compile on Scala 2.12
+ * and Scala 2.13+.
+ *
+ * Remove this once Scala 2.12 support is dropped since all methods are in 
Scala 2.13+ stdlib
+ */
+object Scala212CompatTest {
+
+  // .toJavaPrimitive tests
+  val javaDoubleOptional: java.util.Optional[Double] = 
java.util.Optional.of(1.0)
+  val scalaDoubleOption: Option[Double] = Some(1.0)
+  val doubleOptionalToJavaPrimitive: OptionalDouble = 
javaDoubleOptional.toJavaPrimitive
+  val doubleOptionToJavaPrimitive: OptionalDouble = 
scalaDoubleOption.toJavaPrimitive
+
+  val javaIntOptional: java.util.Optional[Int] = java.util.Optional.of(1)
+  val scalaIntOption: Option[Int] = Some(1)
+  val intOptionalToJavaPrimitive: OptionalInt = javaIntOptional.toJavaPrimitive
+  val intOptionToJavaPrimitive: OptionalInt = scalaIntOption.toJavaPrimitive
+
+  val javaLongOptional: java.util.Optional[Long] = java.util.Optional.of(1L)
+  val scalaLongOption: Option[Long] = Some(1L)
+  val longOptionalToJavaPrimitive: OptionalLong = 
javaLongOptional.toJavaPrimitive
+  val longOptionToJavaPrimitive: OptionalLong = scalaLongOption.toJavaPrimitive
+}
diff --git 
a/actor/src/main/scala-2.12/org/apache/pekko/util/OptionConverters.scala 
b/actor/src/main/scala-2.12/org/apache/pekko/util/OptionConverters.scala
index 4c2af8f628..d2cc9057f2 100644
--- a/actor/src/main/scala-2.12/org/apache/pekko/util/OptionConverters.scala
+++ b/actor/src/main/scala-2.12/org/apache/pekko/util/OptionConverters.scala
@@ -20,11 +20,19 @@ import java.util.Optional
  */
 @InternalStableApi
 private[pekko] object OptionConverters {
+  import scala.compat.java8.OptionConverters.SpecializerOfOptions
+
   implicit final class RichOptional[A](private val o: java.util.Optional[A]) 
extends AnyVal {
     @inline def toScala: Option[A] = 
scala.compat.java8.OptionConverters.RichOptionalGeneric(o).asScala
+
+    @inline def toJavaPrimitive[O](implicit specOp: SpecializerOfOptions[A, 
O]): O =
+      scala.compat.java8.OptionConverters.RichOptionalGeneric(o).asPrimitive
   }
 
   implicit final class RichOption[A](private val o: Option[A]) extends AnyVal {
     @inline def toJava: Optional[A] = 
scala.compat.java8.OptionConverters.RichOptionForJava8(o).asJava
+
+    @inline def toJavaPrimitive[O](implicit specOp: SpecializerOfOptions[A, 
O]): O =
+      scala.compat.java8.OptionConverters.RichOptionForJava8(o).asPrimitive
   }
 }
diff --git 
a/actor/src/main/scala-2.13+/org/apache/pekko/util/OptionConverters.scala 
b/actor/src/main/scala-2.13+/org/apache/pekko/util/OptionConverters.scala
index b3b6ef4455..8c53e0d950 100644
--- a/actor/src/main/scala-2.13+/org/apache/pekko/util/OptionConverters.scala
+++ b/actor/src/main/scala-2.13+/org/apache/pekko/util/OptionConverters.scala
@@ -12,6 +12,7 @@ package org.apache.pekko.util
 import org.apache.pekko.annotation.InternalStableApi
 
 import java.util.Optional
+import scala.jdk.OptionShape
 
 /**
  * INTERNAL API
@@ -22,9 +23,15 @@ import java.util.Optional
 private[pekko] object OptionConverters {
   implicit final class RichOptional[A](private val o: java.util.Optional[A]) 
extends AnyVal {
     @inline def toScala: Option[A] = 
scala.jdk.OptionConverters.RichOptional(o).toScala
+
+    @inline def toJavaPrimitive[O](implicit shape: OptionShape[A, O]): O =
+      scala.jdk.OptionConverters.RichOptional(o).toJavaPrimitive
   }
 
   implicit final class RichOption[A](private val o: Option[A]) extends AnyVal {
     @inline def toJava: Optional[A] = 
scala.jdk.OptionConverters.RichOption(o).toJava
+
+    def toJavaPrimitive[O](implicit shape: OptionShape[A, O]): O =
+      scala.jdk.OptionConverters.RichOption(o).toJavaPrimitive
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to