bug icon indicating copy to clipboard operation
bug copied to clipboard

Keyword `implicit` silently ignored when overriding Java method

Open som-snytt opened this issue 3 years ago • 0 comments

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.

som-snytt avatar May 24 '22 23:05 som-snytt