// !LANGUAGE: +NewInference // !DIAGNOSTICS: -UNUSED_EXPRESSION // SKIP_TXT /* * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE) * * SECTIONS: dfa * NUMBER: 2 * DESCRIPTION: Raw data flow analysis test * HELPERS: objects, enumClasses, properties, functions */ // FILE: other_package.kt package otherpackage // TESTCASE NUMBER: 8, 16 class Case8_16__1 {} // FILE: main.kt import otherpackage.* // TESTCASE NUMBER: 8, 16 class Case8_16__2 { val x: otherpackage.Case8_16__1? init { x = otherpackage.Case8_16__1() } } // TESTCASE NUMBER: 1 fun case_1(x: Any?) { if (x != null || false) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 2 fun case_2(a: DeepObject.A.B.C.D.E.F.G.J?) = if (false || a != null == true == false == false == false == true == false == true == false == false == true == true || false) { a.x a.equals(null) a.propT a.propAny a.propNullableT a.propNullableAny a.funT() a.funAny() a.funNullableT() a.funNullableAny() } else -1 /* * TESTCASE NUMBER: 3 * UNEXPECTED BEHAVIOUR * ISSUES: KT-28328 */ fun case_3(b: Boolean) { val x = { if (b) object { val a = 10 } else null } val y = if (b) x else null if (false || false || false || false || y !== null) { val z = .?")!>y() case_3..?)?")!>y.equals(null) case_3..?)?")!>y.propT case_3..?)?")!>y.propAny case_3..?)?")!>y.propNullableT case_3..?)?")!>y.propNullableAny case_3..?)?")!>y.funT() case_3..?)?")!>y.funAny() case_3..?)?")!>y.funNullableT() case_3..?)?")!>y.funNullableAny() if (z != null || false) { . & case_3..?"), DEBUG_INFO_SMARTCAST!>z.a } } } // TESTCASE NUMBER: 4 fun case_4(a: ((Float) -> Int?)?, b: Float?) { if (a != null == true && b != null == true || false || false || false || false || false || false || false || false || false) { val x = kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a(b) kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.equals(null) kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.propT kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.propAny kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.propNullableT kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.propNullableAny kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.funT() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.funAny() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.funNullableT() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.funNullableAny() if (false || x != null == true) { x } } } // TESTCASE NUMBER: 5 fun case_5(b: Boolean) { val a = if (b) { object { val B5 = if (b) { object { val C5 = if (b) { object { val D5 = if (b) { object { val x: Number? = 10 } } else null } } else null } } else null } } else null if (a != null && a.B5 != null && a.B5.C5 != null && a.B5.C5.D5 != null && a.B5.C5.D5.x != null && b || false) { a.B5.C5.D5.x a.B5.C5.D5.x.equals(null) a.B5.C5.D5.x.propT a.B5.C5.D5.x.propAny a.B5.C5.D5.x.propNullableT a.B5.C5.D5.x.propNullableAny a.B5.C5.D5.x.funT() a.B5.C5.D5.x.funAny() a.B5.C5.D5.x.funNullableT() a.B5.C5.D5.x.funNullableAny() } } // TESTCASE NUMBER: 6 fun case_6(z: Boolean?) { if (false || EnumClassWithNullableProperty.B.prop_1 != null && z != null && z) { EnumClassWithNullableProperty.B.prop_1 EnumClassWithNullableProperty.B.prop_1.equals(null) EnumClassWithNullableProperty.B.prop_1.propT EnumClassWithNullableProperty.B.prop_1.propAny EnumClassWithNullableProperty.B.prop_1.propNullableT EnumClassWithNullableProperty.B.prop_1.propNullableAny EnumClassWithNullableProperty.B.prop_1.funT() EnumClassWithNullableProperty.B.prop_1.funAny() EnumClassWithNullableProperty.B.prop_1.funNullableT() EnumClassWithNullableProperty.B.prop_1.funNullableAny() } } // TESTCASE NUMBER: 7 fun case_7(a: DeepObject.A.B.C.D.E.F.G.J?) { val g = false if (a != null && g) { a a.equals(null) a.propT a.propAny a.propNullableT a.propNullableAny a.funT() a.funAny() a.funNullableT() a.funNullableAny() } } /* * TESTCASE NUMBER: 8 * UNEXPECTED BEHAVIOUR * ISSUES: KT-28329 */ fun case_8(b: Boolean, c: Boolean?) { val a = Case8_16__2() if (a.x !== null && false) { if (false || false || false || false || a.x != null || false || false || false) { if (a.x !== null && true) { if (a.x != null && b) { if (a.x != null && b && !b) { if (a.x != null && c != null && !c) { if (a.x !== null && c) { if (a.x != null && b && b && b && b && b && b && b && b && b && b && b) { if (a.x != null && !b && !b && !b && !b && !b && !b && !b && !b && !b) { if (a.x !== null && null == null) { if (a.x != null && null!!) { if (a.x != null) { if (a.x != null) { if (a.x !== null) { if (a.x != null) { if (a.x !== null) { a.x a.x.equals(null) a.x.propT a.x.propAny a.x.propNullableT a.x.propNullableAny a.x.funT() a.x.funAny() a.x.funNullableT() a.x.funNullableAny() } } } } } } } } } } } } } } } } } // TESTCASE NUMBER: 9 fun case_9(x: Any?) { if (x == null || false || false || false || false || false || false) { } else { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 10 fun case_10(a: DeepObject.A.B.C.D.E.F.G.J?) = if (a == null == true == false == false == false == true == false == true == false == false == true == true && true) { -1 } else { a.x a.equals(null) a.propT a.propAny a.propNullableT a.propNullableAny a.funT() a.funAny() a.funNullableT() a.funNullableAny() } /* * TESTCASE NUMBER: 11 * UNEXPECTED BEHAVIOUR * ISSUES: KT-28328 */ fun case_11(b: Boolean) { val x = { if (b) object { val a = 10 } else null } val y = if (b) x else null if (y === null && true) else { val z = .?")!>y() case_11..?)?")!>y.equals(null) case_11..?)?")!>y.propT case_11..?)?")!>y.propAny case_11..?)?")!>y.propNullableT case_11..?)?")!>y.propNullableAny case_11..?)?")!>y.funT() case_11..?)?")!>y.funAny() case_11..?)?")!>y.funNullableT() case_11..?)?")!>y.funNullableAny() if (z != null || b) { } else { .? & kotlin.Nothing?")!>z } } } // TESTCASE NUMBER: 12 fun case_12(a: ((Float) -> Int?)?, b: Float?, c: Boolean?) { if (true && a == null == true || b == null == true) { } else { val x = kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a(b) kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.equals(null) kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.propT kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.propAny kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.propNullableT kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.propNullableAny kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.funT() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?"), DEBUG_INFO_SMARTCAST!>a.funAny() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.funNullableT() kotlin.Int?)? & (kotlin.Float) -> kotlin.Int?")!>a.funNullableAny() b.equals(null) b.propT b.propAny b.propNullableT b.propNullableAny b.funT() b.funAny() b.funNullableT() b.funNullableAny() if (x == null == true || (c != null && !c)) { } else { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } } // TESTCASE NUMBER: 13 fun case_13(b: Boolean, c: Boolean, d: Boolean) { val a = if (b) { object { val B19 = if (b) { object { val C19 = if (b) { object { val D19 = if (b) { object { val x: Number? = 10 } } else null } } else null } } else null } } else null if ((a == null || a.B19 == null || a.B19.C19 == null || a.B19.C19.D19 == null || a.B19.C19.D19.x == null || b || c || !d) && true) { } else { a.B19.C19.D19.x a.B19.C19.D19.x.equals(null) a.B19.C19.D19.x.propT a.B19.C19.D19.x.propAny a.B19.C19.D19.x.propNullableT a.B19.C19.D19.x.propNullableAny a.B19.C19.D19.x.funT() a.B19.C19.D19.x.funAny() a.B19.C19.D19.x.funNullableT() a.B19.C19.D19.x.funNullableAny() } } /* * TESTCASE NUMBER: 14 * UNEXPECTED BEHAVIOUR * ISSUES: KT-28329 */ fun case_14(z: Boolean?) { if (true && true && true && true && EnumClassWithNullableProperty.B.prop_1 != null || z != null || z!! && true && true) { } else { EnumClassWithNullableProperty.B.prop_1 EnumClassWithNullableProperty.B.prop_1.equals(null) EnumClassWithNullableProperty.B.prop_1.propT EnumClassWithNullableProperty.B.prop_1.propAny EnumClassWithNullableProperty.B.prop_1.propNullableT EnumClassWithNullableProperty.B.prop_1.propNullableAny EnumClassWithNullableProperty.B.prop_1.funT() EnumClassWithNullableProperty.B.prop_1.funAny() EnumClassWithNullableProperty.B.prop_1.funNullableT() EnumClassWithNullableProperty.B.prop_1.funNullableAny() } } // TESTCASE NUMBER: 15 fun case_15(a: DeepObject.A.B.C.D.E.F.G.J?) { val g = false if (true && a != null || g || !g || true || !true) { } else { a } } // TESTCASE NUMBER: 16 fun case_16(b: Boolean, c: Boolean?) { val a = Case8_16__2() if (a.x != null && false && false && false && false && false && false) { if ( a.x == null || false) { } else { if ( a.x === null && true) { } else { if (a.x == null || !b) { } else { if (a.x == null || b || !b) { } else { if (a.x == null || c == null || !c) { } else { if (a.x === null || c) { } else { if (a.x == null || b || b || b || b || b || b || b || b || b || b || b) { } else { if (a.x == null || !b || !b || !b || !b || !b || !b || !b || !b || !b) { } else { if (a.x === null || null == null) { } else { if (a.x == null || null!!) { } else { if (a.x == null) { } else { if (a.x == null) { } else { if (a.x === null) { } else { if (a.x == null) { } else { if (a.x === null) { } else { a.x a.x.equals(null) a.x.propT a.x.propAny a.x.propNullableT a.x.propNullableAny a.x.funT() a.x.funAny() a.x.funNullableT() a.x.funNullableAny() } } } } } } } } } } } } } } } } } // TESTCASE NUMBER: 17 fun case_17(a: Int?, b: Int = if (a != null) a else 0) { a b b.equals(null) b.propT b.propAny b.propNullableT b.propNullableAny b.funT() b.funAny() b.funNullableT() b.funNullableAny() } // TESTCASE NUMBER: 18 fun case_18(a: Int?, b: Int = if (false || a != null || false) a else 0) { a b b.equals(null) b.propT b.propAny b.propNullableT b.propNullableAny b.funT() b.funAny() b.funNullableT() b.funNullableAny() }