Code simplifications

This commit is contained in:
Valentin Kipyatkov
2015-05-10 10:54:20 +03:00
parent 089267deee
commit 8e2d381b85
3 changed files with 24 additions and 56 deletions
@@ -19,43 +19,25 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils
import org.jetbrains.kotlin.psi 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
public class FoldIfToAssignmentIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with assignment") { public class FoldIfToAssignmentIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with assignment") {
override fun isApplicableTo(element: JetIfExpression): Boolean { override fun isApplicableTo(element: JetIfExpression): Boolean {
val thenBranch = element.getThen() val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()) ?: return false
val elseBranch = element.getElse() val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()) ?: return false
val thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(thenBranch)
val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(elseBranch)
if (thenAssignment == null || elseAssignment == null) return false
return BranchedFoldingUtils.checkAssignmentsMatch(thenAssignment, elseAssignment) return BranchedFoldingUtils.checkAssignmentsMatch(thenAssignment, elseAssignment)
} }
override fun applyTo(element: JetIfExpression, editor: Editor) { override fun applyTo(element: JetIfExpression, editor: Editor) {
var thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()!!)!! var thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getThen()!!)!!
val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(element.getElse()!!)!!
val op = thenAssignment.getOperationReference().getText() 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) thenAssignment.replace(thenAssignment.getRight()!!)
val newIfExpression = (assignment as JetBinaryExpression).getRight() as JetIfExpression elseAssignment.replace(elseAssignment.getRight()!!)
thenAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(newIfExpression.getThen()!!)!! element.replace(JetPsiFactory(element).createExpressionByPattern("$0 $1 $2", leftText, op, element))
val elseAssignment = BranchedFoldingUtils.getFoldableBranchedAssignment(newIfExpression.getElse()!!)!!
val thenRhs = thenAssignment.getRight()!!
val elseRhs = elseAssignment.getRight()!!
thenAssignment.replace(thenRhs)
elseAssignment.replace(elseRhs)
element.replace(assignment)
} }
} }
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentIntention
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils
import org.jetbrains.kotlin.psi import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.JetExpression
import org.jetbrains.kotlin.psi.JetIfExpression
import org.jetbrains.kotlin.psi.JetPsiUtil
public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with return") { public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with return") {
override fun isApplicableTo(element: JetIfExpression): Boolean { override fun isApplicableTo(element: JetIfExpression): Boolean {
@@ -31,30 +28,24 @@ public class FoldIfToReturnAsymmetricallyIntention : JetSelfTargetingOffsetIndep
} }
val nextElement = JetPsiUtil.skipTrailingWhitespacesAndComments(element) 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) { override fun applyTo(element: JetIfExpression, editor: Editor) {
val condition = element.getCondition()!! val condition = element.getCondition()!!
val thenRoot = element.getThen()!! val thenBranch = element.getThen()!!
val elseRoot = JetPsiUtil.skipTrailingWhitespacesAndComments(element) as JetExpression val elseBranch = JetPsiUtil.skipTrailingWhitespacesAndComments(element) as JetReturnExpression
val psiFactory = psi.JetPsiFactory(element) val psiFactory = JetPsiFactory(element)
var newIfExpression = psiFactory.createIf(condition, thenRoot, elseRoot) var newIfExpression = psiFactory.createIf(condition, thenBranch, elseBranch)
val newReturnExpression = psiFactory.createReturn(newIfExpression)
newIfExpression = newReturnExpression.getReturnedExpression() as JetIfExpression
val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getThen()!!)!! val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getThen()!!)!!
val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getElse()!!)!! val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getElse()!!)!!
val thenExpr = thenReturn.getReturnedExpression()!! thenReturn.replace(thenReturn.getReturnedExpression()!!)
val elseExpr = elseReturn.getReturnedExpression()!! elseReturn.replace(elseReturn.getReturnedExpression()!!)
thenReturn.replace(thenExpr) element.replace(psiFactory.createReturn(newIfExpression))
elseReturn.replace(elseExpr) elseBranch.delete()
elseRoot.delete()
element.replace(newReturnExpression)
} }
} }
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingOffsetIndependentInt
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils import org.jetbrains.kotlin.idea.intentions.branchedTransformations.BranchedFoldingUtils
import org.jetbrains.kotlin.psi.JetIfExpression import org.jetbrains.kotlin.psi.JetIfExpression
import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetPsiFactory
import org.jetbrains.kotlin.psi.createExpressionByPattern
public class FoldIfToReturnIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with return") { public class FoldIfToReturnIntention : JetSelfTargetingOffsetIndependentIntention<JetIfExpression>(javaClass(), "Replace 'if' expression with return") {
override fun isApplicableTo(element: JetIfExpression): Boolean { override fun isApplicableTo(element: JetIfExpression): Boolean {
@@ -29,18 +30,12 @@ public class FoldIfToReturnIntention : JetSelfTargetingOffsetIndependentIntentio
} }
override fun applyTo(element: JetIfExpression, editor: Editor) { override fun applyTo(element: JetIfExpression, editor: Editor) {
val newReturnExpression = JetPsiFactory(element).createReturn(element) val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(element.getThen()!!)!!
val newIfExpression = newReturnExpression.getReturnedExpression() as JetIfExpression val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(element.getElse()!!)!!
val thenReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getThen()!!)!! thenReturn.replace(thenReturn.getReturnedExpression()!!)
val elseReturn = BranchedFoldingUtils.getFoldableBranchedReturn(newIfExpression.getElse()!!)!! elseReturn.replace(elseReturn.getReturnedExpression()!!)
val thenExpr = thenReturn.getReturnedExpression()!! element.replace(JetPsiFactory(element).createReturn(element))
val elseExpr = elseReturn.getReturnedExpression()!!
thenReturn.replace(thenExpr)
elseReturn.replace(elseExpr)
element.replace(newReturnExpression)
} }
} }