Extensible specificity expressed as a type capability
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
+30
@@ -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)
|
||||
}
|
||||
+12
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user