Reports cascading if expressions where the last else branch is part of a dot-qualified or binary expression.
This can lead to unexpected behavior because only the innermost if-else expression becomes the receiver or left operand of
the outer expression, which may not align with the intended logic.
Example:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
fun main() {
printNumberSign(1) // Nothing is printed because the receiver of 'let' is only the inner 'if-else' expression
}
After applying the first quick-fix (converting to when):
fun printNumberSign(num: Int) {
when {
num > 0 -> {
"positive"
}
num < 0 -> {
"negative"
}
else -> {
"zero"
}
}.let { print(it) }
}
fun main() {
printNumberSign(1) // Prints "positive"
}
Alternatively, the second quick-fix adds clarifying braces to preserve the original semantics while making the nested else
branch explicit:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else {
if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
}
fun main() {
printNumberSign(1) // Nothing is printed, but the code is clearer
}