From 4c275cb4eaa2633f7055fe3ee714e95ca1f9116b Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 11 May 2015 16:21:38 +0300 Subject: [PATCH] Code refactoring --- .../BranchedUnfoldingUtils.kt | 99 +++---------------- .../intentions/UnfoldPropertyToIfIntention.kt | 4 +- .../UnfoldPropertyToWhenIntention.kt | 4 +- .../intentions/UnfoldReturnToIfIntention.kt | 14 ++- .../intentions/UnfoldReturnToWhenIntention.kt | 15 ++- 5 files changed, 44 insertions(+), 92 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedUnfoldingUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedUnfoldingUtils.kt index fd9c3dd2f9c..153c25bde8b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedUnfoldingUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/BranchedUnfoldingUtils.kt @@ -17,118 +17,47 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.intentions.declarations.DeclarationUtils import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.copied public object BranchedUnfoldingUtils { - - private fun getOutermostLastBlockElement(expression: JetExpression?): JetExpression { + public fun getOutermostLastBlockElement(expression: JetExpression?): JetExpression { return JetPsiUtil.getOutermostLastBlockElement(expression, JetPsiUtil.ANY_JET_ELEMENT) as JetExpression } - public val UNFOLD_WITHOUT_CHECK: String = "Expression must be checked before unfolding" - - private fun assertNotNull(value: Any?) { - assert(value != null) { UNFOLD_WITHOUT_CHECK } - } - public fun unfoldAssignmentToIf(assignment: JetBinaryExpression, editor: Editor) { val op = assignment.getOperationReference().getText() - val lhs = assignment.getLeft() + val left = assignment.getLeft()!! val ifExpression = assignment.getRight() as JetIfExpression - assertNotNull(ifExpression) - - //noinspection ConstantConditions - val newIfExpression = ifExpression.copy() as JetIfExpression + val newIfExpression = ifExpression.copied() val thenExpr = getOutermostLastBlockElement(newIfExpression.getThen()) val elseExpr = getOutermostLastBlockElement(newIfExpression.getElse()) - assertNotNull(thenExpr) - assertNotNull(elseExpr) - - //noinspection ConstantConditions val psiFactory = JetPsiFactory(assignment) - thenExpr.replace(psiFactory.createExpressionByPattern("$0 $1 $2", lhs, op, thenExpr)) - elseExpr.replace(psiFactory.createExpressionByPattern("$0 $1 $2", lhs, op, elseExpr)) + thenExpr.replace(psiFactory.createExpressionByPattern("$0 $1 $2", left, op, thenExpr)) + elseExpr.replace(psiFactory.createExpressionByPattern("$0 $1 $2", left, op, elseExpr)) - val resultElement = assignment.replace(newIfExpression) + val resultIf = assignment.replace(newIfExpression) - editor.getCaretModel().moveToOffset(resultElement.getTextOffset()) + editor.getCaretModel().moveToOffset(resultIf.getTextOffset()) } public fun unfoldAssignmentToWhen(assignment: JetBinaryExpression, editor: Editor) { val op = assignment.getOperationReference().getText() - val lhs = assignment.getLeft() + val left = assignment.getLeft()!! val whenExpression = assignment.getRight() as JetWhenExpression - assertNotNull(whenExpression) - - //noinspection ConstantConditions - val newWhenExpression = whenExpression.copy() as JetWhenExpression + val newWhenExpression = whenExpression.copied() for (entry in newWhenExpression.getEntries()) { - val currExpr = getOutermostLastBlockElement(entry.getExpression()) - - assertNotNull(currExpr) - - //noinspection ConstantConditions - currExpr.replace(JetPsiFactory(assignment).createExpressionByPattern("$0 $1 $2", lhs, op, currExpr)) + val expr = getOutermostLastBlockElement(entry.getExpression()) + expr.replace(JetPsiFactory(assignment).createExpressionByPattern("$0 $1 $2", left, op, expr)) } - val resultElement = assignment.replace(newWhenExpression) + val resultWhen = assignment.replace(newWhenExpression) - editor.getCaretModel().moveToOffset(resultElement.getTextOffset()) - } - - public fun unfoldPropertyToIf(property: JetProperty, editor: Editor) { - val assignment = DeclarationUtils.splitPropertyDeclaration(property) - unfoldAssignmentToIf(assignment, editor) - } - - public fun unfoldPropertyToWhen(property: JetProperty, editor: Editor) { - val assignment = DeclarationUtils.splitPropertyDeclaration(property) - unfoldAssignmentToWhen(assignment, editor) - } - - public fun unfoldReturnToIf(returnExpression: JetReturnExpression) { - val ifExpression = returnExpression.getReturnedExpression() as JetIfExpression - - assertNotNull(ifExpression) - - //noinspection ConstantConditions - val newIfExpression = ifExpression.copy() as JetIfExpression - - val thenExpr = getOutermostLastBlockElement(newIfExpression.getThen()) - val elseExpr = getOutermostLastBlockElement(newIfExpression.getElse()) - - assertNotNull(thenExpr) - assertNotNull(elseExpr) - - val psiFactory = JetPsiFactory(returnExpression) - thenExpr.replace(psiFactory.createExpressionByPattern("return $0", thenExpr)) - elseExpr.replace(psiFactory.createExpressionByPattern("return $0", elseExpr)) - - returnExpression.replace(newIfExpression) - } - - public fun unfoldReturnToWhen(returnExpression: JetReturnExpression) { - val whenExpression = returnExpression.getReturnedExpression() as JetWhenExpression - - assertNotNull(whenExpression) - - //noinspection ConstantConditions - val newWhenExpression = whenExpression.copy() as JetWhenExpression - - for (entry in newWhenExpression.getEntries()) { - val currExpr = getOutermostLastBlockElement(entry.getExpression()) - - assertNotNull(currExpr) - - currExpr.replace(JetPsiFactory(returnExpression).createExpressionByPattern("return $0", currExpr)) - } - - returnExpression.replace(newWhenExpression) + editor.getCaretModel().moveToOffset(resultWhen.getTextOffset()) } } 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 465e72d3064..729e9d9a123 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 @@ -19,6 +19,7 @@ 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.BranchedUnfoldingUtils +import org.jetbrains.kotlin.idea.intentions.declarations.DeclarationUtils import org.jetbrains.kotlin.psi.JetIfExpression import org.jetbrains.kotlin.psi.JetProperty @@ -29,6 +30,7 @@ public class UnfoldPropertyToIfIntention : JetSelfTargetingOffsetIndependentInte } override fun applyTo(element: JetProperty, editor: Editor) { - BranchedUnfoldingUtils.unfoldPropertyToIf(element, editor) + val assignment = DeclarationUtils.splitPropertyDeclaration(element) + BranchedUnfoldingUtils.unfoldAssignmentToIf(assignment, editor) } } \ No newline at end of file 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 1f829fff507..f5e04b60337 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 @@ -19,6 +19,7 @@ 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.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 @@ -31,6 +32,7 @@ public class UnfoldPropertyToWhenIntention : JetSelfTargetingOffsetIndependentIn } override fun applyTo(element: JetProperty, editor: Editor) { - BranchedUnfoldingUtils.unfoldPropertyToWhen(element, editor) + val assignment = DeclarationUtils.splitPropertyDeclaration(element) + BranchedUnfoldingUtils.unfoldAssignmentToWhen(assignment, editor) } } \ No newline at end of file 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 5c39a8f3508..8cfd5c4677f 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 @@ -20,7 +20,10 @@ import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedUnfoldingUtils import org.jetbrains.kotlin.psi.JetIfExpression +import org.jetbrains.kotlin.psi.JetPsiFactory 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 { @@ -28,6 +31,15 @@ public class UnfoldReturnToIfIntention : JetSelfTargetingOffsetIndependentIntent } override fun applyTo(element: JetReturnExpression, editor: Editor) { - BranchedUnfoldingUtils.unfoldReturnToIf(element) + val ifExpression = element.getReturnedExpression() as JetIfExpression + val newIfExpression = ifExpression.copied() + val thenExpr = BranchedUnfoldingUtils.getOutermostLastBlockElement(newIfExpression.getThen()) + val elseExpr = BranchedUnfoldingUtils.getOutermostLastBlockElement(newIfExpression.getElse()) + + val psiFactory = JetPsiFactory(element) + thenExpr.replace(psiFactory.createExpressionByPattern("return $0", thenExpr)) + elseExpr.replace(psiFactory.createExpressionByPattern("return $0", elseExpr)) + + element.replace(newIfExpression) } } \ No newline at end of file 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 8f0a2e5574a..81046a95933 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 @@ -19,9 +19,8 @@ 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.BranchedUnfoldingUtils -import org.jetbrains.kotlin.psi.JetPsiUtil -import org.jetbrains.kotlin.psi.JetReturnExpression -import org.jetbrains.kotlin.psi.JetWhenExpression +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 { @@ -30,6 +29,14 @@ public class UnfoldReturnToWhenIntention : JetSelfTargetingOffsetIndependentInte } override fun applyTo(element: JetReturnExpression, editor: Editor) { - BranchedUnfoldingUtils.unfoldReturnToWhen(element) + val whenExpression = element.getReturnedExpression() as JetWhenExpression + val newWhenExpression = whenExpression.copied() + + for (entry in newWhenExpression.getEntries()) { + val currExpr = BranchedUnfoldingUtils.getOutermostLastBlockElement(entry.getExpression()) + currExpr.replace(JetPsiFactory(element).createExpressionByPattern("return $0", currExpr)) + } + + element.replace(newWhenExpression) } }