FIR DFA: x !is T? => x != null

^KT-22996 tag fixed-in-k2
This commit is contained in:
pyos
2022-11-14 17:18:01 +01:00
committed by teamcity
parent 02fedeb9ed
commit f485413cfd
18 changed files with 118 additions and 53 deletions
@@ -20,7 +20,7 @@ inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
// TESTCASE NUMBER: 2
inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boolean? {
<!WRONG_IMPLIES_CONDITION, WRONG_IMPLIES_CONDITION!>contract {
<!WRONG_IMPLIES_CONDITION, WRONG_IMPLIES_CONDITION, WRONG_IMPLIES_CONDITION!>contract {
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
returns(true) implies (value_1 == null && this@case_2 == null && value_2 !is Boolean?)
returns(false) implies (value_2 is Boolean?)
@@ -55,7 +55,7 @@ fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
val value_4: Int
when (value_1.case_2(value_2, value_3) { value_4 = 10 }) {
true -> {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_3?.<!UNRESOLVED_REFERENCE!>xor<!>(true))
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_3<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>xor<!>(true))
println(<!UNINITIALIZED_VARIABLE!>value_4<!>)
println(value_1<!UNSAFE_CALL!>.<!>inv())
println(value_2<!UNSAFE_CALL!>.<!>inv())
@@ -66,7 +66,7 @@ fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
println(value_2)
}
null -> {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_3?.<!UNRESOLVED_REFERENCE!>xor<!>(true))
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_3<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>xor<!>(true))
println(<!UNINITIALIZED_VARIABLE!>value_4<!>)
println(value_1)
println(value_2)
@@ -235,7 +235,7 @@ fun case_3(value_1: Any?) {
// TESTCASE NUMBER: 4
fun case_4(value_1: Any?) {
case_4_1(value_1)
value_1?.<!UNRESOLVED_REFERENCE!>toByte<!>()
value_1<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>()
case_4_2(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)
value_1.<!UNRESOLVED_REFERENCE!>toByte<!>()
case_4_3(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)
@@ -329,14 +329,14 @@ fun case_7(value_1: Any?) {
// TESTCASE NUMBER: 8
fun case_8(value_1: Any?) {
if (case_8_1(value_1)) {
value_1?.<!UNRESOLVED_REFERENCE!>toByte<!>()
value_1<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>()
if (case_8_2(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)) {
value_1.<!UNRESOLVED_REFERENCE!>toByte<!>()
if (case_8_3(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)) value_1.<!UNRESOLVED_REFERENCE!>inv<!>()
}
}
if (!case_8_4(value_1)) {
value_1?.<!UNRESOLVED_REFERENCE!>toByte<!>()
value_1<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>()
if (!case_8_5(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)) {
value_1.<!UNRESOLVED_REFERENCE!>toByte<!>()
if (!case_8_6(<!ARGUMENT_TYPE_MISMATCH!>value_1<!>)) value_1.<!UNRESOLVED_REFERENCE!>inv<!>()
@@ -58,7 +58,7 @@ import contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Any?) {
funWithReturns(value_1 !is Number?)
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1?.<!UNRESOLVED_REFERENCE!>toByte<!>())
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>())
if (funWithReturnsTrue(value_1 !is Number)) {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1.<!UNRESOLVED_REFERENCE!>toByte<!>())
if (funWithReturnsNotNull(value_1 is Int) == null) <!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1.<!UNRESOLVED_REFERENCE!>inv<!>())
@@ -68,7 +68,7 @@ fun case_1(value_1: Any?) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Any?) {
if (!funWithReturnsFalse(value_1 !is Number?)) {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1?.<!UNRESOLVED_REFERENCE!>toByte<!>())
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>())
funWithReturns(value_1 !is Number)
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1.<!UNRESOLVED_REFERENCE!>toByte<!>())
if (funWithReturnsNull(value_1 !is Int) == null) <!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_1.<!UNRESOLVED_REFERENCE!>inv<!>())
@@ -78,12 +78,12 @@ fun case_2(value_1: Any?) {
// TESTCASE NUMBER: 3
fun case_3(value_1: Int?, value_2: Any?) {
if (!value_1.case_3(value_1, value_2 is Number?)) {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_2?.<!UNRESOLVED_REFERENCE!>toByte<!>())
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_2<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>())
println(value_1)
} else if (value_1.case_3(value_1, value_2 is Number?)) {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_2?.<!UNRESOLVED_REFERENCE!>toByte<!>())
} else {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_2?.<!UNRESOLVED_REFERENCE!>toByte<!>())
<!OVERLOAD_RESOLUTION_AMBIGUITY!>println<!>(value_2<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>toByte<!>())
}
}