@@ -16,18 +16,28 @@ class BytecodeTest extends BytecodeTesting {
16
16
import compiler ._
17
17
18
18
@ Test
19
- def bridgeFlag (): Unit = {
19
+ def staticForwardersBridgeFlag (): Unit = {
20
20
val code =
21
- """ A { def f: Object = null }
22
- |object B extends A { override def f: String = "b" }
21
+ """ A {
22
+ | def f: Object = null
23
+ | def g: Object
24
+ |}
25
+ |object B extends A {
26
+ | override def f: String = "b" // "bridge" forwarder
27
+ | def g: String = "b" // no "bridge" forwarder, as the overridden method is abstract, scala/bug#11207
28
+ |}
29
+ |case class K(x: Int, s: String)
23
30
""" .stripMargin
24
- for (base <- List (" trait" , " class" )) {
25
- val List (a, bMirror, bModule) = compileClasses(base + code)
31
+ for (base <- List (" trait" , " abstract class" )) {
32
+ val List (a, bMirror, bModule, kClass, kModule ) = compileClasses(base + code)
26
33
assertEquals(" B" , bMirror.name)
27
- assertEquals(List (" f()Ljava/lang/Object;0x49" , " f()Ljava/lang/String;0x9" ),
34
+ assertEquals(List (" f()Ljava/lang/Object;0x49" , " f()Ljava/lang/String;0x9" , " g()Ljava/lang/String;0x9 " ),
28
35
bMirror.methods.asScala
29
- .filter(_ .name == " f" )
36
+ .filter(m => m .name == " f" || m.name == " g " )
30
37
.map(m => m.name + m.desc + " 0x" + Integer .toHexString(m.access)).toList.sorted)
38
+ assertEquals(" K" , kClass.name)
39
+ val List (app) = kClass.methods.asScala.filter(_.name == " apply" ).toList
40
+ assertEquals(" apply(ILjava/lang/String;)LK;0x9" , app.name + app.desc + " 0x" + Integer .toHexString(app.access))
31
41
}
32
42
}
33
43
0 commit comments