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
@@ -7,9 +7,9 @@ fun case_1(x: Class?) {
|
||||
if (x?.fun_4()?.fun_4()?.fun_4()?.fun_4() != null) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!INAPPLICABLE_CANDIDATE!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!INAPPLICABLE_CANDIDATE!>fun_4<!>().<!INAPPLICABLE_CANDIDATE!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!INAPPLICABLE_CANDIDATE!>fun_4<!>().<!INAPPLICABLE_CANDIDATE!>fun_4<!>().<!INAPPLICABLE_CANDIDATE!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!UNSAFE_CALL!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!UNSAFE_CALL!>fun_4<!>().<!UNSAFE_CALL!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!UNSAFE_CALL!>fun_4<!>().<!UNSAFE_CALL!>fun_4<!>().<!UNSAFE_CALL!>fun_4<!>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ fun case_2(x: Class?) {
|
||||
if (x?.fun_4()?.prop_8 != null) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!INAPPLICABLE_CANDIDATE!>prop_8<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.fun_4().<!UNSAFE_CALL!>prop_8<!>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ fun case_3(x: Class?) {
|
||||
if (x?.prop_8?.fun_4() != null) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.prop_8
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.prop_8.fun_4().<!INAPPLICABLE_CANDIDATE!>prop_8<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class & Class?")!>x<!>.prop_8.fun_4().<!UNSAFE_CALL!>prop_8<!>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ fun case_3(x: Class?) {
|
||||
fun case_4(x: Class?) {
|
||||
if (x?.prop_8.also { } != null) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>.<!INAPPLICABLE_CANDIDATE!>prop_8<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>.<!INAPPLICABLE_CANDIDATE!>prop_8<!>.<!INAPPLICABLE_CANDIDATE!>fun_4<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>.<!UNSAFE_CALL!>prop_8<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>.<!UNSAFE_CALL!>prop_8<!>.<!UNSAFE_CALL!>fun_4<!>()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user