Extensible specificity expressed as a type capability

This commit is contained in:
Andrey Breslav
2014-09-28 08:48:48 +04:00
parent 4b24c96cca
commit 013dd7261e
7 changed files with 89 additions and 19 deletions
@@ -9,6 +9,8 @@ public class J {
public interface B {}
public static B foo(Integer s);
public static Integer getInteger();
}
// FILE: k.kt
@@ -25,5 +27,8 @@ fun test(i: Int, ni: Int?) {
foo(i) : J.A
J.foo(ni) : J.B
<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>(ni)
foo(J.getInteger())
J.foo(J.getInteger())
}
@@ -0,0 +1,30 @@
// FILE: p/Super.java
package p;
public interface Super {}
// FILE: p/Sub.java
package p;
public interface Sub extends Super {}
// FILE: p/Util.java
package p;
public abstract class Util {
public abstract void foo(String s, Super sup)
public void foo(String s, Sub sub) {}
}
// FILE: k.kt
import p.*
class C: Util() {
override fun foo(s: String, sub: Super) {}
}
fun foo(sub: Sub) {
C().foo("", sub)
}
@@ -0,0 +1,12 @@
package
internal fun foo(/*0*/ sub: p.Sub): kotlin.Unit
internal final class C : p.Util {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun foo(/*0*/ s: kotlin.String, /*1*/ sub: p.Super): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun foo(/*0*/ s: kotlin.String!, /*1*/ sub: p.Sub!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}