From 9b174a31a6ddbbb1da3f899c2d3ea23c3973e793 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Thu, 18 Nov 2021 14:44:43 +0100 Subject: [PATCH] scala3: remove runtime trait ordering check (#30904) --- .github/workflows/scala3-build.yml | 2 +- .../scala-2/akka/persistence/TraitOrder.scala | 24 +++++++++++++++++++ .../scala-3/akka/persistence/TraitOrder.scala | 19 +++++++++++++++ .../scala/akka/persistence/Eventsourced.scala | 8 +------ .../TimerPersistentActorSpec.scala | 8 ++++--- 5 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 akka-persistence/src/main/scala-2/akka/persistence/TraitOrder.scala create mode 100644 akka-persistence/src/main/scala-3/akka/persistence/TraitOrder.scala diff --git a/.github/workflows/scala3-build.yml b/.github/workflows/scala3-build.yml index fdc59ebf8c..059c5ba40d 100644 --- a/.github/workflows/scala3-build.yml +++ b/.github/workflows/scala3-build.yml @@ -21,7 +21,7 @@ jobs: - akka-testkit/test akka-actor-tests/test - akka-actor-testkit-typed/test akka-actor-typed-tests/test - akka-bench-jmh/test - - akka-cluster/test akka-cluster-tools/test akka-cluster-typed/test akka-distributed-data/test akka-cluster-metrics/test akka-cluster-sharding/Test/compile akka-cluster-sharding-typed/test + - akka-cluster/test akka-cluster-tools/test akka-cluster-typed/test akka-distributed-data/test akka-cluster-metrics/test akka-cluster-sharding/test akka-cluster-sharding-typed/test - akka-discovery/test akka-coordination/test - akka-persistence/test akka-persistence-shared/test akka-persistence-query/test akka-persistence-typed/test akka-persistence-testkit/test - akka-pki/test akka-slf4j/test diff --git a/akka-persistence/src/main/scala-2/akka/persistence/TraitOrder.scala b/akka-persistence/src/main/scala-2/akka/persistence/TraitOrder.scala new file mode 100644 index 0000000000..8fefd5269b --- /dev/null +++ b/akka-persistence/src/main/scala-2/akka/persistence/TraitOrder.scala @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 Lightbend Inc. + */ + +package akka.persistence + +import akka.annotation.InternalApi + +/** + * INTERNAL API + */ +@InternalApi +private[persistence] object TraitOrder { + val canBeChecked = true + + def checkBefore(clazz: Class[_], one: Class[_], other: Class[_]): Unit = { + val interfaces = clazz.getInterfaces + val i = interfaces.indexOf(other) + val j = interfaces.indexOf(one) + if (i != -1 && j != -1 && i < j) + throw new IllegalStateException( + s"For ${clazz.getName}, use ${one.getName} with ${other.getName}, instead of ${other.getName} with ${one.getName}") + } +} diff --git a/akka-persistence/src/main/scala-3/akka/persistence/TraitOrder.scala b/akka-persistence/src/main/scala-3/akka/persistence/TraitOrder.scala new file mode 100644 index 0000000000..e97f576fbe --- /dev/null +++ b/akka-persistence/src/main/scala-3/akka/persistence/TraitOrder.scala @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2021 Lightbend Inc. + */ + +package akka.persistence + +import akka.annotation.InternalApi + +/** + * INTERNAL API + */ +@InternalApi +private[persistence] object TraitOrder { + val canBeChecked = false + + // No-op on Scala 3 + def checkBefore(clazz: Class[_], one: Class[_], other: Class[_]): Unit = + () +} \ No newline at end of file diff --git a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala index 632d49c834..99cacbccf2 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala @@ -58,13 +58,7 @@ private[persistence] trait Eventsourced import JournalProtocol._ import SnapshotProtocol.{ LoadSnapshotFailed, LoadSnapshotResult } - { - val interfaces = getClass.getInterfaces - val i = interfaces.indexOf(classOf[PersistentActor]) - val j = interfaces.indexOf(classOf[akka.actor.Timers]) - if (i != -1 && j != -1 && i < j) - throw new IllegalStateException("use Timers with PersistentActor, instead of PersistentActor with Timers") - } + TraitOrder.checkBefore(getClass, classOf[akka.actor.Timers], classOf[PersistentActor]) private val extension = Persistence(context.system) diff --git a/akka-persistence/src/test/scala/akka/persistence/TimerPersistentActorSpec.scala b/akka-persistence/src/test/scala/akka/persistence/TimerPersistentActorSpec.scala index 675c753d0a..17d0a800bb 100644 --- a/akka-persistence/src/test/scala/akka/persistence/TimerPersistentActorSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/TimerPersistentActorSpec.scala @@ -101,9 +101,11 @@ class TimerPersistentActorSpec extends PersistenceSpec(ConfigFactory.parseString } "reject wrong order of traits, PersistentActor with Timer" in { - val pa = system.actorOf(Props[WrongOrder]()) - watch(pa) - expectTerminated(pa) + if (TraitOrder.canBeChecked) { + val pa = system.actorOf(Props[WrongOrder]()) + watch(pa) + expectTerminated(pa) + } } "handle AutoReceivedMessage's automatically" in {