bug
bug copied to clipboard
Keyword `implicit` silently ignored when overriding Java method
Reproduction steps
Welcome to Scala 2.13.8 (OpenJDK 64-Bit Server VM, Java 17.0.2).
Type in expressions for evaluation. Or try :help.
scala> class C { implicit override def toString = "c"; def f = implicitly[String] }
^
error: could not find implicit value for parameter e: String
scala> trait T { def t: String = "t" }
trait T
scala> class C extends T { implicit override def t = "c"; def f = implicitly[String] }
class C
scala> class C extends Runnable { implicit override def run = println("c"); def f = implicitly[Unit] }
^
error: could not find implicit value for parameter e: Unit
Compare:
scala> class C extends Comparable[C] { implicit def c: C = new C; def compareTo(implicit x: C): Int = 0; def f = implici
tly[Int] }
^
error: could not find implicit value for parameter e: Int
scala> class C extends Comparable[C] { implicit def c: C = new C; implicit def compareTo(implicit x: C): Int = 0; def f
= implicitly[Int] }
^
error: class C needs to be abstract. Missing implementation for:
def compareTo(x$1: C): Int // inherited from trait Comparable
scala> class C extends { implicit def c: C = new C; implicit def compareTo(implicit x: C): Int = 0; def f = implicitly[I
nt] }
class C
Problem
It should not silently drop the implicit. Maybe it's doing that only when overriding Java methods.