Deprecate simplification of complex boolean constant expressions in whens and loops

^KT-39883 In Progress
This commit is contained in:
Dmitriy Novozhilov
2021-06-25 11:40:51 +03:00
committed by teamcityserver
parent 8a2e0cedf9
commit 05883afc0a
36 changed files with 641 additions and 46 deletions
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// LANGUAGE: +ProhibitSimplificationOfNonTrivialConstBooleanExpressions
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// SKIP_TXT
@@ -26,3 +27,10 @@ fun case_2(value_1: Boolean?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
// TESTCASE NUMBER: 3
fun case_3(value_1: Boolean?): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 4
fun case_4(value_1: Boolean?): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
true && false && ((true || false)) || true && !!!false && !!!true -> ""
true && false && ((true || false)) || true && !!!false -> ""
null -> ""
}
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// LANGUAGE: +ProhibitSimplificationOfNonTrivialConstBooleanExpressions
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// SKIP_TXT
@@ -44,3 +45,10 @@ fun case_5(value_1: Boolean): String {
falseValue -> ""
}
}
// TESTCASE NUMBER: 6
fun case_6(value_1: Boolean): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
true && false && ((true || false)) || true && !!!false && !!!true -> ""
true && false && ((true || false)) || true && !!!false -> ""
}
@@ -1,4 +1,5 @@
// SKIP_TXT
// LANGUAGE: -ProhibitSimplificationOfNonTrivialConstBooleanExpressions
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -18,7 +19,7 @@ fun case_1(value_1: Boolean?): String = when (value_1) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String = when (value_1) {
true && false && ((true || false)) || true && !!!false && !!!true -> ""
true && false && ((true || false)) || true && !!!false -> ""
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>true && false && ((true || false)) || true && !!!false && !!!true<!> -> ""
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>true && false && ((true || false)) || true && !!!false<!> -> ""
null -> ""
}
@@ -1,4 +1,5 @@
// SKIP_TXT
// LANGUAGE: -ProhibitSimplificationOfNonTrivialConstBooleanExpressions
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -17,6 +18,6 @@ fun case_1(value_1: Boolean): String = when (value_1) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean): String = when (value_1) {
true && false && ((true || false)) || true && !!!false && !!!true -> ""
true && false && ((true || false)) || true && !!!false -> ""
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>true && false && ((true || false)) || true && !!!false && !!!true<!> -> ""
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>true && false && ((true || false)) || true && !!!false<!> -> ""
}
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference +ProhibitSimplificationOfNonTrivialConstBooleanExpressions
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT
// FULL_JDK
@@ -66,4 +66,25 @@ sealed class SClass {
class A : SClass()
class B : SClass()
class C : SClass()
}
}
// TESTCASE NUMBER: 5
fun case5() {
val b = false
val when1: Any = when (b) {
false -> { }
!false -> { }
else -> { }
}
val when2: Any = <!NO_ELSE_IN_WHEN!>when<!> (b) {
false -> { }
!false -> { }
}
val when3: Any = <!NO_ELSE_IN_WHEN!>when<!> (b) {
false -> { }
<!DUPLICATE_LABEL_IN_WHEN!>false<!> -> { }
!false -> { }
}
}
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference -ProhibitSimplificationOfNonTrivialConstBooleanExpressions
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT
// FULL_JDK
@@ -47,18 +47,18 @@ fun case2() {
val b = false
val when1: Any = when (b) {
false -> { }
!false -> { }
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>!false<!> -> { }
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> { }
}
val when2: Any = when (b) {
false -> { }
!false -> { }
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>!false<!> -> { }
}
val when3: Any = when (b) {
false -> { }
<!DUPLICATE_LABEL_IN_WHEN!>false<!> -> { }
!false -> { }
<!NON_TRIVIAL_BOOLEAN_CONSTANT!>!false<!> -> { }
}
}
@@ -111,4 +111,4 @@ sealed class SClass {
class A : SClass()
class B : SClass()
class C : SClass()
}
}