Skip to content

NoSuchMethodError when accessing an override val via super #12715

Closed
scala/scala
#10268
@Atry

Description

@Atry

Reproduction steps

Scala version: 2.13.10

trait A {
  def f: String
}

trait B extends A {
  def f = "B";
}

trait C extends A {
  override val f = "C"
}

trait D extends A with B {
  def d = super.f
}

object O extends B with C with D

O.f
O.d

See https://scastie.scala-lang.org/2L5tOgBESIu7v9D9yyK7gQ

Problem

java.lang.NoSuchMethodError: 'java.lang.String Playground$C.f$(Playground$C)'
	at Playground$O$.Playground$D$$super$f(main.scala:19)
	at Playground$D.d(main.scala:16)
	at Playground$D.d$(main.scala:15)
	at Playground$O$.d(main.scala:19)
	at Playground$.<clinit>(main.scala:22)
	at Main$.<clinit>(main.scala:27)
	at Main.main(main.scala)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at sbt.Run.invokeMain(Run.scala:143)
	at sbt.Run.execute$1(Run.scala:93)
	at sbt.Run.$anonfun$runWithLoader$5(Run.scala:120)
	at sbt.Run$.executeSuccess(Run.scala:186)
	at sbt.Run.runWithLoader(Run.scala:120)
	at sbt.Run.run(Run.scala:127)
	at com.olegych.scastie.sbtscastie.SbtScastiePlugin$$anon$1.$anonfun$run$1(SbtScastiePlugin.scala:38)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:17)
	at sbt.ScastieTrapExit$App.run(ScastieTrapExit.scala:258)
	at java.base/java.lang.Thread.run(Thread.java:831)

This bug is similar to #10308, but this one can be reproduced without abstract override.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions