FIR: don't emit SENSELESS_NULL_IN_WHEN when value is always null
This case (value is always null) contradicts the error message which says "Expression under 'when' is never equal to null".
This commit is contained in:
+3
-2
@@ -131,8 +131,9 @@ object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() {
|
||||
}
|
||||
}
|
||||
// We only report `SENSELESS_NULL_IN_WHEN` if `lType = type` because `lType` is the type of the when subject. This diagnostic is
|
||||
// only intended for cases where the branch condition contains a null.
|
||||
if (expression.source?.elementType != KtNodeTypes.BINARY_EXPRESSION && type === lType) {
|
||||
// only intended for cases where the branch condition contains a null. Also, the error message for SENSELESS_NULL_IN_WHEN
|
||||
// says the value is *never* equal to null, so we can't report it if the value is *always* equal to null.
|
||||
if (expression.source?.elementType != KtNodeTypes.BINARY_EXPRESSION && type === lType && !compareResult) {
|
||||
reporter.reportOn(expression.source, FirErrors.SENSELESS_NULL_IN_WHEN, context)
|
||||
} else {
|
||||
reporter.reportOn(expression.source, FirErrors.SENSELESS_COMPARISON, expression, compareResult, context)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// exhaustive
|
||||
fun test1(n: Nothing) = when (n) { }
|
||||
fun test2(n: Nothing?) = when (n) {
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> {}
|
||||
<!SENSELESS_COMPARISON!>null<!> -> {}
|
||||
}
|
||||
|
||||
// not exhaustive
|
||||
|
||||
Vendored
+1
-1
@@ -218,7 +218,7 @@ fun case_23(value_1: Nothing) {
|
||||
// TESTCASE NUMBER: 24
|
||||
fun case_24(value_1: Nothing?) = when (value_1) {
|
||||
<!SENSELESS_COMPARISON!>throw Exception()<!>, <!SENSELESS_COMPARISON!><!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> ""<!> -> ""
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!>, <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> "", throw throw throw Exception() -> ""
|
||||
<!SENSELESS_COMPARISON!>null<!>, <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> <!RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY!>return<!> "", throw throw throw Exception() -> ""
|
||||
else -> ""
|
||||
}
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ fun case_17(x: Boolean?, y: Boolean?) {
|
||||
else -> if (true) if (true) if (true) if (true) if (true) x!! else x!! else x!! else x!! else x!! else x!!
|
||||
}
|
||||
<!SENSELESS_COMPARISON!>false<!> -> x!!
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> if (true) if (true) if (true) if (true) if (true) x!! else x!! else x!! else x!! else x!! else x!!
|
||||
<!SENSELESS_COMPARISON!>null<!> -> if (true) if (true) if (true) if (true) if (true) x!! else x!! else x!! else x!! else x!! else x!!
|
||||
} else x!! else x!! else x!! else x!! else x!!
|
||||
}
|
||||
break@loop
|
||||
|
||||
@@ -154,7 +154,7 @@ fun case_10(x: Any): String {
|
||||
fun case_11(x: Any?): String? {
|
||||
if (x is Nothing?) {
|
||||
return when(x) {
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> null
|
||||
<!SENSELESS_COMPARISON!>null<!> -> null
|
||||
}
|
||||
}
|
||||
return ""
|
||||
@@ -168,7 +168,7 @@ fun case_11(x: Any?): String? {
|
||||
fun case_12(x: Any?): String? {
|
||||
if (x == null) {
|
||||
return when(x) {
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> null
|
||||
<!SENSELESS_COMPARISON!>null<!> -> null
|
||||
}
|
||||
}
|
||||
return ""
|
||||
@@ -182,7 +182,7 @@ fun case_12(x: Any?): String? {
|
||||
fun case_13(x: Any?): String? {
|
||||
if (x === null) {
|
||||
return when(x) {
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> null
|
||||
<!SENSELESS_COMPARISON!>null<!> -> null
|
||||
}
|
||||
}
|
||||
return ""
|
||||
@@ -196,7 +196,7 @@ fun case_13(x: Any?): String? {
|
||||
fun case_14(x: Any?): String? {
|
||||
x as Nothing?
|
||||
return when(x) {
|
||||
<!SENSELESS_NULL_IN_WHEN!>null<!> -> null
|
||||
<!SENSELESS_COMPARISON!>null<!> -> null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user