Files
kotlin-fork/compiler/testData/diagnostics/tests/inference/tooEagerSmartcast.fir.kt
T
Dmitriy Novozhilov f283f2db43 [FIR] Improve diagnostic reporting & don't use error symbol for candidate if possible
Also introduce few new diagnostics:
- NONE_APPLICABLE more many inapplicable candidates
- HIDDEN for visible candidates
2020-07-28 20:46:56 +03:00

43 lines
985 B
Kotlin
Vendored

// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +NewInference
interface OutBase<out E>
interface OutDerived<out F> : OutBase<F>
fun <X> OutBase<X>.myLast(): X = TODO()
fun <T> foo(x: OutBase<T>) {
if (x is OutDerived<*>) {
val l: T = x.myLast() // required T, found Cap(*). Only in NI
}
}
interface InvBase<E>
interface InvDerived<F> : InvBase<F>
fun <X> InvBase<X>.myLastInv(): X = TODO()
fun <T> fooInv(x: InvBase<T>) {
if (x is InvDerived<*>) {
val l: T = x.<!INAPPLICABLE_CANDIDATE!>myLastInv<!>() // required T, found Cap(*). Only in NI
}
}
interface Base<E>
fun <Q> Base<Q>.foo(): Q = TODO()
fun <Q : CharSequence> Base<Q>.baz(): Q = TODO()
interface Derived<F : CharSequence> : Base<F>
fun Number.num() {}
fun main(b: Base<out Number>) {
b.foo().num()
if (b is Derived<*>) {
b.<!INAPPLICABLE_CANDIDATE!>foo<!>().<!INAPPLICABLE_CANDIDATE!>num<!>()
b.<!INAPPLICABLE_CANDIDATE!>baz<!>().length
}
}