diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonymousObjectInInvalidPosition.txt b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonymousObjectInInvalidPosition.txt index 196afdfab24..b0bcf78a16c 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonymousObjectInInvalidPosition.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonymousObjectInInvalidPosition.txt @@ -121,8 +121,8 @@ FILE: [ResolvedTo(IMPORTS)] anonymousObjectInInvalidPosition.kt } private [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): - public abstract [ResolvedTo(TYPES)] interface A<[ResolvedTo(TYPES)] T> : R|kotlin/Any| { - public abstract [ResolvedTo(TYPES)] fun x(): R|kotlin/Unit| + public abstract [ResolvedTo(STATUS)] interface A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| { + public abstract [ResolvedTo(STATUS)] fun x(): R|kotlin/Unit| } @@ -140,8 +140,8 @@ FILE: [ResolvedTo(IMPORTS)] anonymousObjectInInvalidPosition.kt } private [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] get(): - public abstract [ResolvedTo(TYPES)] interface A<[ResolvedTo(TYPES)] T> : R|kotlin/Any| { - public abstract [ResolvedTo(TYPES)] fun x(): R|kotlin/Unit| + public abstract [ResolvedTo(STATUS)] interface A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| { + public abstract [ResolvedTo(STATUS)] fun x(): R|kotlin/Unit| } @@ -159,8 +159,8 @@ FILE: [ResolvedTo(IMPORTS)] anonymousObjectInInvalidPosition.kt } private [ResolvedTo(BODY_RESOLVE)] get(): - public abstract [ResolvedTo(TYPES)] interface A<[ResolvedTo(TYPES)] T> : R|kotlin/Any| { - public abstract [ResolvedTo(TYPES)] fun x(): R|kotlin/Unit| + public abstract [ResolvedTo(STATUS)] interface A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| { + public abstract [ResolvedTo(STATUS)] fun x(): R|kotlin/Unit| } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.kt b/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.kt new file mode 100644 index 00000000000..4a156fc3105 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.kt @@ -0,0 +1,27 @@ +open class TopLevelClass { + open fun foo(i: Int) { + + } + + open fun boo(b: String) { + + } +} + +open class AnotherTopLevelClass : TopLevelClass() { + override fun foo(i: Int) { + + } +} + +fun resolveMe() { + open class LocalClass : AnotherTopLevelClass() { + override fun foo(i: Int) { + } + } + + class SecondLocalClass : LocalClass() { + override fun boo(b: String) { + } + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.txt b/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.txt new file mode 100644 index 00000000000..f0c0fe6f313 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.txt @@ -0,0 +1,429 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class LocalClass : AnotherTopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|LocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { + } + + } + + local final? [ResolvedTo(RAW_FIR)] class SecondLocalClass : LocalClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=SecondLocalClass] constructor(): R|SecondLocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class LocalClass : AnotherTopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|LocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { + } + + } + + local final? [ResolvedTo(RAW_FIR)] class SecondLocalClass : LocalClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=SecondLocalClass] constructor(): R|SecondLocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public? open [ResolvedTo(RAW_FIR)] class TopLevelClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public? open [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + public? open [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { LAZY_BLOCK } + + } + public? open [ResolvedTo(RAW_FIR)] class AnotherTopLevelClass : TopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class LocalClass : AnotherTopLevelClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|LocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int): R|kotlin/Unit| { + } + + } + + local final? [ResolvedTo(RAW_FIR)] class SecondLocalClass : LocalClass { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=SecondLocalClass] constructor(): R|SecondLocalClass| { + super() + } + + public? open? override [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] b: String): R|kotlin/Unit| { + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(RAW_FIR)] annotations container + public open [ResolvedTo(STATUS)] class TopLevelClass : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + LAZY_super + } + + public open [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] i: R|kotlin/Int|): R|kotlin/Unit| { LAZY_BLOCK } + + public open [ResolvedTo(STATUS)] fun boo([ResolvedTo(STATUS)] b: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } + + } + public open [ResolvedTo(STATUS)] class AnotherTopLevelClass : R|TopLevelClass| { + public [ResolvedTo(STATUS)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + LAZY_super + } + + public open override [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] i: R|kotlin/Int|): R|kotlin/Unit| { LAZY_BLOCK } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|AnotherTopLevelClass| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|LocalClass| { + super() + } + + public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] i: R|kotlin/Int|): R|kotlin/Unit| { + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] class SecondLocalClass : R|LocalClass| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=SecondLocalClass] constructor(): R|SecondLocalClass| { + super() + } + + public open override [ResolvedTo(BODY_RESOLVE)] fun boo([ResolvedTo(BODY_RESOLVE)] b: R|kotlin/String|): R|kotlin/Unit| { + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] fromLocalHierarchyToOuter.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public open [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| { + super() + } + + public open [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] i: R|kotlin/Int|): R|kotlin/Unit| { + } + + public open [ResolvedTo(BODY_RESOLVE)] fun boo([ResolvedTo(BODY_RESOLVE)] b: R|kotlin/String|): R|kotlin/Unit| { + } + + } + public open [ResolvedTo(BODY_RESOLVE)] class AnotherTopLevelClass : R|TopLevelClass| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| { + super() + } + + public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] i: R|kotlin/Int|): R|kotlin/Unit| { + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|AnotherTopLevelClass| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|LocalClass| { + super() + } + + public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] i: R|kotlin/Int|): R|kotlin/Unit| { + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] class SecondLocalClass : R|LocalClass| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=SecondLocalClass] constructor(): R|SecondLocalClass| { + super() + } + + public open override [ResolvedTo(BODY_RESOLVE)] fun boo([ResolvedTo(BODY_RESOLVE)] b: R|kotlin/String|): R|kotlin/Unit| { + } + + } + + } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java index 348f7bd21f3..d5f3d092d47 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java @@ -174,6 +174,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/fakePrimaryConstructor.kt"); } + @Test + @TestMetadata("fromLocalHierarchyToOuter.kt") + public void testFromLocalHierarchyToOuter() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.kt"); + } + @Test @TestMetadata("functionWithParameter.kt") public void testFunctionWithParameter() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java index e1a0d13991b..b974d22defe 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java @@ -174,6 +174,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/fakePrimaryConstructor.kt"); } + @Test + @TestMetadata("fromLocalHierarchyToOuter.kt") + public void testFromLocalHierarchyToOuter() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/fromLocalHierarchyToOuter.kt"); + } + @Test @TestMetadata("functionWithParameter.kt") public void testFunctionWithParameter() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 0cf9bf6625d..dc45d172982 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -190,6 +190,8 @@ abstract class AbstractFirStatusResolveTransformer( private val designationMapForLocalClasses: Map, private val scopeForLocalClass: FirScope? ) : FirAbstractTreeTransformer(phase = FirResolvePhase.STATUS) { + private val isTransformerForLocalDeclarations: Boolean get() = scopeForLocalClass != null + @PrivateForInline val classes = mutableListOf() val statusResolver = FirStatusResolver(session, scopeSession) @@ -329,7 +331,12 @@ abstract class AbstractFirStatusResolveTransformer( private fun forceResolveStatusOfCorrespondingClass(typeRef: FirTypeRef) { val superClassSymbol = typeRef.coneType.toSymbol(session) - superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS.previous) + if (isTransformerForLocalDeclarations) { + superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS) + } else { + superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS.previous) + } + when (superClassSymbol) { is FirRegularClassSymbol -> forceResolveStatusesOfClass(superClassSymbol.fir) is FirTypeAliasSymbol -> forceResolveStatusOfCorrespondingClass(superClassSymbol.fir.expandedTypeRef)