diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 011b9bfa434..a834fe9182d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -818,7 +818,7 @@ public class JetPsiUtil { } @Nullable - public static JetElement getEnclosingElementForLocalDeclaration(@Nullable JetDeclaration declaration) { + public static JetElement getEnclosingElementForLocalDeclaration(@NotNull JetDeclaration declaration) { if (declaration instanceof JetTypeParameter) { declaration = PsiTreeUtil.getParentOfType(declaration, JetNamedDeclaration.class); } diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfThenUtils.kt b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfThenUtils.kt index 92c29d7c7d0..fd875b69081 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfThenUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/branchedTransformations/IfThenUtils.kt @@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.lang.resolve.bindingContextUtil.isUsedAsStatement +import org.jetbrains.jet.lang.psi.JetProperty val NULL_PTR_EXCEPTION = "NullPointerException" val NULL_PTR_EXCEPTION_FQ = "java.lang.NullPointerException" @@ -141,6 +142,8 @@ fun JetElement.replace(expressionAsString: String): PsiElement = fun JetSimpleNameExpression.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor: Editor) { val declaration = this.getReference()?.resolve() as JetDeclaration + if (declaration !is JetProperty) return + val enclosingElement = JetPsiUtil.getEnclosingElementForLocalDeclaration(declaration) val isLocal = enclosingElement != null if (!isLocal) return 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 98d73b4f263..e2bc7aa60f5 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 @@ -80,7 +80,7 @@ public class IfThenToElvisIntention : JetSelfTargetingIntention assert(resultingExpression is JetBinaryExpression, "Unexpected expression type: ${resultingExpression?.javaClass}, expected JetBinaryExpression, element = '${element.getText()}'") - val elvis= resultingExpression as JetBinaryExpression + val elvis = resultingExpression as JetBinaryExpression elvis.inlineLeftSideIfApplicableWithPrompt(editor) } } diff --git a/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt b/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt new file mode 100644 index 00000000000..b29177f68ba --- /dev/null +++ b/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt @@ -0,0 +1,8 @@ +// "Replace 'if' expression with elvis expression" "true" + +data class IntPair(val first: Int?, val second: Int?) + +fun f(pair: IntPair): Int { + val (x, y) = pair + return if (x != null) x else 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt.after b/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt.after new file mode 100644 index 00000000000..b509cfdd8e9 --- /dev/null +++ b/idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt.after @@ -0,0 +1,8 @@ +// "Replace 'if' expression with elvis expression" "true" + +data class IntPair(val first: Int?, val second: Int?) + +fun f(pair: IntPair): Int { + val (x, y) = pair + return x ?: 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml b/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml index 17f580def34..d9a14948349 100644 --- a/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml +++ b/idea/testData/intentions/branched/ifThenToElvis/inspectionData/expected.xml @@ -79,6 +79,14 @@ If-Then foldable to '?:'. Replace 'if' expression with elvis expression + + doesNotInlineVariableInMultiDeclaration.kt + 7 + light_idea_test_case + + If-Then foldable to '?:'. + Replace 'if' expression with elvis expression + doesNotinlineValueIfUsedMoreThanOnce.kt 11 diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/intentions/IntentionTestGenerated.java index 15ffc3b45e5..2de8537ed3d 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/IntentionTestGenerated.java @@ -1228,6 +1228,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("doesNotInlineVariableInMultiDeclaration.kt") + public void testDoesNotInlineVariableInMultiDeclaration() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/branched/ifThenToElvis/doesNotInlineVariableInMultiDeclaration.kt"); + doTest(fileName); + } + @TestMetadata("doesNotinlineValueIfUsedMoreThanOnce.kt") public void testDoesNotinlineValueIfUsedMoreThanOnce() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/branched/ifThenToElvis/doesNotinlineValueIfUsedMoreThanOnce.kt");