diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt index 2d510e90bb4..98d73b4f263 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/intentions/IfThenToElvisIntention.kt @@ -31,6 +31,8 @@ import org.jetbrains.jet.plugin.intentions.branchedTransformations.inlineLeftSid import org.jetbrains.jet.plugin.intentions.branchedTransformations.isStableVariable import org.jetbrains.jet.plugin.intentions.branchedTransformations.throwsNullPointerExceptionWithNoArguments import org.jetbrains.jet.lang.psi.JetThrowExpression +import org.jetbrains.jet.lang.psi.JetPsiUtil +import org.jetbrains.jet.lang.psi.JetExpression public class IfThenToElvisIntention : JetSelfTargetingIntention("if.then.to.elvis", javaClass()) { @@ -73,7 +75,12 @@ public class IfThenToElvisIntention : JetSelfTargetingIntention } val resultingExprString = "${left.getText()} ?: ${right.getText()}" - val elvis = element.replace(resultingExprString) as JetBinaryExpression + val resultingExpression = JetPsiUtil.deparenthesize(element.replace(resultingExprString) as? JetExpression) + + assert(resultingExpression is JetBinaryExpression, + "Unexpected expression type: ${resultingExpression?.javaClass}, expected JetBinaryExpression, element = '${element.getText()}'") + + val elvis= resultingExpression as JetBinaryExpression elvis.inlineLeftSideIfApplicableWithPrompt(editor) } } diff --git a/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt b/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt new file mode 100644 index 00000000000..f8366f67701 --- /dev/null +++ b/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt @@ -0,0 +1,9 @@ +fun maybeFoo(): String? { + return "foo" +} + +fun main(args: Array) { + val foo = maybeFoo() + val bar = "bar" + val x = "baz" + if (foo == null) bar else foo +} diff --git a/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt.after b/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt.after new file mode 100644 index 00000000000..d5399c524fc --- /dev/null +++ b/idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt.after @@ -0,0 +1,8 @@ +fun maybeFoo(): String? { + return "foo" +} + +fun main(args: Array) { + val bar = "bar" + val x = "baz" + (maybeFoo() ?: bar) +} diff --git a/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml b/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml index d514b25da11..17f580def34 100644 --- a/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml +++ b/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml @@ -47,6 +47,14 @@ If-Then foldable to '?:'. Replace 'if' expression with elvis expression + + ifAsPartOfExpression.kt + 8 + light_idea_test_case + + If-Then foldable to '?:'. + Replace 'if' expression with elvis expression + ifAndElseNotInBlocks.kt 8 diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationTestGenerated.java index 360dcdb3cb6..e8a86042fed 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationTestGenerated.java @@ -413,6 +413,11 @@ public class CodeTransformationTestGenerated extends AbstractCodeTransformationT doTestIfThenToElvis("idea/testData/intentions/branched/ifThenToElvis/ifAsExpression.kt"); } + @TestMetadata("ifAsPartOfExpression.kt") + public void testIfAsPartOfExpression() throws Exception { + doTestIfThenToElvis("idea/testData/intentions/branched/ifThenToElvis/ifAsPartOfExpression.kt"); + } + @TestMetadata("lhsEqualsNull.kt") public void testLhsEqualsNull() throws Exception { doTestIfThenToElvis("idea/testData/intentions/branched/ifThenToElvis/lhsEqualsNull.kt");