FIR DFA: x !is T? => x != null
^KT-22996 tag fixed-in-k2
This commit is contained in:
+5
-6
@@ -401,10 +401,10 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
||||
if (!type.canBeNull) {
|
||||
// x is (T & Any) => x != null
|
||||
flow.addImplication((expressionVariable eq isType) implies (operandVariable notEq null))
|
||||
} else {
|
||||
// TODO? (KT-22996) x !is T? => x != null; don't forget to change `approveContractStatement`
|
||||
// flow.addImplication((expressionVariable eq !isType) implies (operandVariable notEq null))
|
||||
}
|
||||
} else if (type.isMarkedNullable) {
|
||||
// x !is T? => x != null
|
||||
flow.addImplication((expressionVariable eq !isType) implies (operandVariable notEq null))
|
||||
} // else probably a type parameter, so which implication is correct depends on instantiation
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -418,8 +418,7 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
||||
} else {
|
||||
val expressionVariable = variableStorage.createSynthetic(typeOperatorCall)
|
||||
flow.addImplication((expressionVariable notEq null) implies (operandVariable notEq null))
|
||||
// TODO? (x as T?) == null => x == null
|
||||
// flow.addImplication((expressionVariable eq null) implies (operandVariable eq null))
|
||||
flow.addImplication((expressionVariable eq null) implies (operandVariable eq null))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,9 +45,11 @@ fun <F : Flow> LogicSystem<F>.approveContractStatement(
|
||||
substitutedType.isAny -> it.processEqNull(!isType)
|
||||
substitutedType.isNullableNothing -> it.processEqNull(isType)
|
||||
else -> {
|
||||
// x is (T & Any) => x != null
|
||||
// TODO? (KT-22996) x !is T? => x != null: change `&&` to `==`
|
||||
val fromNullability = if (isType && !type.canBeNull) it.processEqNull(false) else mapOf()
|
||||
// x is (T & Any) || x !is T? => x != null
|
||||
val fromNullability = if ((isType && !type.canBeNull) || (!isType && type.isMarkedNullable))
|
||||
it.processEqNull(false)
|
||||
else
|
||||
mapOf()
|
||||
if (isType && it is RealVariable) {
|
||||
andForTypeStatements(fromNullability, mapOf(it to (it typeEq substitutedType)))
|
||||
} else {
|
||||
|
||||
@@ -58,7 +58,7 @@ fun f11(a : A?) {
|
||||
is A -> a.foo()
|
||||
is Any -> a.foo()
|
||||
<!USELESS_IS_CHECK!>is Any?<!> -> a.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
else -> a?.foo()
|
||||
else -> a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,8 +68,8 @@ fun f12(a : A?) {
|
||||
is A -> a.foo()
|
||||
is Any -> a.foo();
|
||||
<!USELESS_IS_CHECK!>is Any?<!> -> a.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||
is C -> a.bar()
|
||||
else -> a?.foo()
|
||||
<!USELESS_IS_CHECK!>is C<!> -> a.bar()
|
||||
else -> a<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
|
||||
}
|
||||
|
||||
if (<!USELESS_IS_CHECK!>a is Any?<!>) {
|
||||
|
||||
@@ -56,5 +56,5 @@ FILE fqName:<root> fileName:/bangbang.kt
|
||||
then: CALL 'public final fun useString (s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||
s: CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.String origin=EXCLEXCL
|
||||
<T0>: kotlin.String
|
||||
arg0: TYPE_OP type=kotlin.String? origin=IMPLICIT_CAST typeOperand=kotlin.String?
|
||||
arg0: TYPE_OP type=kotlin.String origin=IMPLICIT_CAST typeOperand=kotlin.String
|
||||
GET_VAR 'a: X of <root>.test4 declared in <root>.test4' type=X of <root>.test4 origin=null
|
||||
|
||||
@@ -24,6 +24,6 @@ fun <X : Any?> test4(a: X) {
|
||||
a is String? -> CHECK_NOT_NULL<String>(arg0 = a /*as String? */) /*~> Unit */
|
||||
}
|
||||
when {
|
||||
a is String? -> useString(s = CHECK_NOT_NULL<String>(arg0 = a /*as String? */))
|
||||
a is String? -> useString(s = CHECK_NOT_NULL<String>(arg0 = a /*as String */))
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
// SKIP_TXT
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any) = when (value_1) {
|
||||
is Int -> {}
|
||||
is Float, is Char, is Boolean -> {}
|
||||
is String -> {}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) = when (value_1) {
|
||||
is Float, is Char, is SealedClass? -> "" // if value is null then this branch will be executed
|
||||
is Double, is Boolean, is ClassWithCompanionObject.Companion -> ""
|
||||
else -> ""
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 3
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-22996
|
||||
*/
|
||||
fun case_3(value_1: Any?) = when (value_1) {
|
||||
is Float, is Char, is Int? -> "" // if value is null then this branch will be executed
|
||||
is SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
|
||||
else -> ""
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 4
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-22996
|
||||
*/
|
||||
fun case_4(value_1: Any?) = when (value_1) {
|
||||
is Float, is Char?, is Int? -> "" // double nullable type check in the one branch
|
||||
is SealedChild1, is Boolean, is String -> ""
|
||||
else -> ""
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 5
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-22996
|
||||
*/
|
||||
fun case_5(value_1: Any?): String {
|
||||
when (value_1) {
|
||||
is Float, is Char?, is Int -> return ""
|
||||
is Double, is EmptyObject, is String -> return ""
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> return "" // null-check redundant
|
||||
else -> return ""
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 6
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-22996
|
||||
*/
|
||||
fun case_6(value_1: Any?): String {
|
||||
when (value_1) {
|
||||
is Float, is Char?, <!SENSELESS_NULL_IN_WHEN!>null<!>, is Int -> return "" // double nullable type check in the one branch
|
||||
is Double, is EmptyObject, is String -> return ""
|
||||
else -> return ""
|
||||
}
|
||||
}
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
|
||||
Vendored
+1
-1
@@ -44,6 +44,6 @@ fun case_6(value_1: Any?): String = when (value_1) {
|
||||
* ISSUES: KT-22996
|
||||
*/
|
||||
fun case_7(value_1: Any?): String = when (value_1) {
|
||||
is Number?, null, !is SealedChild3 -> "" // triple nullable type check in the one branch
|
||||
is Number?, <!SENSELESS_NULL_IN_WHEN!>null<!>, !is SealedChild3 -> "" // triple nullable type check in the one branch
|
||||
else -> ""
|
||||
}
|
||||
|
||||
+3
-3
@@ -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)
|
||||
|
||||
Vendored
+3
-3
@@ -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<!>()
|
||||
|
||||
Vendored
+4
-4
@@ -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<!>())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,12 +36,12 @@ inline fun <reified T> case_3(x: Any?) {
|
||||
when (x) {
|
||||
is T? -> return
|
||||
else -> {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
|
||||
}
|
||||
}
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
@@ -70,8 +70,8 @@ inline fun <reified T> case_5(x: Any?) {
|
||||
// TESTCASE NUMBER: 6
|
||||
inline fun <reified T> case_6(x: Any?) {
|
||||
if (x is T?) return
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
*/
|
||||
fun case_1(x: Number?): Long? {
|
||||
if (x is Long?) return x
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Number?")!>x<!>
|
||||
return <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Number?")!>x<!><!UNSAFE_CALL!>.<!>toLong()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Number? & kotlin.Number")!>x<!>
|
||||
return <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Number? & kotlin.Number")!>x<!>.toLong()
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -38,8 +38,8 @@ fun case_4(x: Any) {
|
||||
fun case_5(x: Any?) {
|
||||
if (!(x !is Class.NestedClass?) || x is Class.NestedClass? || x !is Class.NestedClass?) {
|
||||
if (!!(x !is Class.NestedClass?)) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>.<!UNRESOLVED_REFERENCE!>prop_4<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.<!UNRESOLVED_REFERENCE!>prop_4<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -72,8 +72,8 @@ fun case_8(x: Any?) {
|
||||
fun case_9(x: Any?) {
|
||||
if (!!!(x !is TypealiasNullableStringIndirect<!REDUNDANT_NULLABLE!>?<!>)) else {
|
||||
if (!(x !is TypealiasNullableStringIndirect<!REDUNDANT_NULLABLE!>?<!>)) else {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>?.<!UNRESOLVED_REFERENCE!>get<!>(0)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>get<!>(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,9 +93,9 @@ fun case_10(x: Any?) {
|
||||
fun case_11(x: Any?) {
|
||||
if (x is SealedMixedChildObject1?) else {
|
||||
if (x is SealedMixedChildObject1?) else {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>?.<!UNRESOLVED_REFERENCE!>prop_1<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>?.<!UNRESOLVED_REFERENCE!>prop_2<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>prop_1<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>prop_2<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,8 +46,8 @@ fun case_4(x: Any) {
|
||||
fun case_5(x: Any?) {
|
||||
if (!(x !is Class.NestedClass?)) {
|
||||
if (!!(<!USELESS_IS_CHECK!>x !is Class.NestedClass?<!>)) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Class.NestedClass?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Class.NestedClass?")!>x<!>?.prop_4
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Class.NestedClass")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Class.NestedClass")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!>prop_4
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,8 +76,8 @@ fun case_7(x: Any) {
|
||||
fun case_8(x: Any?) {
|
||||
if (!!!!(x is Int?)) else {
|
||||
if (!(x is Int?)) else {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Int?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Int?")!>x<!>?.inv()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Int")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Int")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!>inv()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,8 +86,8 @@ fun case_8(x: Any?) {
|
||||
fun case_9(x: Any?) {
|
||||
if (!!!(x !is TypealiasNullableStringIndirect<!REDUNDANT_NULLABLE!>?<!>)) else {
|
||||
if (!!(x !is TypealiasNullableStringIndirect<!REDUNDANT_NULLABLE!>?<!>)) else {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & TypealiasNullableStringIndirect?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & TypealiasNullableStringIndirect?")!>x<!>?.get(0)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any & TypealiasNullableStringIndirect")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any & TypealiasNullableStringIndirect")!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!>get(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ fun case_10(x: Any?) {
|
||||
if (x is ClassLevel1? && x is ClassLevel2? && x is ClassLevel3?) {
|
||||
if (x is ClassLevel4?) {
|
||||
|
||||
} else if (x is ClassLevel5? && x != null) {
|
||||
} else if (x is ClassLevel5? && <!SENSELESS_COMPARISON!>x != null<!>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.equals(null)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.propT
|
||||
@@ -224,7 +224,7 @@ fun case_10(x: Any?) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.test4()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.test5()
|
||||
}
|
||||
} else if (x is ClassLevel4? && x != null && x is ClassLevel5?) {
|
||||
} else if (x is ClassLevel4? && <!SENSELESS_COMPARISON!>x != null<!> && x is ClassLevel5?) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.equals(null)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.propT
|
||||
|
||||
@@ -1255,7 +1255,7 @@ fun case_70(x: Any?) {
|
||||
if (x is ClassLevel1? && x is ClassLevel2? && x is ClassLevel3?) {
|
||||
if (x is ClassLevel4?) {
|
||||
|
||||
} else if (x is ClassLevel5? && x != nullableNothingProperty || x != implicitNullableNothingProperty) {
|
||||
} else if (x is ClassLevel5? && <!SENSELESS_COMPARISON!>x != nullableNothingProperty<!> || <!SENSELESS_COMPARISON!>x != implicitNullableNothingProperty<!>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel3")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel3")!>x<!>.equals(null)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel3")!>x<!>.propT
|
||||
@@ -1267,7 +1267,7 @@ fun case_70(x: Any?) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel3")!>x<!>.funNullableT()
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel3")!>x<!>.funNullableAny()
|
||||
}
|
||||
} else if (x is ClassLevel4? && x !== nullableNothingProperty && x is ClassLevel5?) {
|
||||
} else if (x is ClassLevel4? && <!SENSELESS_COMPARISON!>x !== nullableNothingProperty<!> && x is ClassLevel5?) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.equals(null)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel5")!>x<!>.propT
|
||||
|
||||
@@ -59,7 +59,7 @@ fun case_7(x: Any?) {
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(x: Any?) {
|
||||
if (x as String? == null) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.String?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.String?")!>x<!><!UNSAFE_CALL!>.<!>length
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Nothing?")!>x<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Nothing?")!>x<!><!UNSAFE_CALL!>.<!>length
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user