Add toJavaPrimitive to OptionConverters
This commit is contained in:
parent
07df607192
commit
0af7d3c5c1
3 changed files with 55 additions and 0 deletions
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -20,11 +20,19 @@ import java.util.Optional
|
||||||
*/
|
*/
|
||||||
@InternalStableApi
|
@InternalStableApi
|
||||||
private[pekko] object OptionConverters {
|
private[pekko] object OptionConverters {
|
||||||
|
import scala.compat.java8.OptionConverters.SpecializerOfOptions
|
||||||
|
|
||||||
implicit final class RichOptional[A](private val o: java.util.Optional[A]) extends AnyVal {
|
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 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 {
|
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 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ package org.apache.pekko.util
|
||||||
import org.apache.pekko.annotation.InternalStableApi
|
import org.apache.pekko.annotation.InternalStableApi
|
||||||
|
|
||||||
import java.util.Optional
|
import java.util.Optional
|
||||||
|
import scala.jdk.OptionShape
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* INTERNAL API
|
* INTERNAL API
|
||||||
|
|
@ -22,9 +23,15 @@ import java.util.Optional
|
||||||
private[pekko] object OptionConverters {
|
private[pekko] object OptionConverters {
|
||||||
implicit final class RichOptional[A](private val o: java.util.Optional[A]) extends AnyVal {
|
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 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 {
|
implicit final class RichOption[A](private val o: Option[A]) extends AnyVal {
|
||||||
@inline def toJava: Optional[A] = scala.jdk.OptionConverters.RichOption(o).toJava
|
@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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue