[FIR] Make type of safe call always nullable

^KT-46860 In Progress
This commit is contained in:
Dmitriy Novozhilov
2021-06-21 17:34:21 +03:00
committed by teamcityserver
parent f18e38a49f
commit 09994ee8ea
9 changed files with 18 additions and 14 deletions
@@ -2,5 +2,5 @@ fun Int.gg() = null
fun ff() {
val a: Int = 1
val b: Int = <!INITIALIZER_TYPE_MISMATCH!>a<!UNNECESSARY_SAFE_CALL!>?.<!><!TYPE_MISMATCH!>gg()<!><!>
val b: Int = <!INITIALIZER_TYPE_MISMATCH, TYPE_MISMATCH!>a<!UNNECESSARY_SAFE_CALL!>?.<!>gg()<!>
}
@@ -18,10 +18,10 @@ fun main() {
J <!ARGUMENT_TYPE_MISMATCH!>{ s: String -> s}<!> // should be prohibited, because SAM value parameter has nullable type
J { "" + it<!UNSAFE_CALL!>.<!>length }
J { <!NULL_FOR_NONNULL_TYPE!>null<!> }
J { it?.length?.<!ARGUMENT_TYPE_MISMATCH!>toString()<!> }
J { <!ARGUMENT_TYPE_MISMATCH!>it?.length?.toString()<!> }
J2 <!ARGUMENT_TYPE_MISMATCH!>{ s: String -> s}<!>
J2 { "" + it<!UNSAFE_CALL!>.<!>length }
J2 { <!NULL_FOR_NONNULL_TYPE!>null<!> }
J2 { it?.length?.<!ARGUMENT_TYPE_MISMATCH!>toString()<!> }
J2 { <!ARGUMENT_TYPE_MISMATCH!>it?.length?.toString()<!> }
}
@@ -8,5 +8,5 @@ fun foo(i: Int) = i
fun test(a: A?) {
a?.b(1) //should be no warning
foo(a?.<!ARGUMENT_TYPE_MISMATCH!>b(1)<!>) //no warning, only error
foo(<!ARGUMENT_TYPE_MISMATCH!>a?.b(1)<!>) //no warning, only error
}
@@ -6,5 +6,5 @@
fun foo(i: Int) {}
fun test(s: String?) {
foo(<!ARGUMENT_TYPE_MISMATCH{PSI}!>s?.<!ARGUMENT_TYPE_MISMATCH{LT}!>length<!><!>)
foo(<!ARGUMENT_TYPE_MISMATCH!>s?.length<!>)
}
@@ -8,13 +8,13 @@ interface A {
fun takeInt(x: Int) {}
fun test_1(a: A) {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!>
takeInt(x) // should be an error
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!>
takeInt(<!ARGUMENT_TYPE_MISMATCH!>x<!>) // should be an error
}
fun test_2(a: A?) {
if (a != null) {
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!>
takeInt(x) // should be an error
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!>
takeInt(<!ARGUMENT_TYPE_MISMATCH!>x<!>) // should be an error
}
}