From bb4bab8b70774f7f7deb4ad8bb206a66a8ad772b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=99=8E=E9=B8=A3?= Date: Sun, 14 Jun 2026 19:53:04 +0800 Subject: [PATCH] chore: Rewrite to scala3 syntax Motivation: Let Scala 3 Community build compile pekko-grpc. Modification: Update .scalafmt.conf dialect to scala213source3 and enable scala3 syntax rewrite rules, then reformat all sources. Result: Wildcard types use ? syntax (e.g. Class[?] instead of Class[_]). Tests: Not run - formatting only References: Refs apache/pekko#3048 --- .scalafmt.conf | 12 +++++++++++- .../apache/pekko/grpc/interop/GrpcInteropTests.scala | 2 +- .../grpc/interop/PekkoGrpcScalaClientTester.scala | 4 ++-- .../pekko/grpc/scaladsl/GrpcMarshallingSpec.scala | 2 +- .../myapp/typedhelloworld/GreeterServiceImpl.scala | 2 +- project/ReflectiveCodeGen.scala | 2 +- project/SbtMavenPlugin.scala | 2 +- project/VersionGenerator.scala | 2 +- .../pekko/grpc/internal/GrpcProtocolNative.scala | 2 +- .../pekko/grpc/internal/GrpcResponseHelpers.scala | 2 +- .../apache/pekko/grpc/javadsl/GrpcMarshalling.scala | 4 ++-- .../scala/org/apache/pekko/grpc/scaladsl/Grpc.scala | 2 +- .../pekko/grpc/internal/ChannelUtilsSpec.scala | 4 ++-- .../grpc/internal/PekkoHttpClientUtilsSpec.scala | 2 +- .../apache/pekko/grpc/PekkoGrpcClientTester.scala | 4 ++-- .../project/ProtocGoPlugin.scala | 2 +- 16 files changed, 30 insertions(+), 20 deletions(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 3dd257139..0be473319 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,5 +1,5 @@ version = 3.11.1 -runner.dialect = scala213 +runner.dialect = scala213source3 project.git = true style = defaultWithAlign docstrings.style = Asterisk @@ -80,3 +80,13 @@ fileOverride = { runner.dialect = scala3 } } + +rewrite.scala3.convertToNewSyntax = true +runner { + dialectOverride { + allowSignificantIndentation = false + allowAsForImportRename = false + allowStarWildcardImport = false + allowPostfixStarVarargSplices = false + } +} diff --git a/interop-tests/src/main/scala/org/apache/pekko/grpc/interop/GrpcInteropTests.scala b/interop-tests/src/main/scala/org/apache/pekko/grpc/interop/GrpcInteropTests.scala index db9e94064..45764504e 100644 --- a/interop-tests/src/main/scala/org/apache/pekko/grpc/interop/GrpcInteropTests.scala +++ b/interop-tests/src/main/scala/org/apache/pekko/grpc/interop/GrpcInteropTests.scala @@ -123,7 +123,7 @@ trait GrpcServerProvider { def label: String def pendingCases: Set[String] - def server: GrpcServer[_] + def server: GrpcServer[?] } trait GrpcClientProvider { diff --git a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/PekkoGrpcScalaClientTester.scala b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/PekkoGrpcScalaClientTester.scala index 15ac6e320..cf30d81b2 100644 --- a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/PekkoGrpcScalaClientTester.scala +++ b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/PekkoGrpcScalaClientTester.scala @@ -276,13 +276,13 @@ class PekkoGrpcScalaClientTester(val settings: Settings, backend: String, testWi def timeoutOnSleepingServer(): Unit = throw new RuntimeException("Not implemented!timeoutOnSleepingServer") with NoStackTrace - def assertFailure(failure: Future[_], expectedStatus: Status): Unit = { + def assertFailure(failure: Future[?], expectedStatus: Status): Unit = { val throwable = Await.result(failure.failed, awaitTimeout) throwable shouldBe a[StatusRuntimeException] assertEquals(expectedStatus.getCode, throwable.asInstanceOf[StatusRuntimeException].getStatus.getCode) } - def assertFailure(failure: Future[_], expectedStatus: Status, expectedMessage: String): Unit = { + def assertFailure(failure: Future[?], expectedStatus: Status, expectedMessage: String): Unit = { val throwable = Await.result(failure.failed, awaitTimeout) throwable shouldBe a[StatusRuntimeException] val e = throwable.asInstanceOf[StatusRuntimeException] diff --git a/interop-tests/src/test/scala/org/apache/pekko/grpc/scaladsl/GrpcMarshallingSpec.scala b/interop-tests/src/test/scala/org/apache/pekko/grpc/scaladsl/GrpcMarshallingSpec.scala index b73581c48..afaa2a6a9 100644 --- a/interop-tests/src/test/scala/org/apache/pekko/grpc/scaladsl/GrpcMarshallingSpec.scala +++ b/interop-tests/src/test/scala/org/apache/pekko/grpc/scaladsl/GrpcMarshallingSpec.scala @@ -109,7 +109,7 @@ class GrpcMarshallingSpec extends AnyWordSpec with Matchers { assertFailure(GrpcMarshalling.unmarshal(request), Status.Code.INTERNAL, "encoding") } - def assertFailure(failure: Future[_], expectedStatusCode: Status.Code, expectedMessageFragment: String): Unit = { + def assertFailure(failure: Future[?], expectedStatusCode: Status.Code, expectedMessageFragment: String): Unit = { val e = Await.result(failure.failed, awaitTimeout).asInstanceOf[StatusException] e.getStatus.getCode should be(expectedStatusCode) e.getStatus.getDescription should include(expectedMessageFragment) diff --git a/plugin-tester-scala/src/main/scala/example/myapp/typedhelloworld/GreeterServiceImpl.scala b/plugin-tester-scala/src/main/scala/example/myapp/typedhelloworld/GreeterServiceImpl.scala index 09414459d..b090d6670 100644 --- a/plugin-tester-scala/src/main/scala/example/myapp/typedhelloworld/GreeterServiceImpl.scala +++ b/plugin-tester-scala/src/main/scala/example/myapp/typedhelloworld/GreeterServiceImpl.scala @@ -24,7 +24,7 @@ import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContext, Future } // #stateful-service -class GreeterServiceImpl(greeterActor: ActorRef[GreeterActor.GreetingCommand])(implicit system: ActorSystem[_]) +class GreeterServiceImpl(greeterActor: ActorRef[GreeterActor.GreetingCommand])(implicit system: ActorSystem[?]) extends GreeterService { def sayHello(in: HelloRequest): Future[HelloReply] = { diff --git a/project/ReflectiveCodeGen.scala b/project/ReflectiveCodeGen.scala index 674d12ca3..ed126bb03 100644 --- a/project/ReflectiveCodeGen.scala +++ b/project/ReflectiveCodeGen.scala @@ -33,7 +33,7 @@ object ReflectiveCodeGen extends AutoPlugin { // needed to be able to override the PB.generate task reliably override lazy val requires = ProtocPlugin - override lazy val projectSettings: Seq[Def.Setting[_]] = + override lazy val projectSettings: Seq[Def.Setting[?]] = inConfig(Compile)( Seq( PB.protocOptions := protocOptions.value, diff --git a/project/SbtMavenPlugin.scala b/project/SbtMavenPlugin.scala index 4587c92cd..eb4590349 100644 --- a/project/SbtMavenPlugin.scala +++ b/project/SbtMavenPlugin.scala @@ -32,7 +32,7 @@ object SbtMavenPlugin extends AutoPlugin { import autoImport._ - override lazy val projectSettings: Seq[Setting[_]] = inConfig(Compile)(unscopedSettings) + override lazy val projectSettings: Seq[Setting[?]] = inConfig(Compile)(unscopedSettings) lazy val unscopedSettings = Seq( diff --git a/project/VersionGenerator.scala b/project/VersionGenerator.scala index e29be74d5..42dfca497 100644 --- a/project/VersionGenerator.scala +++ b/project/VersionGenerator.scala @@ -17,7 +17,7 @@ import sbt._ */ object VersionGenerator { - lazy val settings: Seq[Setting[_]] = inConfig(Compile)( + lazy val settings: Seq[Setting[?]] = inConfig(Compile)( Seq( resourceGenerators += generateVersion(resourceManaged, _ / "pekko-grpc-version.conf", """|pekko.grpc.version = "%s" diff --git a/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcProtocolNative.scala b/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcProtocolNative.scala index b5c34865e..c7f13ff7f 100644 --- a/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcProtocolNative.scala +++ b/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcProtocolNative.scala @@ -63,7 +63,7 @@ object GrpcProtocolNative extends AbstractGrpcProtocol("grpc") { headers = headers, entity = HttpEntity(contentType, encodeDataToFrameBytes(codec, data)), protocol = HttpProtocols.`HTTP/1.1`, - attributes = Map.empty[AttributeKey[_], Any].updated(AttributeKeys.trailer, trailer)) + attributes = Map.empty[AttributeKey[?], Any].updated(AttributeKeys.trailer, trailer)) private def encodeDataToFrameBytes(codec: Codec, data: ByteString): ByteString = AbstractGrpcProtocol.encodeFrameData(codec.compress(data), codec.isCompressed, isTrailer = false) diff --git a/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcResponseHelpers.scala b/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcResponseHelpers.scala index f3440aa23..3e285b73b 100644 --- a/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcResponseHelpers.scala +++ b/runtime/src/main/scala/org/apache/pekko/grpc/internal/GrpcResponseHelpers.scala @@ -50,7 +50,7 @@ object GrpcResponseHelpers { private val TrailerOk = GrpcEntityHelpers.trailer(Status.OK) private val TrailerOkAttribute = Trailer(TrailerOk.trailers) private val TrailerOkAttributes = - Map.empty[AttributeKey[_], Any].updated(AttributeKeys.trailer, TrailerOkAttribute) + Map.empty[AttributeKey[?], Any].updated(AttributeKeys.trailer, TrailerOkAttribute) private val IdentityResponseHeaders: immutable.Seq[HttpHeader] = headers.`Message-Encoding`(Identity.name) :: Nil diff --git a/runtime/src/main/scala/org/apache/pekko/grpc/javadsl/GrpcMarshalling.scala b/runtime/src/main/scala/org/apache/pekko/grpc/javadsl/GrpcMarshalling.scala index b4317eee9..18c496371 100644 --- a/runtime/src/main/scala/org/apache/pekko/grpc/javadsl/GrpcMarshalling.scala +++ b/runtime/src/main/scala/org/apache/pekko/grpc/javadsl/GrpcMarshalling.scala @@ -114,7 +114,7 @@ object GrpcMarshalling { eHandler: JFunction[ActorSystem, JFunction[Throwable, Trailers]]): CompletionStage[HttpResponse] = try { response match { - case future: CompletableFuture[_] if future.isDone => + case future: CompletableFuture[?] if future.isDone => try completedResponse(marshal(completedValue[Out](future), m, writer, system, eHandler)) catch { case NonFatal(error) => handleUnaryFailure(error, writer, system, eHandler) @@ -157,6 +157,6 @@ object GrpcMarshalling { case NonFatal(error) => failure(error) } - private def completedValue[T](future: CompletableFuture[_]): T = + private def completedValue[T](future: CompletableFuture[?]): T = future.asInstanceOf[CompletableFuture[T]].getNow(null.asInstanceOf[T]) } diff --git a/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/Grpc.scala b/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/Grpc.scala index 0e091de57..63bf2a7c2 100644 --- a/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/Grpc.scala +++ b/runtime/src/main/scala/org/apache/pekko/grpc/scaladsl/Grpc.scala @@ -63,5 +63,5 @@ private[grpc] final class GrpcImpl(system: ExtendedActorSystem) extends Extensio private[grpc] object Grpc extends ExtensionId[GrpcImpl] with ExtensionIdProvider { override def createExtension(system: ExtendedActorSystem): GrpcImpl = new GrpcImpl(system) - override def lookup: ExtensionId[_ <: Extension] = Grpc + override def lookup: ExtensionId[? <: Extension] = Grpc } diff --git a/runtime/src/test/scala/org/apache/pekko/grpc/internal/ChannelUtilsSpec.scala b/runtime/src/test/scala/org/apache/pekko/grpc/internal/ChannelUtilsSpec.scala index 83a581956..fd6b2cf41 100644 --- a/runtime/src/test/scala/org/apache/pekko/grpc/internal/ChannelUtilsSpec.scala +++ b/runtime/src/test/scala/org/apache/pekko/grpc/internal/ChannelUtilsSpec.scala @@ -89,7 +89,7 @@ class ChannelUtilsSpec extends AnyWordSpec with Matchers with ScalaFutures { // CONNECTING => FAILURE fakeChannel.runCallBack() promiseReady.isCompleted shouldEqual true - promiseReady.future.value.get shouldBe a[Failure[_]] + promiseReady.future.value.get shouldBe a[Failure[?]] promiseReady.future.failed.value.get.get.getMessage should startWith("Unable to establish connection") } @@ -140,7 +140,7 @@ class ChannelUtilsSpec extends AnyWordSpec with Matchers with ScalaFutures { promiseReady.isCompleted shouldEqual true promiseDone.isCompleted shouldEqual true - promiseDone.future.value.get shouldBe a[Failure[_]] + promiseDone.future.value.get shouldBe a[Failure[?]] promiseDone.future.failed.value.get.get.getMessage should startWith("Unable to establish connection") } diff --git a/runtime/src/test/scala/org/apache/pekko/grpc/internal/PekkoHttpClientUtilsSpec.scala b/runtime/src/test/scala/org/apache/pekko/grpc/internal/PekkoHttpClientUtilsSpec.scala index e74a9c07c..b67a59eda 100644 --- a/runtime/src/test/scala/org/apache/pekko/grpc/internal/PekkoHttpClientUtilsSpec.scala +++ b/runtime/src/test/scala/org/apache/pekko/grpc/internal/PekkoHttpClientUtilsSpec.scala @@ -72,7 +72,7 @@ class PekkoHttpClientUtilsSpec extends TestKit(ActorSystem()) with AnyWordSpecLi new HttpResponse( OK, responseHeaders, - Map.empty[AttributeKey[_], Any].updated(AttributeKeys.trailer, responseTrailers), + Map.empty[AttributeKey[?], Any].updated(AttributeKeys.trailer, responseTrailers), Strict(GrpcProtocolNative.contentType, ByteString.empty), HttpProtocols.`HTTP/1.1`)) val source = PekkoHttpClientUtils.responseToSource(response, null) diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/00-interop/src/test/scala/org/apache/pekko/grpc/PekkoGrpcClientTester.scala b/sbt-plugin/src/sbt-test/gen-scala-server/00-interop/src/test/scala/org/apache/pekko/grpc/PekkoGrpcClientTester.scala index 1d11cbb8d..5f459e6c4 100644 --- a/sbt-plugin/src/sbt-test/gen-scala-server/00-interop/src/test/scala/org/apache/pekko/grpc/PekkoGrpcClientTester.scala +++ b/sbt-plugin/src/sbt-test/gen-scala-server/00-interop/src/test/scala/org/apache/pekko/grpc/PekkoGrpcClientTester.scala @@ -313,12 +313,12 @@ class PekkoGrpcClientTester(val settings: Settings)(implicit system: ActorSystem throw new RuntimeException("Not implemented!timeoutOnSleepingServer") with NoStackTrace } - def assertFailure(failure: Future[_], expectedStatus: Status): Unit = { + def assertFailure(failure: Future[?], expectedStatus: Status): Unit = { val e = Await.result(failure.failed, awaitTimeout).asInstanceOf[StatusRuntimeException] assertEquals(expectedStatus.getCode, e.getStatus.getCode) } - def assertFailure(failure: Future[_], expectedStatus: Status, expectedMessage: String): Unit = { + def assertFailure(failure: Future[?], expectedStatus: Status, expectedMessage: String): Unit = { val e = Await.result(failure.failed, awaitTimeout).asInstanceOf[StatusRuntimeException] assertEquals(expectedStatus.getCode, e.getStatus.getCode) assertEquals(expectedMessage, e.getStatus.getDescription) diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/06-compatibility-plugins/project/ProtocGoPlugin.scala b/sbt-plugin/src/sbt-test/gen-scala-server/06-compatibility-plugins/project/ProtocGoPlugin.scala index 0875b6f20..ef0ed0c7b 100644 --- a/sbt-plugin/src/sbt-test/gen-scala-server/06-compatibility-plugins/project/ProtocGoPlugin.scala +++ b/sbt-plugin/src/sbt-test/gen-scala-server/06-compatibility-plugins/project/ProtocGoPlugin.scala @@ -18,7 +18,7 @@ object ProtocGoPlugin extends AutoPlugin { override def requires: Plugins = ProtocPlugin - override def projectSettings: Seq[Def.Setting[_]] = + override def projectSettings: Seq[Def.Setting[?]] = Seq(Compile, Test).flatMap(inConfig(_)( Seq( PB.targets += PB.gens.go -> resourceManaged.value / "go")))