Skip to content

Commit b37b2e9

Browse files
committed
fix: keep Scala 3.8.4 cross builds clean
Motivation:\nPrepare the Pekko Scala 3.8.4 cross-build PRs for future Scala 3 LTS upgrades while preserving Scala 2.13.x and Scala 3.3.x compatibility. Modification:\nScope Scala 3.3-only compiler options correctly and adjust sources/build settings so Scala 3.8.4 compiles without errors or warnings. Result:\nThe project cross-builds cleanly across the intended Scala versions, with Scala 3.8.4 kept warning-free where validated locally.
1 parent 8cd24b2 commit b37b2e9

15 files changed

Lines changed: 54 additions & 22 deletions

File tree

actor-testkit-typed/src/test/scala/org/apache/pekko/actor/testkit/typed/scaladsl/BehaviorTestKitSpec.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ object BehaviorTestKitSpec {
128128
replyTo ! Done
129129
Behaviors.same
130130
case CreateMessageAdapter(messageClass, f, replyTo) =>
131-
val adaptor = context.messageAdapter(f)(ClassTag(messageClass))
131+
def createAdapter[U](messageClass: Class[U], f: U => Command): ActorRef[U] = {
132+
implicit val classTag: ClassTag[U] = ClassTag(messageClass)
133+
context.messageAdapter(f)
134+
}
135+
val adaptor = createAdapter(messageClass, f)
132136
replyTo.foreach(_ ! adaptor.unsafeUpcast)
133137
Behaviors.same
134138
case Log(what) =>

actor-tests/src/test/java/org/apache/pekko/actor/AbstractFSMActorTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.jupiter.api.Test;
2020
import org.junit.jupiter.api.extension.RegisterExtension;
2121

22+
@SuppressWarnings("unchecked")
2223
public class AbstractFSMActorTest {
2324

2425
// javac produces an `unchecked` warning about `akka$actor$FSM$$transitionEvent`

actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/Aggregator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.pekko.actor.typed.javadsl.Behaviors;
2727
import org.apache.pekko.actor.typed.javadsl.Receive;
2828

29+
@SuppressWarnings("unchecked")
2930
public class Aggregator<Reply, Aggregate> extends AbstractBehavior<Aggregator.Command> {
3031

3132
interface Command {}

actor-typed-tests/src/test/java/jdocs/org/apache/pekko/typed/TailChopping.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.pekko.actor.typed.javadsl.Receive;
2525
import org.apache.pekko.actor.typed.javadsl.TimerScheduler;
2626

27+
@SuppressWarnings("unchecked")
2728
public class TailChopping<Reply> extends AbstractBehavior<TailChopping.Command> {
2829

2930
interface Command {}

actor-typed-tests/src/test/scala/org/apache/pekko/actor/typed/ActorContextSpec.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,8 @@ abstract class ActorContextSpec extends ScalaTestWithActorTestKit with AnyWordSp
661661

662662
"not allow null messages" in {
663663
// Scala 3 doesn't generate an implicit `ClassTag[Null]` (https://github.com/lampepfl/dotty/issues/9586)
664-
val actor = spawn(decoration[Null](ClassTag.Null).apply(Behaviors.empty[Null]))
664+
implicit val classTag: ClassTag[Null] = ClassTag.Null
665+
val actor = spawn(decoration[Null].apply(Behaviors.empty[Null]))
665666
intercept[InvalidMessageException] {
666667
actor ! null
667668
}

actor-typed/src/main/scala/org/apache/pekko/actor/typed/javadsl/Behaviors.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,10 @@ object Behaviors {
234234
* @param monitor The messages will also be sent to this `ActorRef`
235235
* @param behavior The inner behavior that is decorated
236236
*/
237-
def monitor[T](interceptMessageClass: Class[T], monitor: ActorRef[T], behavior: Behavior[T]): Behavior[T] =
238-
scaladsl.Behaviors.monitor(monitor, behavior)(ClassTag(interceptMessageClass))
237+
def monitor[T](interceptMessageClass: Class[T], monitor: ActorRef[T], behavior: Behavior[T]): Behavior[T] = {
238+
implicit val classTag: ClassTag[T] = ClassTag(interceptMessageClass)
239+
scaladsl.Behaviors.monitor(monitor, behavior)
240+
}
239241

240242
/**
241243
* Behavior decorator that logs all messages to the [[pekko.actor.typed.Behavior]] using the provided
@@ -332,8 +334,10 @@ object Behaviors {
332334
def transformMessages[Outer, Inner](
333335
interceptMessageClass: Class[Outer],
334336
behavior: Behavior[Inner],
335-
selector: JFunction[PFBuilder[Outer, Inner], PFBuilder[Outer, Inner]]): Behavior[Outer] =
336-
BehaviorImpl.transformMessages(behavior, selector.apply(new PFBuilder).build())(ClassTag(interceptMessageClass))
337+
selector: JFunction[PFBuilder[Outer, Inner], PFBuilder[Outer, Inner]]): Behavior[Outer] = {
338+
implicit val classTag: ClassTag[Outer] = ClassTag(interceptMessageClass)
339+
BehaviorImpl.transformMessages(behavior, selector.apply(new PFBuilder).build())
340+
}
337341

338342
/**
339343
* Support for scheduled `self` messages in an actor.
@@ -413,7 +417,8 @@ object Behaviors {
413417
asScalaMap(mdcForMessage.apply(message))
414418
}
415419

416-
WithMdcBehaviorInterceptor[T](asScalaMap(staticMdc), mdcForMessageFun, behavior)(ClassTag(interceptMessageClass))
420+
implicit val classTag: ClassTag[T] = ClassTag(interceptMessageClass)
421+
WithMdcBehaviorInterceptor[T](asScalaMap(staticMdc), mdcForMessageFun, behavior)
417422
}
418423

419424
}

docs/src/test/java/jdocs/actor/ActorDocTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161

6262
// #import-terminated
6363

64+
@SuppressWarnings("unchecked")
6465
public class ActorDocTest extends AbstractJavaTest {
6566

6667
public static Config config =

docs/src/test/java/jdocs/persistence/LambdaPersistencePluginDocTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
// #plugin-imports
3636
import org.iq80.leveldb.util.FileUtils;
3737

38+
@SuppressWarnings({ "deprecation", "unchecked" })
3839
public class LambdaPersistencePluginDocTest {
3940

4041
static Object o1 =

persistence/src/test/java/org/apache/pekko/persistence/fsm/AbstractPersistentFSMTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.apache.pekko.actor.*;
2121

2222
@Deprecated
23+
@SuppressWarnings("unchecked")
2324
public class AbstractPersistentFSMTest {
2425
// tests have been removed because of flaky test failures, see PR
2526
// https://github.com/akka/akka/pull/31128

project/JdkOptions.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ object JdkOptions extends AutoPlugin {
3737

3838
def targetJdkScalacOptions(scalaVersion: String): Seq[String] =
3939
Seq("-release", JdkOptions.targetJavaVersion) ++ {
40-
if (scalaVersion.startsWith("3.")) Seq(s"-Xtarget:${targetJavaVersion}") else Seq.empty
40+
CrossVersion.partialVersion(scalaVersion) match {
41+
case Some((3, minor)) if minor < 8 => Seq(s"-Xtarget:${targetJavaVersion}")
42+
case _ => Seq.empty
43+
}
4144
}
4245

4346
val targetJdkJavacOptions = Seq("--release", targetJavaVersion)

0 commit comments

Comments
 (0)