From e6acc5601c08b64938c92c18e27f002d4bde7e82 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 18 Nov 2014 14:38:47 +0300 Subject: [PATCH] Partial body resolve: more efficient for-loop handling --- .../jet/lang/resolve/lazy/PartialBodyResolveFilter.kt | 5 +++++ idea/testData/resolve/partialBodyResolve/For.dump | 3 +++ idea/testData/resolve/partialBodyResolve/For.kt | 9 +++++++++ .../jet/resolve/PartialBodyResolveTestGenerated.java | 7 +++++++ 4 files changed, 24 insertions(+) create mode 100644 idea/testData/resolve/partialBodyResolve/For.dump create mode 100644 idea/testData/resolve/partialBodyResolve/For.kt 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 6e65282e3da..e830bd390c7 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 @@ -162,6 +162,11 @@ class PartialBodyResolveFilter(elementToResolve: JetElement, private val body: J } } + override fun visitForExpression(expression: JetForExpression) { + // analyze only the loop-range expression, do not enter the loop body + expression.getLoopRange()?.accept(this) + } + //TODO: when }) diff --git a/idea/testData/resolve/partialBodyResolve/For.dump b/idea/testData/resolve/partialBodyResolve/For.dump new file mode 100644 index 00000000000..00e04717322 --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/For.dump @@ -0,0 +1,3 @@ +Resolve target: value-parameter val p: kotlin.Any? smart-casted to kotlin.String +Skipped statements: +print(p1!!) diff --git a/idea/testData/resolve/partialBodyResolve/For.kt b/idea/testData/resolve/partialBodyResolve/For.kt new file mode 100644 index 00000000000..3081f321b11 --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/For.kt @@ -0,0 +1,9 @@ +fun x(s: String): Collection{} + +fun foo(p: Any?, p1: Any?) { + for (e in x(p as String)) { + print(p1!!) + } + + p.size +} \ 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 53e26fb1f6a..05c67cb8214 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; @@ -53,6 +54,12 @@ public class PartialBodyResolveTestGenerated extends AbstractPartialBodyResolveT doTest(fileName); } + @TestMetadata("For.kt") + public void testFor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/For.kt"); + doTest(fileName); + } + @TestMetadata("IfBranchesAutoCasts.kt") public void testIfBranchesAutoCasts() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/IfBranchesAutoCasts.kt");