Skip to content

case class equals doesn't check canEqual #10527

Closed
@lrytz

Description

@lrytz
scala> case class C(x: Int)
// defined case class C

scala> class CC(x: Int) extends C(x) { override def canEqual(o: Any) = o.isInstanceOf[CC] }
// defined class CC

scala> C(1) == new CC(1)
val res0: Boolean = true

In Scala 2 the result is false.

The generated equals in Scala 3:

    override def equals(x$0: Any): Boolean =
      this.eq(x$0.$asInstanceOf$[Object]).||(
        x$0 match
          {
            case x$0 @ _:C @unchecked => this.x.==(x$0.x)
            case _ => false
          }
      )

while in Scala 2

    override <synthetic> def equals(x$1: Any): Boolean = C.this.eq(x$1.asInstanceOf[Object]).||(x$1 match {
  case (_: C) => true
  case _ => false
}.&&({
      <synthetic> val C$1: C = x$1.asInstanceOf[C];
      C.this.x.==(C$1.x).&&(C$1.canEqual(C.this))
    }))

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions