Inspectopedia Help

Cascade 'if' can be replaced with 'when'

Reports if statements with three or more branches that can be replaced with the when expression.

Example:

fun checkIdentifier(id: String) { fun Char.isIdentifierStart() = this in 'A'..'z' fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9' if (id.isEmpty()) { print("Identifier is empty") } else if (!id.first().isIdentifierStart()) { print("Identifier should start with a letter") } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) { print("Identifier should contain only letters and numbers") } }

The quick-fix converts the if expression to when:

fun checkIdentifier(id: String) { fun Char.isIdentifierStart() = this in 'A'..'z' fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9' when { id.isEmpty() -> { print("Identifier is empty") } !id.first().isIdentifierStart() -> { print("Identifier should start with a letter") } !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> { print("Identifier should contain only letters and numbers") } } }

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Kotlin, @snapshot@

Last modified: 13 July 2023