Refactored SafeAccessToIfThenIntention

This commit is contained in:
Valentin Kipyatkov
2015-05-11 18:01:55 +03:00
parent 8a30d2d664
commit 776e653421
2 changed files with 6 additions and 10 deletions
@@ -220,8 +220,6 @@ unfold.call.to.if=Replace method call with 'if' expression
unfold.call.to.if.family=Replace Method Call with 'if' Expression
unfold.call.to.when=Replace method call with 'when' expression
unfold.call.to.when.family=Replace Method Call with 'when' Expression
safe.access.to.if.then=Replace safe access expression with 'if' expression
safe.access.to.if.then.family=Replace Safe Access Expression with 'if' Expression
merge.when=Merge 'when' expressions
merge.when.family=Merge 'when' Expression
transform.if.statement.with.assignments.to.expression=Transform 'if' statement with assignments to expression
@@ -25,22 +25,20 @@ import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isStableVari
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
public class SafeAccessToIfThenIntention : JetSelfTargetingOffsetIndependentIntention<JetSafeQualifiedExpression>("safe.access.to.if.then", javaClass()) {
override fun isApplicableTo(element: JetSafeQualifiedExpression): Boolean = true
public class SafeAccessToIfThenIntention : JetSelfTargetingOffsetIndependentIntention<JetSafeQualifiedExpression>(javaClass(), "Replace safe access expression with 'if' expression") {
override fun isApplicableTo(element: JetSafeQualifiedExpression): Boolean = element.getSelectorExpression() != null
override fun applyTo(element: JetSafeQualifiedExpression, editor: Editor) {
val receiver = JetPsiUtil.deparenthesize(element.getReceiverExpression())!!
val selector = JetPsiUtil.deparenthesize(element.getSelectorExpression())
val receiver = JetPsiUtil.safeDeparenthesize(element.getReceiverExpression())
val selector = element.getSelectorExpression()!!
val receiverIsStable = receiver.isStableVariable()
val receiverTemplate = if (receiver is JetBinaryExpression) "(%s)" else "%s"
val receiverAsString = receiverTemplate.format(receiver.getText())
val psiFactory = JetPsiFactory(element)
val dotQualifiedExpression = psiFactory.createExpression("${receiverAsString}.${selector!!.getText()}")
val dotQualified = psiFactory.createExpressionByPattern("$0.$1", receiver, selector)
val elseClause = if (element.isUsedAsStatement(element.analyze())) null else psiFactory.createExpression("null")
val ifExpression = element.convertToIfNotNullExpression(receiver, dotQualifiedExpression, elseClause)
val ifExpression = element.convertToIfNotNullExpression(receiver, dotQualified, elseClause)
if (!receiverIsStable) {
val valueToExtract = (ifExpression.getThen() as JetDotQualifiedExpression).getReceiverExpression()