Add toJavaPrimitive to OptionConverters

This commit is contained in:
Matthew de Detrich 2023-05-08 13:19:42 +02:00 committed by kerr
parent 07df607192
commit 0af7d3c5c1
3 changed files with 55 additions and 0 deletions

View file

@ -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
}

View file

@ -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
}
}

View file

@ -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
}
}