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 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<JetIfExpression>(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))
}
}
@@ -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<JetIfExpression>(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()
}
}
@@ -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<JetIfExpression>(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))
}
}