FIR: support CONDITION_TYPE_MISMATCH diagnostic
We report CONDITION_TYPE_MISMATCH on - loop conditions - when branch conditions - binary logic arguments
This commit is contained in:
+3
-3
@@ -26,7 +26,7 @@ import checkSubtype
|
||||
*/
|
||||
fun case1() {
|
||||
val a: Any = true
|
||||
if (a) { "true" } else "false"
|
||||
if (<!CONDITION_TYPE_MISMATCH!>a<!>) { "true" } else "false"
|
||||
<!NONE_APPLICABLE!>checkSubtype<!><Boolean>(a)
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ fun case1() {
|
||||
*/
|
||||
fun case2() {
|
||||
val a = JavaContainer.aO
|
||||
if (a) { "true" } else "false"
|
||||
if (<!CONDITION_TYPE_MISMATCH!>a<!>) { "true" } else "false"
|
||||
<!NONE_APPLICABLE!>checkSubtype<!><Boolean>(a)
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public class JavaClassCase3{
|
||||
fun case3() {
|
||||
val x = JavaClassCase3.id(null) // Nothing!
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Nothing?")!>x<!>
|
||||
val a = if (x) {
|
||||
val a = if (<!CONDITION_TYPE_MISMATCH!>x<!>) {
|
||||
"NOK"
|
||||
} else "NOK"
|
||||
}
|
||||
|
||||
+4
-4
@@ -19,13 +19,13 @@ import checkType
|
||||
import check
|
||||
|
||||
// TESTCASE NUMBER: 0
|
||||
fun foo() = run { false && JavaClass.VALUE && throw Exception() }
|
||||
fun foo() = run { false && <!CONDITION_TYPE_MISMATCH!>JavaClass.VALUE<!> && throw Exception() }
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val a: Boolean? = false
|
||||
checkSubtype<Boolean?>(a)
|
||||
val x4 = a && true
|
||||
val x4 = <!CONDITION_TYPE_MISMATCH!>a<!> && true
|
||||
x4 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ fun case1() {
|
||||
fun case2() {
|
||||
val a: Any = false
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>a<!>
|
||||
val x4 = a && true
|
||||
val x4 = <!CONDITION_TYPE_MISMATCH!>a<!> && true
|
||||
x4 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ fun case3() {
|
||||
val a2 = JavaClass.VALUE
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any..kotlin.Any?!")!>a2<!>
|
||||
|
||||
val x3 = a1 && a2
|
||||
val x3 = a1 && <!CONDITION_TYPE_MISMATCH!>a2<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Boolean")!>x3<!>
|
||||
|
||||
x3 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
|
||||
+4
-4
@@ -19,13 +19,13 @@ import checkType
|
||||
import check
|
||||
|
||||
// TESTCASE NUMBER: 0
|
||||
fun foo() = run { false || JavaClass.VALUE || throw Exception() }
|
||||
fun foo() = run { false || <!CONDITION_TYPE_MISMATCH!>JavaClass.VALUE<!> || throw Exception() }
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val a: Boolean? = false
|
||||
checkSubtype<Boolean?>(a)
|
||||
val x4 = a || true
|
||||
val x4 = <!CONDITION_TYPE_MISMATCH!>a<!> || true
|
||||
x4 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ fun case1() {
|
||||
fun case2() {
|
||||
val a: Any = false
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>a<!>
|
||||
val x4 = a || true
|
||||
val x4 = <!CONDITION_TYPE_MISMATCH!>a<!> || true
|
||||
x4 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ fun case3() {
|
||||
val a2 = JavaClass.VALUE
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any..kotlin.Any?!")!>a2<!>
|
||||
|
||||
val x3 = a1 || a2
|
||||
val x3 = a1 || <!CONDITION_TYPE_MISMATCH!>a2<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Boolean")!>x3<!>
|
||||
|
||||
x3 <!OVERLOAD_RESOLUTION_AMBIGUITY!>checkType<!> { <!NONE_APPLICABLE!>check<!><Boolean>() }
|
||||
|
||||
Vendored
+6
-6
@@ -3,12 +3,12 @@
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int, value_2: String, value_3: TypesProvider): String {
|
||||
when {
|
||||
.012f / value_1 -> return ""
|
||||
"$value_2..." -> return ""
|
||||
'-' -> return ""
|
||||
{} -> return ""
|
||||
value_3.getAny() -> return ""
|
||||
-10..-1 -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>.012f / value_1<!> -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>"$value_2..."<!> -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>'-'<!> -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>{}<!> -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>value_3.getAny()<!> -> return ""
|
||||
<!CONDITION_TYPE_MISMATCH!>-10..-1<!> -> return ""
|
||||
}
|
||||
|
||||
return ""
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@ fun case_1(value_1: TypesProvider) {
|
||||
when {
|
||||
getBoolean(), value_1.getBoolean() -> return
|
||||
value_1.getBoolean() && getBoolean(), getLong() == 1000L -> return
|
||||
Out<Int>(), getLong(), {}, Any(), throw Exception() -> return
|
||||
<!CONDITION_TYPE_MISMATCH!>Out<Int>()<!>, getLong(), {}, Any(), throw Exception() -> return
|
||||
}
|
||||
|
||||
return
|
||||
|
||||
+3
-3
@@ -5,19 +5,19 @@
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
do {
|
||||
} while ("boo")
|
||||
} while (<!CONDITION_TYPE_MISMATCH!>"boo"<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case2() {
|
||||
val condition: Any = true
|
||||
do {
|
||||
} while (condition)
|
||||
} while (<!CONDITION_TYPE_MISMATCH!>condition<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case3() {
|
||||
val condition: Boolean? = true
|
||||
do {
|
||||
} while (condition)
|
||||
} while (<!CONDITION_TYPE_MISMATCH!>condition<!>)
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,13 +6,13 @@
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val condition: Any = true
|
||||
while (condition && "true") {
|
||||
while (<!CONDITION_TYPE_MISMATCH!>condition<!> && <!CONDITION_TYPE_MISMATCH!>"true"<!>) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case2() {
|
||||
val condition: Boolean? = true
|
||||
while (condition) {
|
||||
while (<!CONDITION_TYPE_MISMATCH!>condition<!>) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ fun case_11(x: Any?) {
|
||||
* ISSUES: KT-30376
|
||||
*/
|
||||
fun case_12(x: Any?) {
|
||||
if (x!! as Boolean?) {
|
||||
if (<!CONDITION_TYPE_MISMATCH!>x!! as Boolean?<!>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.<!UNRESOLVED_REFERENCE!>not<!>()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>select(x)<!>.<!UNRESOLVED_REFERENCE!>not<!>()
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ fun case_30(a: ((Float) -> Int?)?, b: Float?) {
|
||||
|
||||
// TESTCASE NUMBER: 31
|
||||
fun case_31(z1: Boolean?, z: Nothing?) {
|
||||
if (false || EnumClassWithNullableProperty.A.prop_1 != z && z1 !== z && z1) {
|
||||
if (false || EnumClassWithNullableProperty.A.prop_1 != z && z1 !== z && <!CONDITION_TYPE_MISMATCH!>z1<!>) {
|
||||
EnumClassWithNullableProperty.A.prop_1
|
||||
EnumClassWithNullableProperty.A.prop_1<!UNSAFE_CALL!>.<!>equals(null)
|
||||
EnumClassWithNullableProperty.A.prop_1.propT
|
||||
|
||||
Reference in New Issue
Block a user