Skip to content

Regression call outer class super method from inner class #9225

Closed
@FabioPinheiro

Description

@FabioPinheiro

Minimized code

trait A {
  val s = "same val in A"
  def f: String = s
}

class B extends A {
  class C {
    def call_f_in_A: String = B.super[A].f
  }
}
val b = new B                                                                                                                                                                                                                          
val c = new b.C
c.call_f_in_A // AbstractMethodError

Output

java.lang.AbstractMethodError:
Receiver class rs$line$3$B$C does not define or inherit an implementation of the 
resolved method 'abstract java.lang.String rs$line$3$A$$s()' of interface rs$line$3$A.
// defined trait A
// defined class B
java.lang.AbstractMethodError: Receiver class rs$line$3$B$C does not define or inherit an implementation of the resolved method 'abstract java.lang.String rs$line$3$A$$s()' of interface rs$line$3$A.
	at rs$line$3$A.f(rs$line$3:3)
	at rs$line$3$B$C.call_f_in_A(rs$line$3:8)
	at rs$line$3$.<init>(rs$line$3:13)
	at rs$line$3$.<clinit>(rs$line$3)
	at rs$line$3.b(rs$line$3)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at dotty.tools.repl.Rendering.$anonfun$3(Rendering.scala:84)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:84)
	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:121)
	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:306)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.collection.immutable.List.flatMap(List.scala:79)
	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$2(ReplDriver.scala:306)
	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:327)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:330)
	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:250)
	at scala.util.Either.fold(Either.scala:189)
	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:265)
	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:195)
	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:128)
	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:131)
	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:150)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:131)
	at dotty.tools.repl.Main$.main(Main.scala:6)
	at dotty.tools.repl.Main.main(Main.scala)

java.lang.NoClassDefFoundError: Could not initialize class rs$line$3$
	at rs$line$3.c(rs$line$3)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at dotty.tools.repl.Rendering.$anonfun$3(Rendering.scala:84)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:84)
	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:121)
	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:306)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.collection.immutable.List.flatMap(List.scala:79)
	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$2(ReplDriver.scala:306)
	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:327)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:330)
	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:250)
	at scala.util.Either.fold(Either.scala:189)
	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:265)
	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:195)
	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:128)
	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:131)
	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:150)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:131)
	at dotty.tools.repl.Main$.main(Main.scala:6)
	at dotty.tools.repl.Main.main(Main.scala)

java.lang.NoClassDefFoundError: Could not initialize class rs$line$3$
	at rs$line$3.res1(rs$line$3)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at dotty.tools.repl.Rendering.$anonfun$3(Rendering.scala:84)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:84)
	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:121)
	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:306)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.collection.immutable.List.flatMap(List.scala:79)
	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$2(ReplDriver.scala:306)
	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:327)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:330)
	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:250)
	at scala.util.Either.fold(Either.scala:189)
	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:265)
	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:195)
	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:128)
	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:131)
	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:150)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:131)
	at dotty.tools.repl.Main$.main(Main.scala:6)
	at dotty.tools.repl.Main.main(Main.scala)

Expectation

It should compile.
I had the impression this was working one week ago. Maybe it was long ago or I'm just mistaken.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions