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 {