From ea168b0f6bd4eb3b528f721da9ff879a2732271a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 11 May 2015 16:48:39 +0300 Subject: [PATCH] Smaller ranges for intentions --- .../intentions/FoldIfToAssignmentIntention.kt | 18 +++++++++++------- .../FoldIfToReturnAsymmetricallyIntention.kt | 14 ++++++++------ .../intentions/FoldIfToReturnIntention.kt | 12 +++++++----- .../FoldWhenToAssignmentIntention.kt | 17 +++++++++-------- .../intentions/FoldWhenToReturnIntention.kt | 15 ++++++++------- .../UnfoldAssignmentToIfIntention.kt | 14 ++++++++------ .../UnfoldAssignmentToWhenIntention.kt | 16 +++++++++------- .../intentions/UnfoldPropertyToIfIntention.kt | 12 +++++++----- .../UnfoldPropertyToWhenIntention.kt | 14 ++++++++------ .../intentions/UnfoldReturnToIfIntention.kt | 10 ++++++---- .../intentions/UnfoldReturnToWhenIntention.kt | 12 +++++++----- .../intentions/WhenToIfIntention.kt | 14 +++++++------- 12 files changed, 95 insertions(+), 73 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToAssignmentIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToAssignmentIntention.kt index 7af10adba73..342bb517555 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToAssignmentIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToAssignmentIntention.kt @@ -17,15 +17,19 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.JetIfExpression +import org.jetbrains.kotlin.psi.JetPsiFactory +import org.jetbrains.kotlin.psi.createExpressionByPattern -public class FoldIfToAssignmentIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'if' expression with assignment") { - override fun isApplicableTo(element: JetIfExpression): Boolean { - val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()) ?: return false - val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()) ?: return false - return BranchedFoldingUtils.checkAssignmentsMatch(thenAssignment, elseAssignment) +public class FoldIfToAssignmentIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'if' expression with assignment") { + override fun applicabilityRange(element: JetIfExpression): TextRange? { + val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()) ?: return null + val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()) ?: return null + if (!BranchedFoldingUtils.checkAssignmentsMatch(thenAssignment, elseAssignment)) return null + return element.getIfKeyword().getTextRange() } override fun applyTo(element: JetIfExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnAsymmetricallyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnAsymmetricallyIntention.kt index 85f342f6501..e696b5d6291 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnAsymmetricallyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnAsymmetricallyIntention.kt @@ -17,18 +17,20 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.psi.* -public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'if' expression with return") { - override fun isApplicableTo(element: JetIfExpression): Boolean { +public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'if' expression with return") { + override fun applicabilityRange(element: JetIfExpression): TextRange? { if (BranchedFoldingUtils.getFoldableBranchedReturn(element.getThen()) == null || element.getElse() != null) { - return false + return null } - val nextElement = JetPsiUtil.skipTrailingWhitespacesAndComments(element) - return nextElement is JetReturnExpression && nextElement.getReturnedExpression() != null + val nextElement = JetPsiUtil.skipTrailingWhitespacesAndComments(element) as? JetReturnExpression + if (nextElement?.getReturnedExpression() == null) return null + return element.getIfKeyword().getTextRange() } override fun applyTo(element: JetIfExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnIntention.kt index f59d134c0d8..d9594faa1f0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldIfToReturnIntention.kt @@ -17,16 +17,18 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.psi.JetIfExpression import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.createExpressionByPattern -public class FoldIfToReturnIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'if' expression with return") { - override fun isApplicableTo(element: JetIfExpression): Boolean { - return BranchedFoldingUtils.getFoldableBranchedReturn(element.getThen()) != null - && BranchedFoldingUtils.getFoldableBranchedReturn(element.getElse()) != null +public class FoldIfToReturnIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'if' expression with return") { + override fun applicabilityRange(element: JetIfExpression): TextRange? { + if (BranchedFoldingUtils.getFoldableBranchedReturn(element.getThen()) == null) return null + if (BranchedFoldingUtils.getFoldableBranchedReturn(element.getElse()) == null) return null + return element.getIfKeyword().getTextRange() } override fun applyTo(element: JetIfExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToAssignmentIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToAssignmentIntention.kt index 976b4453e97..d2bae4d1a16 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToAssignmentIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToAssignmentIntention.kt @@ -17,22 +17,23 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.psi.* import java.util.ArrayList -public class FoldWhenToAssignmentIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'when' expression with assignment") { - override fun isApplicableTo(element: JetWhenExpression): Boolean { - if (!JetPsiUtil.checkWhenExpressionHasSingleElse(element)) return false +public class FoldWhenToAssignmentIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'when' expression with assignment") { + override fun applicabilityRange(element: JetWhenExpression): TextRange? { + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(element)) return null val entries = element.getEntries() - if (entries.isEmpty()) return false + if (entries.isEmpty()) return null val assignments = ArrayList() for (entry in entries) { - val assignment = BranchedFoldingUtils.getFoldableBranchedAssignment(entry.getExpression()) ?: return false + val assignment = BranchedFoldingUtils.getFoldableBranchedAssignment(entry.getExpression()) ?: return null assignments.add(assignment) } @@ -40,10 +41,10 @@ public class FoldWhenToAssignmentIntention : JetSelfTargetingOffsetIndependentIn val firstAssignment = assignments.get(0) for (assignment in assignments) { - if (!BranchedFoldingUtils.checkAssignmentsMatch(assignment, firstAssignment)) return false + if (!BranchedFoldingUtils.checkAssignmentsMatch(assignment, firstAssignment)) return null } - return true + return element.getWhenKeywordElement().getTextRange() } override fun applyTo(element: JetWhenExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToReturnIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToReturnIntention.kt index c9be98ae3f1..7932e7df820 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToReturnIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/FoldWhenToReturnIntention.kt @@ -17,23 +17,24 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.psi.* -public class FoldWhenToReturnIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'when' expression with return") { - override fun isApplicableTo(element: JetWhenExpression): Boolean { - if (!JetPsiUtil.checkWhenExpressionHasSingleElse(element)) return false +public class FoldWhenToReturnIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'when' expression with return") { + override fun applicabilityRange(element: JetWhenExpression): TextRange? { + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(element)) return null val entries = element.getEntries() - if (entries.isEmpty()) return false + if (entries.isEmpty()) return null for (entry in entries) { - if (BranchedFoldingUtils.getFoldableBranchedReturn(entry.getExpression()) == null) return false + if (BranchedFoldingUtils.getFoldableBranchedReturn(entry.getExpression()) == null) return null } - return true + return element.getWhenKeywordElement().getTextRange() } override fun applyTo(element: JetWhenExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToIfIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToIfIntention.kt index 63c1a934474..50f516bac3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToIfIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToIfIntention.kt @@ -17,17 +17,19 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.JetBinaryExpression import org.jetbrains.kotlin.psi.JetIfExpression -public class UnfoldAssignmentToIfIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace assignment with 'if' expression") { - override fun isApplicableTo(element: JetBinaryExpression): Boolean { - if (element.getOperationToken() !in JetTokens.ALL_ASSIGNMENTS) return false - if (element.getLeft() == null) return false - return element.getRight() is JetIfExpression +public class UnfoldAssignmentToIfIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace assignment with 'if' expression") { + override fun applicabilityRange(element: JetBinaryExpression): TextRange? { + if (element.getOperationToken() !in JetTokens.ALL_ASSIGNMENTS) return null + if (element.getLeft() == null) return null + val right = element.getRight() as? JetIfExpression ?: return null + return TextRange(element.getTextRange().getStartOffset(), right.getIfKeyword().getTextRange().getEndOffset()) } override fun applyTo(element: JetBinaryExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToWhenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToWhenIntention.kt index 1372bacfc6b..06525b46ded 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToWhenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldAssignmentToWhenIntention.kt @@ -17,19 +17,21 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.JetBinaryExpression import org.jetbrains.kotlin.psi.JetPsiUtil import org.jetbrains.kotlin.psi.JetWhenExpression -public class UnfoldAssignmentToWhenIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace assignment with 'when' expression" ) { - override fun isApplicableTo(element: JetBinaryExpression): Boolean { - if (element.getOperationToken() !in JetTokens.ALL_ASSIGNMENTS) return false - if (element.getLeft() == null) return false - val right = element.getRight() - return right is JetWhenExpression && JetPsiUtil.checkWhenExpressionHasSingleElse(right) +public class UnfoldAssignmentToWhenIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace assignment with 'when' expression" ) { + override fun applicabilityRange(element: JetBinaryExpression): TextRange? { + if (element.getOperationToken() !in JetTokens.ALL_ASSIGNMENTS) return null + if (element.getLeft() == null) return null + val right = element.getRight() as? JetWhenExpression ?: return null + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(right)) return null + return TextRange(element.getTextRange().getStartOffset(), right.getWhenKeywordElement().getTextRange().getEndOffset()) } override fun applyTo(element: JetBinaryExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToIfIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToIfIntention.kt index 729e9d9a123..37275daf4d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToIfIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToIfIntention.kt @@ -17,16 +17,18 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.idea.intentions.declarations.DeclarationUtils import org.jetbrains.kotlin.psi.JetIfExpression import org.jetbrains.kotlin.psi.JetProperty -public class UnfoldPropertyToIfIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace property initializer with 'if' expression") { - override fun isApplicableTo(element: JetProperty): Boolean { - if (!element.isLocal()) return false - return element.getInitializer() is JetIfExpression +public class UnfoldPropertyToIfIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace property initializer with 'if' expression") { + override fun applicabilityRange(element: JetProperty): TextRange? { + if (!element.isLocal()) return null + val initializer = element.getInitializer() as? JetIfExpression ?: return null + return TextRange(element.getTextRange().getStartOffset(), initializer.getIfKeyword().getTextRange().getEndOffset()) } override fun applyTo(element: JetProperty, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToWhenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToWhenIntention.kt index f5e04b60337..2d199e43e6b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToWhenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldPropertyToWhenIntention.kt @@ -17,18 +17,20 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.idea.intentions.declarations.DeclarationUtils import org.jetbrains.kotlin.psi.JetProperty import org.jetbrains.kotlin.psi.JetPsiUtil import org.jetbrains.kotlin.psi.JetWhenExpression -public class UnfoldPropertyToWhenIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace property initializer with 'when' expression") { - override fun isApplicableTo(element: JetProperty): Boolean { - if (!element.isLocal()) return false - val initializer = element.getInitializer() - return initializer is JetWhenExpression && JetPsiUtil.checkWhenExpressionHasSingleElse(initializer) +public class UnfoldPropertyToWhenIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace property initializer with 'when' expression") { + override fun applicabilityRange(element: JetProperty): TextRange? { + if (!element.isLocal()) return null + val initializer = element.getInitializer() as? JetWhenExpression ?: return null + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(initializer)) return null + return TextRange(element.getTextRange().getStartOffset(), initializer.getWhenKeywordElement().getTextRange().getEndOffset()) } override fun applyTo(element: JetProperty, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToIfIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToIfIntention.kt index 8cfd5c4677f..1a2370c98c4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToIfIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToIfIntention.kt @@ -17,7 +17,8 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.psi.JetIfExpression import org.jetbrains.kotlin.psi.JetPsiFactory @@ -25,9 +26,10 @@ import org.jetbrains.kotlin.psi.JetReturnExpression import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.psi.psiUtil.copied -public class UnfoldReturnToIfIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace return with 'if' expression") { - override fun isApplicableTo(element: JetReturnExpression): Boolean { - return element.getReturnedExpression() is JetIfExpression +public class UnfoldReturnToIfIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace return with 'if' expression") { + override fun applicabilityRange(element: JetReturnExpression): TextRange? { + val ifExpression = element.getReturnedExpression() as? JetIfExpression ?: return null + return TextRange(element.getTextRange().getStartOffset(), ifExpression.getIfKeyword().getTextRange().getEndOffset()) } override fun applyTo(element: JetReturnExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToWhenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToWhenIntention.kt index 81046a95933..e12837e6bee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToWhenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/UnfoldReturnToWhenIntention.kt @@ -17,15 +17,17 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.copied -public class UnfoldReturnToWhenIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace return with 'when' expression") { - override fun isApplicableTo(element: JetReturnExpression): Boolean { - val expr = element.getReturnedExpression() - return expr is JetWhenExpression && JetPsiUtil.checkWhenExpressionHasSingleElse(expr) +public class UnfoldReturnToWhenIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace return with 'when' expression") { + override fun applicabilityRange(element: JetReturnExpression): TextRange? { + val whenExpr = element.getReturnedExpression() as? JetWhenExpression ?: return null + if (!JetPsiUtil.checkWhenExpressionHasSingleElse(whenExpr)) return null + return TextRange(element.getTextRange().getStartOffset(), whenExpr.getWhenKeywordElement().getTextRange().getEndOffset()) } override fun applyTo(element: JetReturnExpression, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/WhenToIfIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/WhenToIfIntention.kt index f18fa347f98..2fec00a25bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/WhenToIfIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/WhenToIfIntention.kt @@ -17,18 +17,18 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingIntention +import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.toExpression import org.jetbrains.kotlin.psi.* -public class WhenToIfIntention : JetSelfTargetingIntention(javaClass(), "Replace 'when' with 'if'") { - override fun isApplicableTo(element: JetWhenExpression, caretOffset: Int): Boolean { +public class WhenToIfIntention : JetSelfTargetingRangeIntention(javaClass(), "Replace 'when' with 'if'") { + override fun applicabilityRange(element: JetWhenExpression): TextRange? { val entries = element.getEntries() - if (entries.isEmpty()) return false + if (entries.isEmpty()) return null val lastEntry = entries.last() - if (entries.any { it != lastEntry && it.isElse() }) return false - - return element.getWhenKeywordElement().getTextRange().containsOffset(caretOffset) + if (entries.any { it != lastEntry && it.isElse() }) return null + return element.getWhenKeywordElement().getTextRange() } override fun applyTo(element: JetWhenExpression, editor: Editor) {