Hi Simon,
Private methods interfaces
are already supported by JVM.
The message that you refer to is about support in
javac, not in the VM. In VM it's already supported and emitted by dotty.
cat A.scala
trait A{
private def p = "s"
def d = p
}
object B extends A{
def main(args: Array[String]): Unit = {
println(d)
}
}
dotc A.scala
javap -c -p A
Compiled from "A.scala"
public interface A {
public A initial$A();
Code:
0: aload_0
1: areturn
private java.lang.String p();
Code:
0: ldc #13 // String s
2: areturn
public java.lang.String d();
Code:
0: aload_0
1: invokespecial #16 // Method p:()Ljava/lang/String;
4: areturn
}
javap -c -p B$
ompiled from "A.scala"
public final class B$ implements A {
public static final B$ MODULE$;
public static {};
Code:
0: new #2 // class B$
3: invokespecial #14 // Method "<init>":()V
6: return
public B$();
Code:
0: aload_0
1: invokespecial #15 // Method java/lang/Object."<init>":()V
4: aload_0
5: putstatic #17 // Field MODULE$:LB$;
8: aload_0
9: invokespecial #21 // Method A.initial$A:()LA;
12: pop
13: return
public void main(java.lang.String[]);
Code:
0: getstatic #29 // Field scala/Predef$.MODULE$:Lscala/Predef$;
3: aload_0
4: invokeinterface #33, 1 // InterfaceMethod A.d:()Ljava/lang/String;
9: invokevirtual #37 // Method scala/Predef$.println:(Ljava/lang/Object;)V
12: return
}
Cheers,
Dmitry