[FIR] Hack-in indirectly nested locals resolution

This commit is contained in:
Simon Ogorodnik
2021-07-28 20:49:22 +03:00
committed by Mikhail Glukhikh
parent 7422571c72
commit 8e890eba3e
7 changed files with 63 additions and 1 deletions
@@ -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");
@@ -0,0 +1,27 @@
FILE: anonymousInAnonymous.kt
public final fun foo(): R|kotlin/Unit| {
lval base: R|<anonymous>| = object : R|kotlin/Any| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
public final fun bar(): R|<anonymous>| {
^bar object : R|kotlin/Any| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
public final fun buz(): R|kotlin/String| {
^buz this@R|/<anonymous>|.R|/<anonymous>.foobar|
}
}
}
public final val foobar: R|kotlin/String| = String()
public get(): R|kotlin/String|
}
}
@@ -0,0 +1,8 @@
fun foo() {
val base = object {
fun bar() = object {
fun buz() = foobar
}
val foobar = ""
}
}
@@ -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 {
@@ -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 {
@@ -63,8 +63,12 @@ fun <F : FirClassLikeDeclaration> 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 =
@@ -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 {