From 1f771a24076cae7e0d278543ef09c294d11bdf0e Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 30 Jul 2019 11:23:49 +0300 Subject: [PATCH] FIR resolution API: fix handling of expressions inside secondary ctors --- .../jetbrains/kotlin/idea/fir/FirResolutionApi.kt | 2 +- idea/testData/fir/lazyResolve/inInit/inInit.test | 3 +++ idea/testData/fir/lazyResolve/inInit/main.kt | 7 +++++++ idea/testData/fir/lazyResolve/inInit/main.txt | 14 ++++++++++++++ idea/testData/fir/lazyResolve/inInit/results.txt | 1 + .../fir/lazyResolve/inSecondary/inSecondary.test | 3 +++ idea/testData/fir/lazyResolve/inSecondary/main.kt | 7 +++++++ .../testData/fir/lazyResolve/inSecondary/main.txt | 11 +++++++++++ .../fir/lazyResolve/inSecondary/results.txt | 1 + idea/testData/fir/lazyResolve/secondary/main.kt | 7 +++++++ idea/testData/fir/lazyResolve/secondary/main.txt | 10 ++++++++++ .../fir/lazyResolve/secondary/results.txt | 1 + .../fir/lazyResolve/secondary/secondary.test | 3 +++ .../idea/fir/FirLazyResolveTestGenerated.java | 15 +++++++++++++++ 14 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 idea/testData/fir/lazyResolve/inInit/inInit.test create mode 100644 idea/testData/fir/lazyResolve/inInit/main.kt create mode 100644 idea/testData/fir/lazyResolve/inInit/main.txt create mode 100644 idea/testData/fir/lazyResolve/inInit/results.txt create mode 100644 idea/testData/fir/lazyResolve/inSecondary/inSecondary.test create mode 100644 idea/testData/fir/lazyResolve/inSecondary/main.kt create mode 100644 idea/testData/fir/lazyResolve/inSecondary/main.txt create mode 100644 idea/testData/fir/lazyResolve/inSecondary/results.txt create mode 100644 idea/testData/fir/lazyResolve/secondary/main.kt create mode 100644 idea/testData/fir/lazyResolve/secondary/main.txt create mode 100644 idea/testData/fir/lazyResolve/secondary/results.txt create mode 100644 idea/testData/fir/lazyResolve/secondary/secondary.test diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt index f147740b342..77ab107c324 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt @@ -51,7 +51,7 @@ private fun FirFile.findCallableMember( ProcessorAction.NEXT } } - if (callableMember is KtNamedFunction) { + if (callableMember is KtNamedFunction || callableMember is KtConstructor<*>) { memberScope.processFunctionsByName(declName, processor) } else { memberScope.processPropertiesByName(declName, processor) diff --git a/idea/testData/fir/lazyResolve/inInit/inInit.test b/idea/testData/fir/lazyResolve/inInit/inInit.test new file mode 100644 index 00000000000..3099545c162 --- /dev/null +++ b/idea/testData/fir/lazyResolve/inInit/inInit.test @@ -0,0 +1,3 @@ +{ + "mainFile": "main.kt" +} \ No newline at end of file diff --git a/idea/testData/fir/lazyResolve/inInit/main.kt b/idea/testData/fir/lazyResolve/inInit/main.kt new file mode 100644 index 00000000000..48ff631165f --- /dev/null +++ b/idea/testData/fir/lazyResolve/inInit/main.kt @@ -0,0 +1,7 @@ +class Foo { + val x: Int + + init { + x = 42 + } +} \ No newline at end of file diff --git a/idea/testData/fir/lazyResolve/inInit/main.txt b/idea/testData/fir/lazyResolve/inInit/main.txt new file mode 100644 index 00000000000..a3a52af2eeb --- /dev/null +++ b/idea/testData/fir/lazyResolve/inInit/main.txt @@ -0,0 +1,14 @@ +FILE: main.kt + public final class Foo : R|kotlin/Any| { + public constructor(): R|Foo| { + super() + } + + public final val x: R|kotlin/Int| + public get(): R|kotlin/Int| + + init { + R|/Foo.x| = Int(42) + } + + } diff --git a/idea/testData/fir/lazyResolve/inInit/results.txt b/idea/testData/fir/lazyResolve/inInit/results.txt new file mode 100644 index 00000000000..06e6c466423 --- /dev/null +++ b/idea/testData/fir/lazyResolve/inInit/results.txt @@ -0,0 +1 @@ +R|/Foo.x| = Int(42) diff --git a/idea/testData/fir/lazyResolve/inSecondary/inSecondary.test b/idea/testData/fir/lazyResolve/inSecondary/inSecondary.test new file mode 100644 index 00000000000..3099545c162 --- /dev/null +++ b/idea/testData/fir/lazyResolve/inSecondary/inSecondary.test @@ -0,0 +1,3 @@ +{ + "mainFile": "main.kt" +} \ No newline at end of file diff --git a/idea/testData/fir/lazyResolve/inSecondary/main.kt b/idea/testData/fir/lazyResolve/inSecondary/main.kt new file mode 100644 index 00000000000..3ec42d705a6 --- /dev/null +++ b/idea/testData/fir/lazyResolve/inSecondary/main.kt @@ -0,0 +1,7 @@ +class Foo { + val x: Int + + constructor() { + x = 42 + } +} \ No newline at end of file diff --git a/idea/testData/fir/lazyResolve/inSecondary/main.txt b/idea/testData/fir/lazyResolve/inSecondary/main.txt new file mode 100644 index 00000000000..9d24fbe632d --- /dev/null +++ b/idea/testData/fir/lazyResolve/inSecondary/main.txt @@ -0,0 +1,11 @@ +FILE: main.kt + public final class Foo : R|kotlin/Any| { + public final val x: R|kotlin/Int| + public get(): R|kotlin/Int| + + public constructor(): R|Foo| { + super() + R|/Foo.x| = Int(42) + } + + } diff --git a/idea/testData/fir/lazyResolve/inSecondary/results.txt b/idea/testData/fir/lazyResolve/inSecondary/results.txt new file mode 100644 index 00000000000..06e6c466423 --- /dev/null +++ b/idea/testData/fir/lazyResolve/inSecondary/results.txt @@ -0,0 +1 @@ +R|/Foo.x| = Int(42) diff --git a/idea/testData/fir/lazyResolve/secondary/main.kt b/idea/testData/fir/lazyResolve/secondary/main.kt new file mode 100644 index 00000000000..2aed8c5a24b --- /dev/null +++ b/idea/testData/fir/lazyResolve/secondary/main.kt @@ -0,0 +1,7 @@ +class My { + constructor() +} + +fun foo(): My { + return My() +} \ No newline at end of file diff --git a/idea/testData/fir/lazyResolve/secondary/main.txt b/idea/testData/fir/lazyResolve/secondary/main.txt new file mode 100644 index 00000000000..c00885ba768 --- /dev/null +++ b/idea/testData/fir/lazyResolve/secondary/main.txt @@ -0,0 +1,10 @@ +FILE: main.kt + public final class My : R|kotlin/Any| { + public constructor(): R|My| { + super() + } + + } + public final fun foo(): R|My| { + ^foo R|/My.My|() + } diff --git a/idea/testData/fir/lazyResolve/secondary/results.txt b/idea/testData/fir/lazyResolve/secondary/results.txt new file mode 100644 index 00000000000..25e8539e01f --- /dev/null +++ b/idea/testData/fir/lazyResolve/secondary/results.txt @@ -0,0 +1 @@ +R|/My.My|() diff --git a/idea/testData/fir/lazyResolve/secondary/secondary.test b/idea/testData/fir/lazyResolve/secondary/secondary.test new file mode 100644 index 00000000000..3099545c162 --- /dev/null +++ b/idea/testData/fir/lazyResolve/secondary/secondary.test @@ -0,0 +1,3 @@ +{ + "mainFile": "main.kt" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java index 0f5719c9d9d..ad5451975de 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java @@ -29,11 +29,26 @@ public class FirLazyResolveTestGenerated extends AbstractFirLazyResolveTest { KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/fir/lazyResolve"), Pattern.compile("^(.+)\\.test$"), TargetBackend.ANY); } + @TestMetadata("inInit/inInit.test") + public void testInInit_InInit() throws Exception { + runTest("idea/testData/fir/lazyResolve/inInit/inInit.test"); + } + @TestMetadata("inLocal/inLocal.test") public void testInLocal_InLocal() throws Exception { runTest("idea/testData/fir/lazyResolve/inLocal/inLocal.test"); } + @TestMetadata("inSecondary/inSecondary.test") + public void testInSecondary_InSecondary() throws Exception { + runTest("idea/testData/fir/lazyResolve/inSecondary/inSecondary.test"); + } + + @TestMetadata("secondary/secondary.test") + public void testSecondary_Secondary() throws Exception { + runTest("idea/testData/fir/lazyResolve/secondary/secondary.test"); + } + @TestMetadata("simple/simple.test") public void testSimple_Simple() throws Exception { runTest("idea/testData/fir/lazyResolve/simple/simple.test");