This is an automated email from the ASF dual-hosted git repository.
pjfanning 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 60d20213b Replace expressions with Single Abstract Methods (SAMs)
(#1164)
60d20213b is described below
commit 60d20213b67faad778d573f6de04d5dc92914855
Author: Philippus Baalman <[email protected]>
AuthorDate: Tue Jul 14 09:46:33 2026 +0200
Replace expressions with Single Abstract Methods (SAMs) (#1164)
---
.../engine/client/pool/NewHostConnectionPool.scala | 5 +----
.../impl/engine/server/HttpServerBluePrint.scala | 2 +-
.../apache/pekko/http/impl/util/StreamUtils.scala | 2 +-
.../javadsl/settings/ClientConnectionSettings.scala | 8 ++------
.../settings/ClientConnectionSettings.scala | 4 +---
.../http/scaladsl/settings/ParserSettings.scala | 16 ++++++----------
.../http/scaladsl/settings/WebSocketSettings.scala | 8 ++------
.../pekko/http/javadsl/HttpExtensionApiSpec.scala | 12 +++---------
.../scala/org/apache/pekko/testkit/Coroner.scala | 2 +-
.../scaladsl/RouteJavaScalaDslConversionSpec.scala | 4 +---
.../http/javadsl/common/PartialApplication.scala | 6 +-----
.../pekko/http/javadsl/server/Directives.scala | 21 +++------------------
.../pekko/http/scaladsl/server/Rejection.scala | 16 +++++++---------
.../impl/engine/http2/Http2FrameHpackSupport.scala | 8 +++-----
14 files changed, 33 insertions(+), 81 deletions(-)
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/impl/engine/client/pool/NewHostConnectionPool.scala
b/http-core/src/main/scala/org/apache/pekko/http/impl/engine/client/pool/NewHostConnectionPool.scala
index fc1948bf1..dd7e1fcdb 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/impl/engine/client/pool/NewHostConnectionPool.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/impl/engine/client/pool/NewHostConnectionPool.scala
@@ -637,10 +637,7 @@ private[client] object NewHostConnectionPool {
private val safeCallback = getAsyncCallback[() => Unit](f => f())
private def safely[T, U](f: T => Unit): T => Unit = t =>
safeCallback.invoke(() => f(t))
- private def safeRunnable(body: => Unit): Runnable =
- new Runnable {
- def run(): Unit = safeCallback.invoke(() => body)
- }
+ private def safeRunnable(body: => Unit): Runnable = () =>
safeCallback.invoke(() => body)
private def createNewTimeoutId(): Long = {
lastTimeoutId += 1
lastTimeoutId
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/impl/engine/server/HttpServerBluePrint.scala
b/http-core/src/main/scala/org/apache/pekko/http/impl/engine/server/HttpServerBluePrint.scala
index 8faa8d3c1..b29c0eb5f 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/impl/engine/server/HttpServerBluePrint.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/impl/engine/server/HttpServerBluePrint.scala
@@ -401,7 +401,7 @@ private[http] object HttpServerBluePrint {
}
}
private def schedule(delay: FiniteDuration, handler: HttpRequest =>
HttpResponse): Cancellable =
- materializer.scheduleOnce(delay, new Runnable { def run() =
trigger.invoke((self, handler(request))) })
+ materializer.scheduleOnce(delay, () => trigger.invoke((self,
handler(request))))
import pekko.http.impl.util.JavaMapping.Implicits._
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/impl/util/StreamUtils.scala
b/http-core/src/main/scala/org/apache/pekko/http/impl/util/StreamUtils.scala
index 0613a0a9b..85479451c 100644
--- a/http-core/src/main/scala/org/apache/pekko/http/impl/util/StreamUtils.scala
+++ b/http-core/src/main/scala/org/apache/pekko/http/impl/util/StreamUtils.scala
@@ -279,7 +279,7 @@ private[http] object StreamUtils {
* Schedule a block to be run once after the given duration in the context
of this graph stage.
*/
def scheduleOnce(delay: FiniteDuration)(block: => Unit): Cancellable =
- materializer.scheduleOnce(delay, new Runnable { def run() =
runInContext(block) })
+ materializer.scheduleOnce(delay, () => runInContext(block))
def runInContext(block: => Unit): Unit = getAsyncCallback[AnyRef](_ =>
block).invoke(null)
}
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/javadsl/settings/ClientConnectionSettings.scala
b/http-core/src/main/scala/org/apache/pekko/http/javadsl/settings/ClientConnectionSettings.scala
index 7a7a0157d..fcb567be8 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/javadsl/settings/ClientConnectionSettings.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/javadsl/settings/ClientConnectionSettings.scala
@@ -65,9 +65,7 @@ abstract class ClientConnectionSettings private[pekko] () {
self: ClientConnecti
final def getStreamCancellationDelay: JDuration =
streamCancellationDelay.toJava
final def getRequestHeaderSizeHint: Int = requestHeaderSizeHint
final def getWebsocketSettings: WebSocketSettings = websocketSettings
- final def getWebsocketRandomFactory: Supplier[Random] = new Supplier[Random]
{
- override def get(): Random = websocketRandomFactory()
- }
+ final def getWebsocketRandomFactory: Supplier[Random] = () =>
websocketRandomFactory()
final def getLocalAddress: Optional[InetSocketAddress] = localAddress.toJava
/** The underlying transport used to connect to hosts. By default
[[ClientTransport.TCP]] is used. */
@@ -106,9 +104,7 @@ abstract class ClientConnectionSettings private[pekko] () {
self: ClientConnecti
def withLogUnencryptedNetworkBytes(newValue: Optional[Int]):
ClientConnectionSettings =
self.copy(logUnencryptedNetworkBytes = newValue.toScala)
def withWebsocketRandomFactory(newValue:
java.util.function.Supplier[Random]): ClientConnectionSettings =
- self.copy(websocketSettings =
websocketSettings.withRandomFactoryFactory(new Supplier[Random] {
- override def get(): Random = newValue.get()
- }))
+ self.copy(websocketSettings =
websocketSettings.withRandomFactoryFactory(() => newValue.get()))
def withWebsocketSettings(newValue: WebSocketSettings):
ClientConnectionSettings =
self.copy(websocketSettings = newValue.asScala)
def withSocketOptions(newValue: java.lang.Iterable[SocketOption]):
ClientConnectionSettings =
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ClientConnectionSettings.scala
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ClientConnectionSettings.scala
index 6eaed86ee..69c99aa3b 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ClientConnectionSettings.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ClientConnectionSettings.scala
@@ -68,9 +68,7 @@ abstract class ClientConnectionSettings private[pekko] ()
def withWebsocketSettings(newValue: WebSocketSettings):
ClientConnectionSettings =
self.copy(websocketSettings = newValue)
def withWebsocketRandomFactory(newValue: () => Random):
ClientConnectionSettings =
- withWebsocketSettings(self.websocketSettings.withRandomFactoryFactory(new
Supplier[Random] {
- override def get(): Random = newValue()
- }))
+ withWebsocketSettings(self.websocketSettings.withRandomFactoryFactory(()
=> newValue()))
def withUserAgentHeader(newValue: Option[`User-Agent`]):
ClientConnectionSettings =
self.copy(userAgentHeader = newValue)
def withLogUnencryptedNetworkBytes(newValue: Option[Int]):
ClientConnectionSettings =
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ParserSettings.scala
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ParserSettings.scala
index 5f89fa48d..2c0d455e1 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ParserSettings.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/ParserSettings.scala
@@ -88,17 +88,13 @@ abstract class ParserSettings private[pekko] () extends
pekko.http.javadsl.setti
override def getIllegalResponseHeaderValueProcessingMode =
this.illegalResponseHeaderValueProcessingMode
override def getConflictingContentTypeHeaderProcessingMode =
this.conflictingContentTypeHeaderProcessingMode
- override def getCustomMethods = new Function[String,
Optional[pekko.http.javadsl.model.HttpMethod]] {
- override def apply(t: String) = (self.customMethods(t):
Option[pekko.http.javadsl.model.HttpMethod]).toJava
- }
- override def getCustomStatusCodes = new Function[Int,
Optional[pekko.http.javadsl.model.StatusCode]] {
- override def apply(t: Int) = (self.customStatusCodes(t):
Option[pekko.http.javadsl.model.StatusCode]).toJava
- }
+ override def getCustomMethods =
+ (t: String) => (self.customMethods(t):
Option[pekko.http.javadsl.model.HttpMethod]).toJava
+ override def getCustomStatusCodes =
+ (t: Int) => (self.customStatusCodes(t):
Option[pekko.http.javadsl.model.StatusCode]).toJava
override def getCustomMediaTypes =
- new pekko.japi.function.Function2[String, String,
Optional[pekko.http.javadsl.model.MediaType]] {
- override def apply(mainType: String, subType: String):
Optional[model.MediaType] =
- (self.customMediaTypes(mainType, subType):
Option[pekko.http.javadsl.model.MediaType]).toJava
- }
+ (mainType: String, subType: String) =>
+ (self.customMediaTypes(mainType, subType):
Option[pekko.http.javadsl.model.MediaType]).toJava
def getModeledHeaderParsing: Boolean = this.modeledHeaderParsing
// override for more specific return type
diff --git
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/WebSocketSettings.scala
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/WebSocketSettings.scala
index e39571051..b97e25812 100644
---
a/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/WebSocketSettings.scala
+++
b/http-core/src/main/scala/org/apache/pekko/http/scaladsl/settings/WebSocketSettings.scala
@@ -25,9 +25,7 @@ import scala.concurrent.duration._
@DoNotInherit
abstract class WebSocketSettings extends
pekko.http.javadsl.settings.WebSocketSettings { self: WebSocketSettingsImpl =>
def randomFactory: () => Random
- override final val getRandomFactory: Supplier[Random] = new Supplier[Random]
{
- override def get(): Random = self.randomFactory()
- }
+ override final val getRandomFactory: Supplier[Random] = () =>
self.randomFactory()
override def periodicKeepAliveMode: String
override def periodicKeepAliveMaxIdle: Duration
@@ -37,9 +35,7 @@ abstract class WebSocketSettings extends
pekko.http.javadsl.settings.WebSocketSe
* so keep in mind to keep it relatively small, in order not to make the
frames too bloated.
*/
def periodicKeepAliveData: () => ByteString
- final def getPeriodicKeepAliveData: Supplier[ByteString] = new
Supplier[ByteString] {
- override def get(): ByteString = self.periodicKeepAliveData()
- }
+ final def getPeriodicKeepAliveData: Supplier[ByteString] = () =>
self.periodicKeepAliveData()
override def withRandomFactoryFactory(newValue: Supplier[Random]):
WebSocketSettings =
copy(randomFactory = () => newValue.get())
diff --git
a/http-core/src/test/scala/org/apache/pekko/http/javadsl/HttpExtensionApiSpec.scala
b/http-core/src/test/scala/org/apache/pekko/http/javadsl/HttpExtensionApiSpec.scala
index 2ad88f6ee..fd22cc684 100644
---
a/http-core/src/test/scala/org/apache/pekko/http/javadsl/HttpExtensionApiSpec.scala
+++
b/http-core/src/test/scala/org/apache/pekko/http/javadsl/HttpExtensionApiSpec.scala
@@ -53,16 +53,10 @@ class HttpExtensionApiSpec extends
PekkoSpecWithMaterializer(
val successResponse = HttpResponse.create().withStatus(200)
- val httpSuccessFunction = new Function[HttpRequest, HttpResponse] {
- @throws(classOf[Exception])
- override def apply(param: HttpRequest): HttpResponse = successResponse
- }
+ val httpSuccessFunction: Function[HttpRequest, HttpResponse] = (_:
HttpRequest) => successResponse
- val asyncHttpSuccessFunction = new Function[HttpRequest,
CompletionStage[HttpResponse]] {
- @throws(classOf[Exception])
- override def apply(param: HttpRequest): CompletionStage[HttpResponse] =
- CompletableFuture.completedFuture(successResponse)
- }
+ val asyncHttpSuccessFunction: Function[HttpRequest,
CompletionStage[HttpResponse]] =
+ (_: HttpRequest) => CompletableFuture.completedFuture(successResponse)
"The Java HTTP extension" should {
diff --git a/http-core/src/test/scala/org/apache/pekko/testkit/Coroner.scala
b/http-core/src/test/scala/org/apache/pekko/testkit/Coroner.scala
index 9d0229364..55313244d 100644
--- a/http-core/src/test/scala/org/apache/pekko/testkit/Coroner.scala
+++ b/http-core/src/test/scala/org/apache/pekko/testkit/Coroner.scala
@@ -124,7 +124,7 @@ object Coroner {
watchedHandle.finished()
}
}
- new Thread(new Runnable { def run = triggerReportIfOverdue(duration) },
"Coroner").start()
+ new Thread(() => triggerReportIfOverdue(duration), "Coroner").start()
watchedHandle.waitForStart()
watchedHandle
}
diff --git
a/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/RouteJavaScalaDslConversionSpec.scala
b/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/RouteJavaScalaDslConversionSpec.scala
index ebf8fdf5e..c4ece8782 100644
---
a/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/RouteJavaScalaDslConversionSpec.scala
+++
b/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/RouteJavaScalaDslConversionSpec.scala
@@ -29,9 +29,7 @@ class RouteJavaScalaDslConversionSpec extends AnyWordSpec {
import org.apache.pekko
val javaRoute =
- pekko.http.javadsl.server.Directives.get(new
Supplier[pekko.http.javadsl.server.Route] {
- override def get(): Route =
pekko.http.javadsl.server.Directives.complete("ok")
- })
+ pekko.http.javadsl.server.Directives.get(() =>
pekko.http.javadsl.server.Directives.complete("ok"))
// Remember that Route in Scala is just a type alias:
// type Route = RequestContext => Future[RouteResult]
diff --git
a/http/src/main/scala/org/apache/pekko/http/javadsl/common/PartialApplication.scala
b/http/src/main/scala/org/apache/pekko/http/javadsl/common/PartialApplication.scala
index 8084b309a..abc7bcc8d 100644
---
a/http/src/main/scala/org/apache/pekko/http/javadsl/common/PartialApplication.scala
+++
b/http/src/main/scala/org/apache/pekko/http/javadsl/common/PartialApplication.scala
@@ -39,10 +39,6 @@ object PartialApplication {
* @return the function partially applied
*/
@ApiMayChange
- def bindParameter[A, B, R](f: BiFunction[A, B, R], a: A): Function[B, R] = {
- new Function[B, R] {
- override def apply(b: B): R = f.apply(a, b)
- }
- }
+ def bindParameter[A, B, R](f: BiFunction[A, B, R], a: A): Function[B, R] =
(b: B) => f.apply(a, b)
}
diff --git
a/http/src/main/scala/org/apache/pekko/http/javadsl/server/Directives.scala
b/http/src/main/scala/org/apache/pekko/http/javadsl/server/Directives.scala
index b587a1dfc..a047b484d 100644
--- a/http/src/main/scala/org/apache/pekko/http/javadsl/server/Directives.scala
+++ b/http/src/main/scala/org/apache/pekko/http/javadsl/server/Directives.scala
@@ -82,10 +82,7 @@ object Directives extends AllDirectives {
@ApiMayChange
def allOf(first: Function[Supplier[Route], Route], second:
Function[Supplier[Route], Route], inner: Supplier[Route])
: Route = {
- first.apply(new Supplier[Route] {
- override def get(): Route =
- second.apply(inner)
- })
+ first.apply(() => second.apply(inner))
}
/**
@@ -102,13 +99,7 @@ object Directives extends AllDirectives {
@ApiMayChange
def allOf[A, B](first: Function[Function[A, Route], Route], second:
Function[Function[B, Route], Route],
inner: BiFunction[A, B, Route]): Route = {
- first.apply(new Function[A, Route] {
- override def apply(a: A): Route =
- second.apply(new Function[B, Route] {
- override def apply(b: B): Route =
- inner.apply(a, b)
- })
- })
+ first.apply((a: A) => second.apply((b: B) => inner.apply(a, b)))
}
/**
@@ -124,12 +115,6 @@ object Directives extends AllDirectives {
@ApiMayChange
def allOf[A](first: Function[Supplier[Route], Route], second:
Function[Function[A, Route], Route],
inner: Function[A, Route]): Route = {
- first.apply(new Supplier[Route] {
- override def get(): Route =
- second.apply(new Function[A, Route] {
- override def apply(a: A): Route =
- inner.apply(a)
- })
- })
+ first.apply(() => second.apply((a: A) => inner.apply(a)))
}
}
diff --git
a/http/src/main/scala/org/apache/pekko/http/scaladsl/server/Rejection.scala
b/http/src/main/scala/org/apache/pekko/http/scaladsl/server/Rejection.scala
index ea19c4c9c..dbde2f99a 100644
--- a/http/src/main/scala/org/apache/pekko/http/scaladsl/server/Rejection.scala
+++ b/http/src/main/scala/org/apache/pekko/http/scaladsl/server/Rejection.scala
@@ -310,15 +310,13 @@ final case class ValidationRejection(message: String,
cause: Option[Throwable] =
*/
final case class TransformationRejection(transform: immutable.Seq[Rejection]
=> immutable.Seq[Rejection])
extends jserver.TransformationRejection with Rejection {
- override def getTransform = new Function[Iterable[jserver.Rejection],
Iterable[jserver.Rejection]] {
- override def apply(t: Iterable[jserver.Rejection]):
Iterable[jserver.Rejection] = {
- // explicit collects assignment is because of unidoc failing compilation
on .asScala and .asJava here
- val transformed: Seq[jserver.Rejection] =
- transform(Util.convertIterable[jserver.Rejection,
jserver.Rejection](t).collect { case r: Rejection =>
- r
- }).collect { case j: jserver.Rejection => j }
- transformed.asJava // TODO "asJavaDeep" and optimise?
- }
+ override def getTransform = (t: Iterable[jserver.Rejection]) => {
+ // explicit collects assignment is because of unidoc failing compilation
on .asScala and .asJava here
+ val transformed: Seq[jserver.Rejection] =
+ transform(Util.convertIterable[jserver.Rejection,
jserver.Rejection](t).collect { case r: Rejection =>
+ r
+ }).collect { case j: jserver.Rejection => j }
+ transformed.asJava // TODO "asJavaDeep" and optimise?
}
}
diff --git
a/http2-tests/src/test/scala/org/apache/pekko/http/impl/engine/http2/Http2FrameHpackSupport.scala
b/http2-tests/src/test/scala/org/apache/pekko/http/impl/engine/http2/Http2FrameHpackSupport.scala
index 8549de343..48ebe3d32 100644
---
a/http2-tests/src/test/scala/org/apache/pekko/http/impl/engine/http2/Http2FrameHpackSupport.scala
+++
b/http2-tests/src/test/scala/org/apache/pekko/http/impl/engine/http2/Http2FrameHpackSupport.scala
@@ -60,11 +60,9 @@ trait Http2FrameHpackSupport extends
Http2FrameProbeDelegator with Http2FrameSen
def decodeHeaders(bytes: ByteString): Seq[(String, String)] = {
val hs = new VectorBuilder[(String, String)]()
decoder.decode(bytes.compact.asInputStream,
- new HeaderListener {
- def addHeader(name: String, value: String, parsedValue: AnyRef,
sensitive: Boolean): AnyRef = {
- hs += name -> value
- parsedValue
- }
+ (name: String, value: String, parsedValue: AnyRef, _: Boolean) => {
+ hs += name -> value
+ parsedValue
})
hs.result()
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]