File tree 5 files changed +99
-2
lines changed
src/dotty/tools/backend/jvm 5 files changed +99
-2
lines changed Original file line number Diff line number Diff line change @@ -586,7 +586,7 @@ trait BCodeHelpers extends BCodeIdiomatic with BytecodeWriters {
586
586
val m = if (m0.is(Bridge )) m0.nextOverriddenSymbol else m0
587
587
if (m == NoSymbol )
588
588
report.log(s " $m0 is a bridge method that overrides nothing, something went wrong in a previous phase. " )
589
- else if (m.isType || m.is( Deferred ) || (m.owner eq defn.ObjectClass ) || m.isConstructor || m.name.is(ExpandedName ))
589
+ else if (m.isType || (m.owner eq defn.ObjectClass ) || m.isConstructor || m.name.is(ExpandedName ))
590
590
report.debuglog(s " No forwarder for ' $m' from $jclassName to ' $moduleClass' " )
591
591
else if (conflictingNames(m.name))
592
592
report.log(s " No forwarder for $m due to conflict with ${linkedClass.info.member(m.name)}" )
@@ -607,7 +607,8 @@ trait BCodeHelpers extends BCodeIdiomatic with BytecodeWriters {
607
607
val names = tp.memberNames(takeAllFilter).toSeq.sorted
608
608
val buffer = mutable.ListBuffer [Symbol ]()
609
609
names.foreach { name =>
610
- buffer ++= tp.memberBasedOnFlags(name, required, excluded)
610
+ // lookup members at erasure: lampepfl/dotty#12753
611
+ buffer ++= atPhase(erasurePhase)(tp.memberBasedOnFlags(name, required, excluded))
611
612
.alternatives.sortBy(_.signature)(Signature .lexicographicOrdering).map(_.symbol)
612
613
}
613
614
buffer.toList
Original file line number Diff line number Diff line change @@ -34,3 +34,4 @@ typeclass-derivation3.scala
34
34
varargs-abstract
35
35
zero-arity-case-class.scala
36
36
i12194.scala
37
+ i12753
Original file line number Diff line number Diff line change
1
+ 1
2
+ Dbr
3
+ 1
4
+ 1
5
+ 2
6
+ 1
7
+ 1
8
+ 1
9
+ 1
10
+ 2
11
+ 1
12
+ 1
13
+ public static java.lang.String D.bar()
14
+ public static D D.foo(int)
15
+ public static D D.t()
16
+ public static int O.a()
17
+ public static int O.b()
18
+ public static void O.b_$eq(int)
19
+ public static int O.c()
20
+ public static int O.d()
21
+ public static int O.i()
22
+ public static int O.j()
23
+ public static void O.j_$eq(int)
24
+ public static int O.k()
25
+ public static int O.l()
Original file line number Diff line number Diff line change
1
+ trait C [This <: C [This ]]
2
+
3
+ trait COps [This <: C [This ]] {
4
+ def t : This
5
+ def foo (x : Int ): This = t
6
+ def bar : Object = " Cbr"
7
+ }
8
+
9
+ class D extends C [D ] {
10
+ def x = 1
11
+ }
12
+ object D extends COps [D ] {
13
+ def t = new D
14
+ override def foo (x : Int ): D = super .foo(x)
15
+ override def bar : String = " Dbr"
16
+ }
17
+
18
+ trait T {
19
+ val a = 1
20
+ var b = 1
21
+ lazy val c = 1
22
+ def d = 1
23
+
24
+ val i : Int
25
+ var j : Int
26
+ lazy val k : Int = 1
27
+ def l : Int
28
+ }
29
+ object O extends T {
30
+ val i : Int = 1
31
+ var j : Int = 1
32
+ override lazy val k : Int = 1
33
+ def l : Int = 1
34
+ }
Original file line number Diff line number Diff line change
1
+ public class Test {
2
+ public static void s (Object s ) {
3
+ System .out .println (s );
4
+ }
5
+
6
+ public static void statics (Class <?> c ) {
7
+ java .lang .reflect .Method [] ms = c .getDeclaredMethods ();
8
+ java .util .Arrays .sort (ms , (a , b ) -> a .getName ().compareTo (b .getName ()));
9
+ for (java .lang .reflect .Method a : ms ) {
10
+ if (java .lang .reflect .Modifier .isStatic (a .getModifiers ()))
11
+ s (a );
12
+ }
13
+ }
14
+
15
+ public static void main (String [] args ) {
16
+ s (D .foo (1 ).x ());
17
+ s (D .bar ());
18
+
19
+ s (O .a ());
20
+ s (O .b ());
21
+ O .b_$eq (2 );
22
+ s (O .b ());
23
+ s (O .c ());
24
+ s (O .d ());
25
+
26
+ s (O .i ());
27
+ s (O .j ());
28
+ O .j_$eq (2 );
29
+ s (O .j ());
30
+ s (O .k ());
31
+ s (O .l ());
32
+
33
+ statics (D .class );
34
+ statics (O .class );
35
+ }
36
+ }
You can’t perform that action at this time.
0 commit comments