Open
Description
Compiler version
Minimized code
class Bar(val self: Short) extends AnyVal:
override def equals(that: Any): Boolean = ???
override def hashCode: Int = ???
Output
[[syntax trees at end of genBCode]] // playground.scala
package <empty> {
@SourceFile("playground.scala") final class Bar extends Object {
def <init>(self: Short): Unit =
{
this.self = self
super()
()
}
private val self: Short
def self(): Short = this.self
override def equals(that: Object): Boolean =
Bar.equals$extension(this.self(), that)
override def hashCode(): Int = Bar.hashCode$extension(this.self())
}
@SourceFile("playground.scala") final module class Bar extends Object {
def <init>(): Unit =
{
super()
()
}
private def writeReplace(): Object =
new scala.runtime.ModuleSerializationProxy(classOf[Bar])
final def equals$extension($this: Short, that: Object): Boolean = ???()
final def hashCode$extension($this: Short): Int = ???()
}
final lazy module val Bar: Bar = new Bar()
}
Compiles.
Expectation
Dotty should prohibit overriding equals
and hashCode
per the Value Classes's specification; SIP-15:
A value class
C
must satisfy the following criteria:
...
5.C
may not define concrete equals or hashCode methods
...