Closed
Description
1st out of 2 regressions found when testing #15746 in Open Community Build.
Regression found in akka/akka sources
Compiler version
3.2.1-nightly
Minimized code
trait ReplicatedData
trait ActorRef[-T] {
def tell(msg: T): Unit = ???
}
// shared in both domains
abstract class Key[+T <: ReplicatedData]
// domain 1
object dd {
sealed abstract class GetResponse[A <: ReplicatedData] {
def key: Key[A]
}
case class GetSuccess[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
case class GetFailure[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
}
// domain 2
object JReplicator {
final case class Get[A <: ReplicatedData](
key: Key[A],
replyTo: ActorRef[GetResponse[A]]
)
sealed abstract class GetResponse[A <: ReplicatedData] {
def key: Key[A]
}
case class GetSuccess[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
case class GetFailure[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
}
val _ = null.asInstanceOf[Any] match {
case cmd: JReplicator.Get[d] =>
val reply =
util
.Try[dd.GetResponse[d]](???)
.map {
// Needs at least 2 cases to triger failure
case rsp: dd.GetSuccess[d] => JReplicator.GetSuccess(rsp.key)
case rsp: dd.GetResponse[d] => JReplicator.GetFailure(rsp.key)
}
// needs recover to trigger failure
.recover { case _ => new JReplicator.GetFailure(cmd.key) }
reply.foreach { cmd.replyTo tell _ } // error
}
Output
[error] ./test.scala:44:38:
[error] Found: JReplicator.GetResponse[?1.CAP]
[error] Required: JReplicator.GetResponse[d]
[error]
[error] where: ?1 is an unknown value of type scala.runtime.TypeBox[d, ReplicatedData]
[error] d is a type locally defined in package object test$package with bounds <: ReplicatedData
[error] reply.foreach { cmd.replyTo tell _ }
[error]
Expectation
Should compile