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
}