diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index 05c783eca71..44a7dd48851 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -2580,6 +2580,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/localClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @TestMetadata("anonymousInAnonymous.kt") + public void testAnonymousInAnonymous() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt"); + } + @TestMetadata("implicitInAnonymous.kt") public void testImplicitInAnonymous() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInAnonymous.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.fir.txt b/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.fir.txt new file mode 100644 index 00000000000..8ef5fe7782e --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.fir.txt @@ -0,0 +1,27 @@ +FILE: anonymousInAnonymous.kt + public final fun foo(): R|kotlin/Unit| { + lval base: R|| = object : R|kotlin/Any| { + private constructor(): R|| { + super() + } + + public final fun bar(): R|| { + ^bar object : R|kotlin/Any| { + private constructor(): R|| { + super() + } + + public final fun buz(): R|kotlin/String| { + ^buz this@R|/|.R|/.foobar| + } + + } + + } + + public final val foobar: R|kotlin/String| = String() + public get(): R|kotlin/String| + + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt b/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt new file mode 100644 index 00000000000..0dfa831ab6e --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt @@ -0,0 +1,8 @@ +fun foo() { + val base = object { + fun bar() = object { + fun buz() = foobar + } + val foobar = "" + } +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 51210f244c1..bd470b9b4bb 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -2925,6 +2925,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/localClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("anonymousInAnonymous.kt") + public void testAnonymousInAnonymous() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt"); + } + @Test @TestMetadata("implicitInAnonymous.kt") public void testImplicitInAnonymous() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 92d100b2696..d6e10bcac35 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -2925,6 +2925,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/localClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("anonymousInAnonymous.kt") + public void testAnonymousInAnonymous() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt"); + } + @Test @TestMetadata("implicitInAnonymous.kt") public void testImplicitInAnonymous() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt index 32e45e13fe6..5c31d6569e5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt @@ -63,8 +63,12 @@ fun F.runContractAndBodiesResolutionForLocalClass( localClassesNavigationInfo: LocalClassesNavigationInfo, firTowerDataContextCollector: FirTowerDataContextCollector? = null ): F { + val prevDesignation = + (components.context.returnTypeCalculator as? ReturnTypeCalculatorWithJump)?.designationMapForLocalClasses ?: emptyMap() + val (designationMap, targetedClasses) = localClassesNavigationInfo.run { - designationMap to parentForClass.keys + this@runContractAndBodiesResolutionForLocalClass + (prevDesignation + designationMap) to + (parentForClass.keys + this@runContractAndBodiesResolutionForLocalClass) + components.context.targetedLocalClasses } val implicitBodyResolveComputationSession = diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 3e4382f96b6..cf951400bf0 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -2925,6 +2925,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/localClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("anonymousInAnonymous.kt") + public void testAnonymousInAnonymous() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/localClasses/anonymousInAnonymous.kt"); + } + @Test @TestMetadata("implicitInAnonymous.kt") public void testImplicitInAnonymous() throws Exception {