diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index 177da58d84a..e0531573ed7 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -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 diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/SafeAccessToIfThenIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/SafeAccessToIfThenIntention.kt index 288f8bb6117..72617a4882e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/SafeAccessToIfThenIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/intentions/SafeAccessToIfThenIntention.kt @@ -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("safe.access.to.if.then", javaClass()) { - override fun isApplicableTo(element: JetSafeQualifiedExpression): Boolean = true +public class SafeAccessToIfThenIntention : JetSelfTargetingOffsetIndependentIntention(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()