NI: Approximate captured-for-star-projections to *
^KT-35602 Fixed
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
|
||||
fun <X> id(x: X): X = x
|
||||
|
||||
fun main() {
|
||||
bar().x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
id(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
|
||||
outBar().x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
id(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
|
||||
fun <X> id(x: X): X = x
|
||||
|
||||
fun main() {
|
||||
bar().x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
id(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
|
||||
outBar().x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
id(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
fun foo(): Self<*>? = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
fun outFoo(): OutSelf<*>? = TODO()
|
||||
|
||||
fun main() {
|
||||
bar().x.x.x.x.x.x.x.x.x.x.x.x.x // OK
|
||||
foo()!!.x.x.x.x.x.x // OK
|
||||
foo()!!.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x // unresolved x in NI
|
||||
|
||||
outBar().x.x.x.x.x.x.x.x.x.x.x.x.x // OK
|
||||
outFoo()!!.x.x.x.x.x.x // OK
|
||||
outFoo()!!.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x // unresolved x in NI
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
fun foo(): Self<*>? = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
fun outFoo(): OutSelf<*>? = TODO()
|
||||
|
||||
fun main() {
|
||||
bar().x.x.x.x.x.x.x.x.x.x.x.x.x // OK
|
||||
foo()!!.x.x.x.x.x.x // OK
|
||||
foo()!!.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x // unresolved x in NI
|
||||
|
||||
outBar().x.x.x.x.x.x.x.x.x.x.x.x.x // OK
|
||||
outFoo()!!.x.x.x.x.x.x // OK
|
||||
outFoo()!!.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x // unresolved x in NI
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
// FILE: JavaClass.java
|
||||
public class JavaClass {
|
||||
public static <T extends Self<?>> Self<T> id1Inv(T t) { return null; }
|
||||
public static <T extends Self<?>> T id2Inv(T t) { return null; }
|
||||
public static <T extends OutSelf<?>> OutSelf<T> id1Out(T t) { return null; }
|
||||
public static <T extends OutSelf<?>> T id2Out(T t) { return null; }
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
|
||||
fun main() {
|
||||
JavaClass.id1Inv(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
JavaClass.id2Inv(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
|
||||
JavaClass.id1Out(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
JavaClass.id2Out(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// SKIP_TXT
|
||||
// !LANGUAGE: +NewInference
|
||||
|
||||
// FILE: JavaClass.java
|
||||
public class JavaClass {
|
||||
public static <T extends Self<?>> Self<T> id1Inv(T t) { return null; }
|
||||
public static <T extends Self<?>> T id2Inv(T t) { return null; }
|
||||
public static <T extends OutSelf<?>> OutSelf<T> id1Out(T t) { return null; }
|
||||
public static <T extends OutSelf<?>> T id2Out(T t) { return null; }
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
interface Self<E : Self<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun bar(): Self<*> = TODO()
|
||||
|
||||
interface OutSelf<out E : OutSelf<E>> {
|
||||
val x: E
|
||||
}
|
||||
fun outBar(): OutSelf<*> = TODO()
|
||||
|
||||
fun main() {
|
||||
JavaClass.id1Inv(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
JavaClass.id2Inv(bar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
|
||||
JavaClass.id1Out(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
JavaClass.id2Out(outBar()).x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
|
||||
}
|
||||
Reference in New Issue
Block a user