diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/MergeWhenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/MergeWhenIntention.kt index a3c5cedc99a..fc9a809dc86 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/MergeWhenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/MergeWhenIntention.kt @@ -21,6 +21,7 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention +import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isStableVariable import org.jetbrains.kotlin.idea.util.psi.patternMatching.matches import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange import org.jetbrains.kotlin.psi.* @@ -30,7 +31,10 @@ public class MergeWhenIntention : JetSelfTargetingRangeIntention()) as? JetWhenExpression ?: return null - if (!element.getSubjectExpression().matches(next.getSubjectExpression())) return null + val subject1 = element.getSubjectExpression() + val subject2 = next.getSubjectExpression() + if (!subject1.matches(subject2)) return null + if (subject1 != null && !subject1.isStableVariable()) return null val entries1 = element.getEntries() val entries2 = next.getEntries() diff --git a/idea/testData/intentions/branched/when/merge/mergeWithVarSubject.kt b/idea/testData/intentions/branched/when/merge/mergeWithVarSubject.kt new file mode 100644 index 00000000000..a13894f4267 --- /dev/null +++ b/idea/testData/intentions/branched/when/merge/mergeWithVarSubject.kt @@ -0,0 +1,16 @@ +// IS_APPLICABLE: false +fun doSomething(a: T) {} + +fun test() { + var n = 0 + + when (n) { + 1 -> n = 2 + 2 -> n = 1 + } + + when (n) { + 1 -> doSomething("A") + 2 -> doSomething("B") + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 96aafcd1e98..042a291eca4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -1921,6 +1921,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("mergeWithVarSubject.kt") + public void testMergeWithVarSubject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/branched/when/merge/mergeWithVarSubject.kt"); + doTest(fileName); + } + @TestMetadata("mergeWithoutSubject.kt") public void testMergeWithoutSubject() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/branched/when/merge/mergeWithoutSubject.kt");