diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt index 7c9ac25d722..850eab466c3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt @@ -133,7 +133,7 @@ fun KtExpression.negate(): KtExpression { } fun KtExpression.resultingWhens(): List = when (this) { - is KtWhenExpression -> listOf(this) + is KtWhenExpression -> listOf(this) + entries.map { it.expression?.resultingWhens() ?: listOf() }.flatten() is KtIfExpression -> (then?.resultingWhens() ?: listOf()) + (`else`?.resultingWhens() ?: listOf()) is KtBinaryExpression -> (left?.resultingWhens() ?: listOf()) + (right?.resultingWhens() ?: listOf()) is KtUnaryExpression -> this.baseExpression?.resultingWhens() ?: listOf() diff --git a/idea/testData/intentions/convertToExpressionBody/whenWhenNonExhaustive.kt b/idea/testData/intentions/convertToExpressionBody/whenWhenNonExhaustive.kt new file mode 100644 index 00000000000..4b7257c9300 --- /dev/null +++ b/idea/testData/intentions/convertToExpressionBody/whenWhenNonExhaustive.kt @@ -0,0 +1,18 @@ +// IS_APPLICABLE: false +enum class AccessMode { READ, WRITE, RW } +fun whenExpr(mode: Boolean, access: AccessMode) { + when (access) { + AccessMode.READ -> when (mode) { + true -> println("read") + false -> println("noread") + } + AccessMode.WRITE -> when (mode) { + true -> println("write") + } + AccessMode.RW -> when (mode) { + true -> println("both") + else -> println("no both") + } + } +} +fun println(s: String) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index bd3acbec144..fbc0b079e2c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4960,6 +4960,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("whenWhenNonExhaustive.kt") + public void testWhenWhenNonExhaustive() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToExpressionBody/whenWhenNonExhaustive.kt"); + doTest(fileName); + } + @TestMetadata("while.kt") public void testWhile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToExpressionBody/while.kt");