cff88a3f8b
Note, that this change potentially has some other effects in corner cases (like the changed test data that is rather sensible because `bar` in the example is not effectively projected out and can be called with nulls) Probably, we need to consider rewriting all other isSomeType methods in KotlinBuiltins, but now it seems to be a rather dangerous change #KT-16424 Fixed
29 lines
1.1 KiB
Kotlin
Vendored
29 lines
1.1 KiB
Kotlin
Vendored
// !WITH_NEW_INFERENCE
|
|
// !CHECK_TYPE
|
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
|
// FILE: main.kt
|
|
class Inv<T>(val x: T)
|
|
|
|
class A<T : Inv<in T>> {
|
|
fun foo(): T = null!!
|
|
}
|
|
|
|
class Inv2<<!FINITE_BOUNDS_VIOLATION!>T : Inv2<in T><!>>(val x: T)
|
|
|
|
fun main(a: A<*>, j: JavaClass<*>, i2: Inv2<*>) {
|
|
// Probably it's too restrictive to suppose star projection type here as Any?,
|
|
// but looks like we can refine it later
|
|
a.foo() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
|
j.foo() checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
|
i2.x checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
|
|
|
j.bar(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, <!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>, <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>Any()<!>)
|
|
j.bar(null)
|
|
}
|
|
|
|
// FILE: JavaClass.java
|
|
public class JavaClass<T extends JavaClass<? super T>> {
|
|
public void bar(T... x) {}
|
|
public T foo() {}
|
|
}
|