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
+4
-4
@@ -105,8 +105,8 @@ fun case_6() {
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Byte>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Short>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Int>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Byte>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Short>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Int>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
}
|
||||
|
||||
+6
-6
@@ -3,23 +3,23 @@
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
|
||||
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
|
||||
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
|
||||
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
|
||||
}
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ class A() {
|
||||
|
||||
fun case1() {
|
||||
var b: Case1? = Case1()
|
||||
<!INAPPLICABLE_CANDIDATE!>--<!>b?.a
|
||||
<!UNSAFE_CALL!>--<!>b?.a
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ class A() {
|
||||
|
||||
fun case1() {
|
||||
var b: Case1? = Case1()
|
||||
<!INAPPLICABLE_CANDIDATE!>++<!>b?.a
|
||||
<!UNSAFE_CALL!>++<!>b?.a
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ fun case3() {
|
||||
*/
|
||||
fun case4(marker : Marker?) {
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.foo; typeCall: function")!>foo(y=1)<!>
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.invoke; typeCall: variable&invoke")!>foo(x=1)<!><!INAPPLICABLE_CANDIDATE!>><!><!SYNTAX!><!>
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.invoke; typeCall: variable&invoke")!>foo(x=1)<!><!UNSAFE_CALL!>><!><!SYNTAX!><!>
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ fun case3() {
|
||||
*/
|
||||
fun case4(marker: Marker?) {
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.foo; typeCall: function")!>foo(y = { 1 })<!>
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.invoke; typeCall: variable&invoke")!>foo(x = { 1 })<!><!INAPPLICABLE_CANDIDATE!>><!><!SYNTAX!><!>
|
||||
marker?.<!DEBUG_INFO_CALL("fqName: libPackage.Marker.invoke; typeCall: variable&invoke")!>foo(x = { 1 })<!><!UNSAFE_CALL!>><!><!SYNTAX!><!>
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@
|
||||
*/
|
||||
fun case1() {
|
||||
val x : Case1? = Case1()
|
||||
x.<!INAPPLICABLE_CANDIDATE!>x<!> = "0"
|
||||
x.x = "0"
|
||||
x?.x = "0"
|
||||
<!VARIABLE_EXPECTED!>x::x<!> = TODO()
|
||||
}
|
||||
@@ -24,7 +24,7 @@ class Case1{
|
||||
*/
|
||||
fun case2() {
|
||||
val x : Case2? = Case2(null)
|
||||
x.<!INAPPLICABLE_CANDIDATE!>x<!> = "0"
|
||||
x.x = "0"
|
||||
x?.x = "0"
|
||||
<!VARIABLE_EXPECTED!>x::x<!> = TODO()
|
||||
}
|
||||
@@ -37,7 +37,7 @@ class Case2(val x: Any?) {}
|
||||
*/
|
||||
fun case3() {
|
||||
val x : Case3? = Case3()
|
||||
x.<!INAPPLICABLE_CANDIDATE!>x<!> = "0"
|
||||
x.x = "0"
|
||||
x?.x = "0"
|
||||
<!VARIABLE_EXPECTED!>x::x<!> = TODO()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user