diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfToWhenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfToWhenIntention.kt index 3cb20b10139..6ece5ba1c28 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfToWhenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/IfToWhenIntention.kt @@ -89,9 +89,11 @@ class IfToWhenIntention : SelfTargetingRangeIntention(KtIfExpres override fun applyTo(element: KtIfExpression, editor: Editor?) { val siblings = element.siblings() - val commentSaver = CommentSaver(PsiChildRange(element, siblings.last()), saveLineBreaks = true) + val elementCommentSaver = CommentSaver(element) + val fullCommentSaver = CommentSaver(PsiChildRange(element, siblings.last()), saveLineBreaks = true) val toDelete = ArrayList() + var applyFullCommentSaver = true var whenExpression = KtPsiFactory(element).buildExpression { appendFixedText("when {\n") @@ -134,8 +136,8 @@ class IfToWhenIntention : SelfTargetingRangeIntention(KtIfExpres currentIfExpression = currentElseBranch } else { - toDelete.addAll(baseIfExpressionForSyntheticBranch.siblingsUpTo(currentElseBranch)) appendElseBlock(currentElseBranch) + applyFullCommentSaver = false break } } @@ -149,7 +151,7 @@ class IfToWhenIntention : SelfTargetingRangeIntention(KtIfExpres } val result = element.replace(whenExpression) - commentSaver.restore(result) + (if (applyFullCommentSaver) fullCommentSaver else elementCommentSaver).restore(result) toDelete.forEach { it.delete() } diff --git a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowReturnComment.kt.after b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowReturnComment.kt.after index 646dfa46ea1..dae8cefe940 100644 --- a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowReturnComment.kt.after +++ b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowReturnComment.kt.after @@ -1,6 +1,6 @@ fun foo(arg: Int): Int { when (arg) { 0 -> return 0 // 1 - else -> return -1 // 2 - } + else -> return -1 + } // 2 } \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt new file mode 100644 index 00000000000..581deadd614 --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt @@ -0,0 +1,16 @@ +fun toInt(s: Number): Int { + if (s is Int) { + foo() + } + else { + return -1 + } + + // code below will be lost! + bar() + // before return + return s +} + +fun foo() {} +fun bar() {} diff --git a/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt.after b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt.after new file mode 100644 index 00000000000..93af0381c26 --- /dev/null +++ b/idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt.after @@ -0,0 +1,14 @@ +fun toInt(s: Number): Int { + when (s) { + is Int -> foo() + else -> return -1 + } + + // code below will be lost! + bar() + // before return + return s +} + +fun foo() {} +fun bar() {} diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 4c90069a121..d1a9497d448 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -1576,6 +1576,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("ifElseSwallowTail.kt") + public void testIfElseSwallowTail() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/branched/ifWhen/ifToWhen/ifElseSwallowTail.kt"); + doTest(fileName); + } + @TestMetadata("ifWithEqualityTests.kt") public void testIfWithEqualityTests() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/branched/ifWhen/ifToWhen/ifWithEqualityTests.kt");