From 50f2c13cac4dcb75cf41771fb138336924a98bdf Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 5 May 2015 22:46:53 +0300 Subject: [PATCH] EliminateWhenSubjectIntention - smaller range and code refactoring --- .../kotlin/idea/JetBundle.properties | 2 -- .../branchedTransformationUtils.kt | 25 -------------- .../EliminateWhenSubjectIntention.kt | 34 +++++++++++++++---- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index fb80e6573fa..8f66a2692c4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -258,8 +258,6 @@ merge.when=Merge 'when' expressions merge.when.family=Merge 'when' Expression introduce.when.subject=Introduce argument to 'when' introduce.when.subject.family=Introduce Argument to 'when' -eliminate.when.subject=Eliminate argument of 'when' -eliminate.when.subject.family=Eliminate Argument of 'when' transform.if.statement.with.assignments.to.expression=Transform 'if' statement with assignments to expression transform.assignment.with.if.expression.to.statement=Transform assignment with 'if' expression to statement transform.if.statement.with.assignments.to.expression.family=Transform 'if' Statement with Assignments to Expression diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/branchedTransformationUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/branchedTransformationUtils.kt index cccef8d0f4c..d0e7500879d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/branchedTransformationUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/branchedTransformationUtils.kt @@ -125,10 +125,6 @@ public fun JetWhenExpression.canIntroduceSubject(): Boolean { return getSubjectCandidate() != null } -public fun JetWhenExpression.canEliminateSubject(): Boolean { - return getSubjectExpression() is JetSimpleNameExpression -} - public fun JetWhenExpression.flatten(): JetWhenExpression { val subjectExpression = getSubjectExpression() val elseBranch = getElseExpression() @@ -193,27 +189,6 @@ public fun JetWhenExpression.introduceSubject(): JetWhenExpression { return replaced(builder.toExpression()) } -public fun JetWhenExpression.eliminateSubject(): JetWhenExpression { - val subject = getSubjectExpression()!! - - val builder = JetPsiFactory(this).WhenBuilder() - for (entry in getEntries()) { - val branchExpression = entry.getExpression() - - if (entry.isElse()) { - builder.elseEntry(branchExpression) - continue - } - for (condition in entry.getConditions()) { - builder.condition(condition.toExpressionText(subject)) - } - - builder.branchExpression(branchExpression) - } - - return replaced(builder.toExpression()) -} - public fun JetIfExpression.canTransformToWhen(): Boolean = getThen() != null public fun JetWhenExpression.canTransformToIf(): Boolean = !getEntries().isEmpty() diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/EliminateWhenSubjectIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/EliminateWhenSubjectIntention.kt index 35424125c04..3dedeca07fc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/EliminateWhenSubjectIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/EliminateWhenSubjectIntention.kt @@ -17,15 +17,37 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention -import org.jetbrains.kotlin.idea.intentions.branchedTransformations.canEliminateSubject -import org.jetbrains.kotlin.idea.intentions.branchedTransformations.eliminateSubject +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingIntention +import org.jetbrains.kotlin.idea.intentions.branchedTransformations.toExpressionText +import org.jetbrains.kotlin.psi.JetPsiFactory +import org.jetbrains.kotlin.psi.JetSimpleNameExpression import org.jetbrains.kotlin.psi.JetWhenExpression -public class EliminateWhenSubjectIntention : JetSelfTargetingOffsetIndependentIntention("eliminate.when.subject", javaClass()) { - override fun isApplicableTo(element: JetWhenExpression): Boolean = element.canEliminateSubject() +public class EliminateWhenSubjectIntention : JetSelfTargetingIntention(javaClass(), "Eliminate argument of 'when'") { + override fun isApplicableTo(element: JetWhenExpression, caretOffset: Int): Boolean { + if (element.getSubjectExpression() !is JetSimpleNameExpression) return false + val lBrace = element.getOpenBrace() ?: return false + return caretOffset <= lBrace.getTextRange().getStartOffset() + } override fun applyTo(element: JetWhenExpression, editor: Editor) { - element.eliminateSubject() + val subject = element.getSubjectExpression()!! + + val builder = JetPsiFactory(element).WhenBuilder() + for (entry in element.getEntries()) { + val branchExpression = entry.getExpression() + + if (entry.isElse()) { + builder.elseEntry(branchExpression) + continue + } + for (condition in entry.getConditions()) { + builder.condition(condition.toExpressionText(subject)) + } + + builder.branchExpression(branchExpression) + } + + element.replace(builder.toExpression()) } }