This is an automated email from the ASF dual-hosted git repository.
mdedetrich pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-http.git
The following commit(s) were added to refs/heads/main by this push:
new 156720f4f Use new pekko-core OptionalUtil
156720f4f is described below
commit 156720f4f3c6f0b6b69dba1d4b3703223e937d76
Author: Matthew de Detrich <[email protected]>
AuthorDate: Wed Dec 10 10:24:08 2025 +1100
Use new pekko-core OptionalUtil
---
.../java/org/apache/pekko/http/impl/util/Util.java | 48 ++--------------------
.../pekko/http/javadsl/model/ContentRange.java | 5 ++-
.../apache/pekko/http/javadsl/model/DateTime.java | 4 +-
.../http/javadsl/model/headers/HttpCookie.java | 29 ++++++-------
.../http/javadsl/model/headers/RetryAfter.java | 6 +--
.../http/javadsl/model/sse/ServerSentEvent.java | 8 ++--
.../use-pekko-core-optionalutil.excludes | 21 ++++++++++
.../pekko/http/scaladsl/model/HttpMessage.scala | 5 ++-
.../pekko/http/scaladsl/model/Multipart.scala | 8 ++--
9 files changed, 58 insertions(+), 76 deletions(-)
diff --git a/http-core/src/main/java/org/apache/pekko/http/impl/util/Util.java
b/http-core/src/main/java/org/apache/pekko/http/impl/util/Util.java
index 254ead19e..dbee9590c 100644
--- a/http-core/src/main/java/org/apache/pekko/http/impl/util/Util.java
+++ b/http-core/src/main/java/org/apache/pekko/http/impl/util/Util.java
@@ -13,29 +13,19 @@
package org.apache.pekko.http.impl.util;
-import scala.None$;
import scala.collection.immutable.Map$;
import scala.collection.immutable.Seq;
-import scala.jdk.javaapi.OptionConverters;
import org.apache.pekko.stream.scaladsl.Source;
import org.apache.pekko.http.ccompat.MapHelpers;
+import org.apache.pekko.util.OptionalUtil;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
-import java.util.OptionalInt;
-import java.util.OptionalLong;
/** Contains internal helper methods. */
public abstract class Util {
- @SuppressWarnings("unchecked") // no support for covariance of option in Java
- // needed to provide covariant conversions that the Java interfaces don't
provide automatically.
- // The alternative would be having to cast around everywhere instead of
doing it here in a central
- // place.
- public static <U, T extends U> Optional<U> convertOption(scala.Option<T> o) {
- return (Optional<U>) (Object) OptionConverters.toJava(o);
- }
@SuppressWarnings("unchecked") // no support for covariance of Publisher in
Java
// needed to provide covariant conversions that the Java interfaces don't
provide automatically.
@@ -55,41 +45,9 @@ public abstract class Util {
return MapHelpers.convertMapToScala(map);
}
- @SuppressWarnings("unchecked") // contains an upcast
- public static <T, U extends T> scala.Option<U>
convertOptionalToScala(Optional<T> o) {
- return OptionConverters.toScala((Optional<U>) o);
- }
-
- // This is needed to be used in Java source code that calls Scala code which
expects scala.Long
- // since an implicit cast from java.lang.Long to scala.Long is not available
in Java source
- public static scala.Option<Object> convertOptionalToScala(OptionalLong o) {
- if (o.isPresent()) {
- return new scala.Some(o.getAsLong());
- } else {
- return scala.Option.empty();
- }
- }
-
- // This is needed to be used in Java source code that calls Scala code which
expects scala.Int
- // since an implicit cast from java.lang.Int to scala.Int is not available
in Java source
- public static scala.Option<Object> convertOptionalToScala(OptionalInt o) {
- if (o.isPresent()) {
- return new scala.Some(o.getAsInt());
- } else {
- return scala.Option.empty();
- }
- }
-
public static final scala.collection.immutable.Map<String, String> emptyMap =
Map$.MODULE$.<String, String>empty();
- private static final scala.Option<?> noneValue = None$.MODULE$;
-
- @SuppressWarnings("unchecked")
- public static <T> scala.Option<T> scalaNone() {
- return (scala.Option<T>) noneValue;
- }
-
@SuppressWarnings("unchecked")
public static <T, U extends T> Seq<U> convertIterable(Iterable<T> els) {
return
scala.collection.JavaConverters.iterableAsScalaIterableConverter((Iterable<U>)
els)
@@ -103,7 +61,7 @@ public abstract class Util {
public static <J, V extends J> Optional<J> lookupInRegistry(
ObjectRegistry<Object, V> registry, int key) {
- return Util.<J, V>convertOption(registry.getForKey(key));
+ return OptionalUtil.<J, V>convertOption(registry.getForKey(key));
}
public static <J, V extends J> Optional<J> lookupInRegistry(
@@ -113,6 +71,6 @@ public abstract class Util {
public static <K, J, V extends J> Optional<J> lookupInRegistry(
ObjectRegistry<K, V> registry, K key) {
- return Util.<J, V>convertOption(registry.getForKey(key));
+ return OptionalUtil.<J, V>convertOption(registry.getForKey(key));
}
}
diff --git
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/ContentRange.java
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/ContentRange.java
index 38c1415f9..9dc38202d 100644
---
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/ContentRange.java
+++
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/ContentRange.java
@@ -17,7 +17,7 @@ import org.apache.pekko.http.scaladsl.model.ContentRange$;
import java.util.Optional;
import java.util.OptionalLong;
-import org.apache.pekko.http.impl.util.Util;
+import org.apache.pekko.util.OptionalUtil;
public abstract class ContentRange {
public abstract boolean isByteContentRange();
@@ -44,7 +44,8 @@ public abstract class ContentRange {
@SuppressWarnings("unchecked")
public static ContentRange create(long first, long last, OptionalLong
instanceLength) {
- return ContentRange$.MODULE$.apply(first, last,
Util.convertOptionalToScala(instanceLength));
+ return ContentRange$.MODULE$.apply(
+ first, last, OptionalUtil.convertOptionalToScala(instanceLength));
}
public static ContentRange createUnsatisfiable(long length) {
diff --git
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/DateTime.java
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/DateTime.java
index 2968f53b2..7456a68b4 100644
--- a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/DateTime.java
+++ b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/DateTime.java
@@ -13,7 +13,7 @@
package org.apache.pekko.http.javadsl.model;
-import org.apache.pekko.http.impl.util.Util;
+import org.apache.pekko.util.OptionalUtil;
import java.util.Optional;
@@ -90,7 +90,7 @@ public abstract class DateTime {
* if parsing has failed.
*/
public static Optional<DateTime> fromIsoDateTimeString(String
isoDateTimeString) {
- return Util.<DateTime,
org.apache.pekko.http.scaladsl.model.DateTime>convertOption(
+ return OptionalUtil.<DateTime,
org.apache.pekko.http.scaladsl.model.DateTime>convertOption(
org.apache.pekko.http.scaladsl.model.DateTime.fromIsoDateTimeString(isoDateTimeString));
}
diff --git
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/HttpCookie.java
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/HttpCookie.java
index a053a2571..b9ec8834f 100644
---
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/HttpCookie.java
+++
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/HttpCookie.java
@@ -15,7 +15,7 @@ package org.apache.pekko.http.javadsl.model.headers;
import org.apache.pekko.annotation.DoNotInherit;
import org.apache.pekko.http.javadsl.model.DateTime;
-import org.apache.pekko.http.impl.util.Util;
+import org.apache.pekko.util.OptionalUtil;
import java.util.Optional;
import java.util.OptionalLong;
@@ -50,14 +50,14 @@ public abstract class HttpCookie {
return new org.apache.pekko.http.scaladsl.model.headers.HttpCookie(
name,
value,
- Util.<org.apache.pekko.http.scaladsl.model.DateTime>scalaNone(),
- Util.scalaNone(),
- Util.<String>scalaNone(),
- Util.<String>scalaNone(),
+
OptionalUtil.<org.apache.pekko.http.scaladsl.model.DateTime>scalaNone(),
+ OptionalUtil.scalaNone(),
+ OptionalUtil.<String>scalaNone(),
+ OptionalUtil.<String>scalaNone(),
false,
false,
- Util.<String>scalaNone(),
-
Util.<org.apache.pekko.http.scaladsl.model.headers.SameSite>scalaNone());
+ OptionalUtil.<String>scalaNone(),
+
OptionalUtil.<org.apache.pekko.http.scaladsl.model.headers.SameSite>scalaNone());
}
public static HttpCookie create(
@@ -65,14 +65,14 @@ public abstract class HttpCookie {
return new org.apache.pekko.http.scaladsl.model.headers.HttpCookie(
name,
value,
- Util.<org.apache.pekko.http.scaladsl.model.DateTime>scalaNone(),
- Util.scalaNone(),
+
OptionalUtil.<org.apache.pekko.http.scaladsl.model.DateTime>scalaNone(),
+ OptionalUtil.scalaNone(),
OptionConverters.toScala(domain),
OptionConverters.toScala(path),
false,
false,
- Util.<String>scalaNone(),
-
Util.<org.apache.pekko.http.scaladsl.model.headers.SameSite>scalaNone());
+ OptionalUtil.<String>scalaNone(),
+
OptionalUtil.<org.apache.pekko.http.scaladsl.model.headers.SameSite>scalaNone());
}
@SuppressWarnings("unchecked")
@@ -90,9 +90,10 @@ public abstract class HttpCookie {
return new org.apache.pekko.http.scaladsl.model.headers.HttpCookie(
name,
value,
- Util.<DateTime,
org.apache.pekko.http.scaladsl.model.DateTime>convertOptionalToScala(
- expires),
- Util.convertOptionalToScala(maxAge),
+ OptionalUtil
+ .<DateTime,
org.apache.pekko.http.scaladsl.model.DateTime>convertOptionalToScala(
+ expires),
+ OptionalUtil.convertOptionalToScala(maxAge),
OptionConverters.toScala(domain),
OptionConverters.toScala(path),
secure,
diff --git
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/RetryAfter.java
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/RetryAfter.java
index da18ff64a..ffa60ceee 100644
---
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/RetryAfter.java
+++
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/headers/RetryAfter.java
@@ -11,11 +11,11 @@
package org.apache.pekko.http.javadsl.model.headers;
import java.util.Optional;
-import org.apache.pekko.http.impl.util.Util;
import org.apache.pekko.http.javadsl.model.DateTime;
import org.apache.pekko.http.scaladsl.model.headers.Retry$minusAfter;
import org.apache.pekko.http.scaladsl.model.headers.RetryAfterDuration;
import org.apache.pekko.http.scaladsl.model.headers.RetryAfterDateTime;
+import org.apache.pekko.util.OptionalUtil;
/**
* Model for the `Retry-After` header. Specification:
* //https://tools.ietf.org/html/rfc7231#section-7.1.3
@@ -28,12 +28,12 @@ public abstract class RetryAfter extends
org.apache.pekko.http.scaladsl.model.Ht
/** number of seconds for the retry attempt, if available */
public Optional<Long> getDelaySeconds() {
- return Util.convertOption(delaySeconds());
+ return OptionalUtil.convertOption(delaySeconds());
}
/** the date for the retry attempt, if available */
public Optional<DateTime> getDateTime() {
- return Util.convertOption(dateTime());
+ return OptionalUtil.convertOption(dateTime());
}
public static RetryAfter create(Long delaySeconds) {
diff --git
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/sse/ServerSentEvent.java
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/sse/ServerSentEvent.java
index fd71c54e0..d93b9e2da 100644
---
a/http-core/src/main/java/org/apache/pekko/http/javadsl/model/sse/ServerSentEvent.java
+++
b/http-core/src/main/java/org/apache/pekko/http/javadsl/model/sse/ServerSentEvent.java
@@ -22,7 +22,7 @@ import java.util.OptionalInt;
import scala.Option;
import scala.jdk.javaapi.OptionConverters;
-import org.apache.pekko.http.impl.util.Util;
+import org.apache.pekko.util.OptionalUtil;
/**
* Representation of a server-sent event. According to the specification, an
empty data field
@@ -30,9 +30,9 @@ import org.apache.pekko.http.impl.util.Util;
*/
public abstract class ServerSentEvent {
- private static final Option<String> stringNone = Util.scalaNone();
+ private static final Option<String> stringNone = OptionalUtil.scalaNone();
- private static final Option<Object> intNone = Util.scalaNone();
+ private static final Option<Object> intNone = OptionalUtil.scalaNone();
/** Provides a [[ServerSentEvent]] with empty data which can be used as a
heartbeat */
public static ServerSentEvent heartbeat() {
@@ -94,7 +94,7 @@ public abstract class ServerSentEvent {
data,
OptionConverters.toScala(type),
OptionConverters.toScala(id),
- Util.convertOptionalToScala(retry));
+ OptionalUtil.convertOptionalToScala(retry));
}
/** Data, may span multiple lines. */
diff --git
a/http-core/src/main/mima-filters/2.0.x.backwards.excludes/use-pekko-core-optionalutil.excludes
b/http-core/src/main/mima-filters/2.0.x.backwards.excludes/use-pekko-core-optionalutil.excludes
new file mode 100644
index 000000000..d3d805d5f
--- /dev/null
+++
b/http-core/src/main/mima-filters/2.0.x.backwards.excludes/use-pekko-core-optionalutil.excludes
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Use OptionalUtil from pekko-core
+ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.pekko.http.impl.util.Util.convertOption")
+ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.pekko.http.impl.util.Util.convertOptionalToScala")
+ProblemFilters.exclude[DirectMissingMethodProblem]("org.apache.pekko.http.impl.util.Util.scalaNone")
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpMessage.scala
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpMessage.scala
index 9e300ebe9..019135276 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpMessage.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpMessage.scala
@@ -36,6 +36,7 @@ import pekko.http.scaladsl.util.FastFuture._
import pekko.http.scaladsl.model.headers._
import pekko.stream.scaladsl.Flow
import pekko.stream.{ FlowShape, Graph, Materializer, SystemMaterializer }
+import pekko.util.OptionalUtil
/**
* Common base class of HttpRequest and HttpResponse.
@@ -218,7 +219,7 @@ sealed trait HttpMessage extends jm.HttpMessage {
/** Java API */
def getHeader(headerName: String): Optional[jm.HttpHeader] = {
val lowerCased = headerName.toRootLowerCase
- Util.convertOption(headers.find(_.is(lowerCased))) // Upcast because of
invariance
+ OptionalUtil.convertOption(headers.find(_.is(lowerCased))) // Upcast
because of invariance
}
/** Java API */
@@ -231,7 +232,7 @@ sealed trait HttpMessage extends jm.HttpMessage {
/** Java API */
def getAttribute[T](attributeKey: jm.AttributeKey[T]): Optional[T] =
- Util.convertOption(attribute(attributeKey))
+ OptionalUtil.convertOption(attribute(attributeKey))
/** Java API */
def toStrict(timeoutMillis: Long, ec: Executor, materializer: Materializer):
CompletionStage[Self] = {
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/Multipart.scala
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/Multipart.scala
index 48142cefe..2533ef633 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/Multipart.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/Multipart.scala
@@ -22,7 +22,7 @@ import org.apache.pekko
import pekko.annotation.InternalApi
import pekko.event.LoggingAdapter
import pekko.http.impl.engine.rendering.BodyPartRenderer
-import pekko.http.impl.util.{ DefaultNoLogging, Util }
+import pekko.http.impl.util.DefaultNoLogging
import pekko.http.impl.util.JavaMapping.Implicits._
import pekko.http.javadsl.{ model => jm }
import pekko.http.scaladsl.util.FastFuture
@@ -31,7 +31,7 @@ import pekko.http.scaladsl.model.headers._
import pekko.stream.Materializer
import pekko.stream.javadsl.{ Source => JSource }
import pekko.stream.scaladsl._
-import pekko.util.ConstantFun
+import pekko.util.{ ConstantFun, OptionalUtil }
import scala.concurrent.duration.FiniteDuration
import scala.concurrent.Future
@@ -189,13 +189,13 @@ object Multipart {
/** Java API */
def getContentDispositionHeader: Optional[jm.headers.ContentDisposition] =
- Util.convertOption(contentDispositionHeader)
+ OptionalUtil.convertOption(contentDispositionHeader)
/** Java API */
def getDispositionParams: java.util.Map[String, String] =
dispositionParams.asJava
/** Java API */
- def getDispositionType: Optional[jm.headers.ContentDispositionType] =
Util.convertOption(dispositionType)
+ def getDispositionType: Optional[jm.headers.ContentDispositionType] =
OptionalUtil.convertOption(dispositionType)
/** Java API */
def toStrict(timeoutMillis: Long, materializer: Materializer):
CompletionStage[_ <: jm.Multipart.BodyPart.Strict] =
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]