From 8e2d381b85ee3006737133d80803a60e7574b4a4 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sun, 10 May 2015 10:54:20 +0300 Subject: [PATCH] Code simplifications --- .../intentions/FoldIfToAssignmentIntention.kt | 34 +++++-------------- .../FoldIfToReturnAsymmetricallyIntention.kt | 29 ++++++---------- .../intentions/FoldIfToReturnIntention.kt | 17 ++++------ 3 files changed, 24 insertions(+), 56 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 d4f280d5afe..7af10adba73 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 @@ -19,43 +19,25 @@ 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.BranchedFoldingUtils -import org.jetbrains.kotlin.psi -import org.jetbrains.kotlin.psi.JetBinaryExpression -import org.jetbrains.kotlin.psi.JetIfExpression -import org.jetbrains.kotlin.psi.JetSimpleNameExpression -import org.jetbrains.kotlin.psi.createExpressionByPattern +import org.jetbrains.kotlin.psi.* public class FoldIfToAssignmentIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'if' expression with assignment") { override fun isApplicableTo(element: JetIfExpression): Boolean { - val thenBranch = element.getThen() - val elseBranch = element.getElse() - - val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(thenBranch) - val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(elseBranch) - - if (thenAssignment == null || elseAssignment == null) return false - + val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()) ?: return false + val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()) ?: return false return BranchedFoldingUtils.checkAssignmentsMatch(thenAssignment, elseAssignment) } override fun applyTo(element: JetIfExpression, editor: Editor) { var thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()!!)!! + val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()!!)!! val op = thenAssignment.getOperationReference().getText() - val lhs = thenAssignment.getLeft() as JetSimpleNameExpression + val leftText = thenAssignment.getLeft()!!.getText() - val assignment = psi.JetPsiFactory(element).createExpressionByPattern("$0 $1 $2", lhs, op, element) - val newIfExpression = (assignment as JetBinaryExpression).getRight() as JetIfExpression + thenAssignment.replace(thenAssignment.getRight()!!) + elseAssignment.replace(elseAssignment.getRight()!!) - thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(newIfExpression.getThen()!!)!! - val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(newIfExpression.getElse()!!)!! - - val thenRhs = thenAssignment.getRight()!! - val elseRhs = elseAssignment.getRight()!! - - thenAssignment.replace(thenRhs) - elseAssignment.replace(elseRhs) - - element.replace(assignment) + element.replace(JetPsiFactory(element).createExpressionByPattern("$0 $1 $2", leftText, op, element)) } } \ No newline at end of file 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 61fb1684807..3f650e88bc9 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 @@ -19,10 +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.BranchedFoldingUtils -import org.jetbrains.kotlin.psi -import org.jetbrains.kotlin.psi.JetExpression -import org.jetbrains.kotlin.psi.JetIfExpression -import org.jetbrains.kotlin.psi.JetPsiUtil +import org.jetbrains.kotlin.psi.* public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace 'if' expression with return") { override fun isApplicableTo(element: JetIfExpression): Boolean { @@ -31,30 +28,24 @@ public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndep } val nextElement = JetPsiUtil.skipTrailingWhitespacesAndComments(element) - return nextElement is JetExpression && BranchedFoldingUtils.getFoldableBranchedReturn(nextElement) != null + return nextElement is JetReturnExpression && nextElement.getReturnedExpression() != null } override fun applyTo(element: JetIfExpression, editor: Editor) { val condition = element.getCondition()!! - val thenRoot = element.getThen()!! - val elseRoot = JetPsiUtil.skipTrailingWhitespacesAndComments(element) as JetExpression + val thenBranch = element.getThen()!! + val elseBranch = JetPsiUtil.skipTrailingWhitespacesAndComments(element) as JetReturnExpression - val psiFactory = psi.JetPsiFactory(element) - var newIfExpression = psiFactory.createIf(condition, thenRoot, elseRoot) - val newReturnExpression = psiFactory.createReturn(newIfExpression) - - newIfExpression = newReturnExpression.getReturnedExpression() as JetIfExpression + val psiFactory = JetPsiFactory(element) + var newIfExpression = psiFactory.createIf(condition, thenBranch, elseBranch) val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getThen()!!)!! val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getElse()!!)!! - val thenExpr = thenReturn.getReturnedExpression()!! - val elseExpr = elseReturn.getReturnedExpression()!! + thenReturn.replace(thenReturn.getReturnedExpression()!!) + elseReturn.replace(elseReturn.getReturnedExpression()!!) - thenReturn.replace(thenExpr) - elseReturn.replace(elseExpr) - - elseRoot.delete() - element.replace(newReturnExpression) + element.replace(psiFactory.createReturn(newIfExpression)) + elseBranch.delete() } } \ No newline at end of file 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 fdb496491d5..dcd251e7fe0 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 @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentInt 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 { @@ -29,18 +30,12 @@ public class FoldIfToReturnIntention : JetSelfTargetingOffsetIndependentIntentio } override fun applyTo(element: JetIfExpression, editor: Editor) { - val newReturnExpression = JetPsiFactory(element).createReturn(element) - val newIfExpression = newReturnExpression.getReturnedExpression() as JetIfExpression + val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(element.getThen()!!)!! + val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(element.getElse()!!)!! - val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getThen()!!)!! - val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getElse()!!)!! + thenReturn.replace(thenReturn.getReturnedExpression()!!) + elseReturn.replace(elseReturn.getReturnedExpression()!!) - val thenExpr = thenReturn.getReturnedExpression()!! - val elseExpr = elseReturn.getReturnedExpression()!! - - thenReturn.replace(thenExpr) - elseReturn.replace(elseExpr) - - element.replace(newReturnExpression) + element.replace(JetPsiFactory(element).createReturn(element)) } } \ No newline at end of file