FIR checker: differentiate UNSAFE_CALL from INAPPLICABLE_CANDIDATE
To do so, inside the root cause of inapplicable candidate errors, we will record expected/actual type of receiver, if any. That will help identifying inapplicable calls on nullable receiver.
This commit is contained in:
committed by
Mikhail Glukhikh
parent
4b823eca21
commit
e72ddbcbfe
Vendored
+3
-3
@@ -7,9 +7,9 @@ operator fun <K> Container<K>.iterator(): Iterator<K> = null!!
|
||||
fun test() {
|
||||
val container: Container<String>? = null
|
||||
// Error
|
||||
container.<!INAPPLICABLE_CANDIDATE!>iterator<!>()
|
||||
container.<!UNSAFE_CALL!>iterator<!>()
|
||||
// for extension iterator, this code compiles, but should not
|
||||
<!INAPPLICABLE_CANDIDATE!>for (s in container) {}<!>
|
||||
<!UNSAFE_CALL!>for (s in container) {}<!>
|
||||
}
|
||||
class OtherContainer<K>(val k: K) {
|
||||
operator fun iterator(): Iterator<K> = null!!
|
||||
@@ -18,5 +18,5 @@ class OtherContainer<K>(val k: K) {
|
||||
fun test2() {
|
||||
val other: OtherContainer<String>? = null
|
||||
// Error
|
||||
<!INAPPLICABLE_CANDIDATE!>for (s in other) {}<!>
|
||||
<!UNSAFE_CALL!>for (s in other) {}<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user