diff --git a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt index 398c7137c90..ca65eabc16f 100644 --- a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt +++ b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt @@ -274,6 +274,16 @@ class PartialBodyResolveFilter(elementToResolve: JetElement, private val body: J result.add(expression) } } + + override fun visitBinaryExpression(expression: JetBinaryExpression) { + if (expression.getOperationToken() == JetTokens.ELVIS) { + // do not search exits after "?:" + expression.getLeft()?.accept(this) + } + else { + super.visitBinaryExpression(expression) + } + } }) return result } diff --git a/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.dump b/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.dump new file mode 100644 index 00000000000..cf4bb52c28f --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.dump @@ -0,0 +1,3 @@ +Resolve target: val x: kotlin.Any? +Skipped statements: +if (x == null) { print(1) val v = f() ?: return } diff --git a/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.kt b/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.kt new file mode 100644 index 00000000000..858d2da21b5 --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.kt @@ -0,0 +1,13 @@ +fun foo() { + for (i in 1..10) { + val x = take() + if (x == null) { + print(1) + val v = f() ?: return + } + x.hashCode() + } +} + +fun take(): Any? = null +fun f(): String? = null \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java index 2d149e1fa27..f420d6c3b9f 100644 --- a/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.resolve; import com.intellij.testFramework.TestDataPath; import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; import org.junit.runner.RunWith; @@ -149,6 +150,12 @@ public class PartialBodyResolveTestGenerated extends AbstractPartialBodyResolveT doTest(fileName); } + @TestMetadata("IfNullElvisReturn.kt") + public void testIfNullElvisReturn() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/IfNullElvisReturn.kt"); + doTest(fileName); + } + @TestMetadata("IfNullForWithReturn.kt") public void testIfNullForWithReturn() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/IfNullForWithReturn.kt");