diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/LLFirWholeFileResolveTarget.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/LLFirWholeFileResolveTarget.kt index 89dc36c34e3..0a82621e6f1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/LLFirWholeFileResolveTarget.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/LLFirWholeFileResolveTarget.kt @@ -23,6 +23,7 @@ class LLFirWholeFileResolveTarget(firFile: FirFile) : LLFirResolveTarget(firFile } } + action(firFile) forEachTopLevelDeclaration(::goInside) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt index 62138a8fe88..d77ac737f3d 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt @@ -162,6 +162,8 @@ internal fun LLFirAbstractBodyTargetResolver.transformAnnotations(target: FirEle target.transformSingle(transformer, ResolutionMode.ContextIndependent) } + target is FirFile -> {} + else -> throwUnexpectedFirElementError(target) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt index e76abb23218..f65d245fd19 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt @@ -149,6 +149,7 @@ private class LLFirBodyTargetResolver( is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirTypeAlias, + is FirFile, -> { // No bodies here } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt index f25e2e0a0ea..490aa6d6df4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt @@ -102,6 +102,7 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( } override fun doResolveWithoutLock(target: FirElementWithResolveState): Boolean { + if (target is FirFile) return false when { target is FirRegularClass || target is FirScript || target.isRegularDeclarationWithAnnotation -> {} else -> throwUnexpectedFirElementError(target) @@ -113,6 +114,11 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( return true } + override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { + if (target is FirFile) return + throwUnexpectedFirElementError(target) + } + private fun resolveTargetDeclaration(target: T) where T : FirAnnotationContainer, T : FirElementWithResolveState { // 1. Check that we should process this target if (llFirComputationSession.annotationsAreResolved(target, treatNonSourceDeclarationsAsResolved = false)) return @@ -298,10 +304,6 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( map[this] = containerForAnnotations } } - - override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { - throwUnexpectedFirElementError(target) - } } private fun FirAnnotationContainer.hasAnnotationsToResolve(): Boolean { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt index 7399c60ba1a..f33240a03ea 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt @@ -63,6 +63,7 @@ private class LLFirContractsTargetResolver( is FirVariable, is FirFunction, is FirAnonymousInitializer, + is FirFile, is FirScript, is FirFileAnnotationsContainer, is FirDanglingModifierList, diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt index 817d71e9189..81dd024e9f0 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirImplicitTypesLazyResolver.kt @@ -77,6 +77,7 @@ internal class LLFirImplicitBodyTargetResolver( } is FirRegularClass, is FirTypeAlias, + is FirFile, is FirAnonymousInitializer, is FirDanglingModifierList, is FirFileAnnotationsContainer, diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt index 36083de2f66..84995d5ee9b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt @@ -55,6 +55,13 @@ internal abstract class LLFirTargetResolver( fun resolveDesignation() { checkResolveConsistency() + if (resolveTarget is LLFirSingleResolveTarget && resolveTarget.target is FirFile) { + performResolve(resolveTarget.firFile) + return + } + if (resolveTarget is LLFirWholeFileResolveTarget) { + performResolve(resolveTarget.firFile) + } withFile(resolveTarget.firFile) { goToTargets(resolveTarget.path.iterator()) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index b16c157e1fc..32f40700398 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -131,7 +131,7 @@ private class LLFirTypeTargetResolver( is FirRegularClass -> { resolveClassTypes(target) } - is FirAnonymousInitializer -> {} + is FirFile, is FirAnonymousInitializer -> {} else -> errorWithAttachment("Unknown declaration ${target::class}") { withFirEntry("declaration", target) } diff --git a/analysis/low-level-api-fir/testdata/fileStructure/annonymousClass.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/annonymousClass.lazy.resolve.txt index 5611449a41e..04b6bb6f151 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/annonymousClass.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/annonymousClass.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] annonymousClass.kt +FILE: [ResolvedTo(BODY_RESOLVE)] annonymousClass.kt public final [ResolvedTo(BODY_RESOLVE)] fun x(): R|kotlin/Unit| { [ResolvedTo(BODY_RESOLVE)] lval x: R|| = object : R|kotlin/Any| { private [ResolvedTo(BODY_RESOLVE)] constructor(): R|| { diff --git a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndExplicitConstructor.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndExplicitConstructor.lazy.resolve.txt index 78c3d7feb8b..0c5973027c9 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndExplicitConstructor.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndExplicitConstructor.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallAndExplicitConstructor.kt +FILE: [ResolvedTo(BODY_RESOLVE)] callInsideLambdaInsideSuperCallAndExplicitConstructor.kt public open [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor([ResolvedTo(BODY_RESOLVE)] x: R|() -> kotlin/Unit|): R|B| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndImplicitConstructor.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndImplicitConstructor.lazy.resolve.txt index cea40500def..dcfa34a0cc3 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndImplicitConstructor.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallAndImplicitConstructor.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallAndImplicitConstructor.kt +FILE: [ResolvedTo(BODY_RESOLVE)] callInsideLambdaInsideSuperCallAndImplicitConstructor.kt public open [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor([ResolvedTo(BODY_RESOLVE)] x: R|() -> kotlin/Unit|): R|B| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSecondaryConstructor.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSecondaryConstructor.lazy.resolve.txt index e591f32cc7e..45356a160e5 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSecondaryConstructor.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSecondaryConstructor.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallFromSecondaryConstructor.kt +FILE: [ResolvedTo(BODY_RESOLVE)] callInsideLambdaInsideSuperCallFromSecondaryConstructor.kt public open [ResolvedTo(BODY_RESOLVE)] class A : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor([ResolvedTo(BODY_RESOLVE)] x: R|() -> kotlin/Unit|): R|A| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.lazy.resolve.txt index 6741f1f7346..bfbb9b13369 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.kt +FILE: [ResolvedTo(BODY_RESOLVE)] callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.kt public open [ResolvedTo(BODY_RESOLVE)] class A : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor([ResolvedTo(BODY_RESOLVE)] x: R|() -> kotlin/Unit|): R|A| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/class.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/class.lazy.resolve.txt index 00bf1bdee38..a40f49bd6e9 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/class.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/class.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] class.kt +FILE: [ResolvedTo(BODY_RESOLVE)] class.kt public final [ResolvedTo(BODY_RESOLVE)] class A : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor(): R|A| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/class2.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/class2.lazy.resolve.txt index 24b6ada3270..30c08652cc9 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/class2.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/class2.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] class2.kt +FILE: [ResolvedTo(BODY_RESOLVE)] class2.kt public final [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor(): R|B| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/class2.out_of_src_roots.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/class2.out_of_src_roots.lazy.resolve.txt index d91ee83ddf7..e745073f3b5 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/class2.out_of_src_roots.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/class2.out_of_src_roots.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] class2.kt +FILE: [ResolvedTo(BODY_RESOLVE)] class2.kt public final [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor(): R|B| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/classMemberProperty.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/classMemberProperty.lazy.resolve.txt index 348f2698f57..17a0416f1cc 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/classMemberProperty.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/classMemberProperty.lazy.resolve.txt @@ -1,4 +1,4 @@ -FILE: [ResolvedTo(IMPORTS)] classMemberProperty.kt +FILE: [ResolvedTo(BODY_RESOLVE)] classMemberProperty.kt public final [ResolvedTo(BODY_RESOLVE)] class X : R|kotlin/Any| { public [ResolvedTo(BODY_RESOLVE)] constructor(): R|X| { super() diff --git a/analysis/low-level-api-fir/testdata/fileStructure/classMemberPropertyScript.lazy.resolve.txt b/analysis/low-level-api-fir/testdata/fileStructure/classMemberPropertyScript.lazy.resolve.txt index 72b4a297fd1..11c58c1d2f3 100644 --- a/analysis/low-level-api-fir/testdata/fileStructure/classMemberPropertyScript.lazy.resolve.txt +++ b/analysis/low-level-api-fir/testdata/fileStructure/classMemberPropertyScript.lazy.resolve.txt @@ -1,6 +1,6 @@ -FILE: [ResolvedTo(IMPORTS)] classMemberPropertyScript.kts +FILE: [ResolvedTo(BODY_RESOLVE)] classMemberPropertyScript.kts context(