diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt index f4e8e9325e8..dcbf76816d5 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt @@ -67,7 +67,7 @@ internal class FirModuleResolveStateImpl( ) override fun getOrBuildFirFile(ktFile: KtFile): FirFile = - firFileBuilder.buildRawFirFileWithCaching(ktFile, rootModuleSession.cache, lazyBodiesMode = false) + firFileBuilder.buildRawFirFileWithCaching(ktFile, rootModuleSession.cache, allowLazyBodies = false) override fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? = cache.getContainerFirFile(declaration) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt index d97ba375f5f..38e66437e9e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -27,10 +27,8 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.DeclarationCopyBuilder.wi import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FileTowerProvider import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextAllElementsCollector -import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.FirElementsRecorder import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.KtToFirMapping -import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.* import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirReplacement @@ -38,7 +36,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.buildFileFirAnno import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.buildFirUserTypeRef import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession -import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirProviderInterceptorForIDE import org.jetbrains.kotlin.idea.fir.low.level.api.util.originalDeclaration import org.jetbrains.kotlin.idea.util.getElementTextInContext import org.jetbrains.kotlin.idea.util.ifTrue @@ -134,7 +131,7 @@ object LowLevelFirApiFacadeForResolveOnAir { val firFile = session.firFileBuilder.buildRawFirFileWithCaching( ktFile = file, cache = session.cache, - lazyBodiesMode = true + allowLazyBodies = true ) state.firLazyDeclarationResolver.lazyResolveFileDeclaration( diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt index ef688d00010..07bb44f81bb 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.FileStructureCache import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.FileStructureElement -import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.KtToFirMapping import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver import org.jetbrains.kotlin.idea.fir.low.level.api.util.isNonAnonymousClassOrObject import org.jetbrains.kotlin.idea.util.getElementTextInContext @@ -66,7 +65,7 @@ internal class FirElementBuilder { moduleFileCache: ModuleFileCache, firLazyDeclarationResolver: FirLazyDeclarationResolver ): FirFile { - val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, lazyBodiesMode = false) + val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, allowLazyBodies = false) firLazyDeclarationResolver.lazyResolveFileDeclaration( firFile = firFile, moduleFileCache = moduleFileCache, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt index 5e0ab776d99..f2d7ba42920 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt @@ -29,9 +29,9 @@ internal class FirFileBuilder( fun buildRawFirFileWithCaching( ktFile: KtFile, cache: ModuleFileCache, - lazyBodiesMode: Boolean + allowLazyBodies: Boolean ): FirFile = cache.fileCached(ktFile) { - RawFirBuilder(cache.session, scopeProvider, RawFirBuilderMode.lazyBodies(lazyBodiesMode)).buildFirFile(ktFile) + RawFirBuilder(cache.session, scopeProvider, RawFirBuilderMode.lazyBodies(allowLazyBodies)).buildFirFile(ktFile) } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt index ddec0442ee9..514a3728d2d 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt @@ -21,13 +21,25 @@ import org.jetbrains.kotlin.idea.util.getElementTextInContext import org.jetbrains.kotlin.psi.* import java.util.concurrent.ConcurrentHashMap -internal class FileStructure( +internal class FileStructure private constructor( private val ktFile: KtFile, private val firFile: FirFile, private val firLazyDeclarationResolver: FirLazyDeclarationResolver, private val firFileBuilder: FirFileBuilder, private val moduleFileCache: ModuleFileCache, ) { + companion object { + fun build( + ktFile: KtFile, + firLazyDeclarationResolver: FirLazyDeclarationResolver, + firFileBuilder: FirFileBuilder, + moduleFileCache: ModuleFileCache, + ): FileStructure { + val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, allowLazyBodies = false) + return FileStructure(ktFile, firFile, firLazyDeclarationResolver, firFileBuilder, moduleFileCache) + } + } + private val firIdeProvider = firFile.moduleData.session.firIdeProvider private val structureElements = ConcurrentHashMap() @@ -117,7 +129,7 @@ internal class FileStructure( private fun createStructureElement(container: KtAnnotated): FileStructureElement = when (container) { is KtFile -> { - val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, lazyBodiesMode = true) + val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, allowLazyBodies = true) firLazyDeclarationResolver.resolveFileAnnotations( firFile = firFile, annotations = firFile.annotations, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureCache.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureCache.kt index f58962df50c..82e3da65c2d 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureCache.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureCache.kt @@ -21,7 +21,6 @@ internal class FileStructureCache( private val cache = ConcurrentHashMap() fun getFileStructure(ktFile: KtFile, moduleFileCache: ModuleFileCache): FileStructure = cache.computeIfAbsent(ktFile) { - val firFile = fileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, lazyBodiesMode = false) - FileStructure(ktFile, firFile, firLazyDeclarationResolver, fileBuilder, moduleFileCache) + FileStructure.build(ktFile, firLazyDeclarationResolver, fileBuilder, moduleFileCache) } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt index 9519f331e1a..0bd4dd4fad4 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt @@ -22,8 +22,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.executeOrReturnDefaultVa import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtClassOrObject -import org.jetbrains.kotlin.psi.KtEnumEntry import org.jetbrains.kotlin.psi.KtFile import java.util.* @@ -41,7 +39,7 @@ internal class FirProviderHelper( null -> indexHelper.typeAliasFromIndexByClassId(classId) else -> if (klass.getClassId() == null) null else klass } ?: return@computeIfAbsent Optional.empty() - val firFile = firFileBuilder.buildRawFirFileWithCaching(ktClass.containingKtFile, cache, lazyBodiesMode = true) + val firFile = firFileBuilder.buildRawFirFileWithCaching(ktClass.containingKtFile, cache, allowLazyBodies = true) val classifier = FirElementFinder.findElementIn>(firFile) { classifier -> classifier.symbol.classId == classId } @@ -63,7 +61,7 @@ internal class FirProviderHelper( @OptIn(ExperimentalStdlibApi::class) buildList { files.forEach { ktFile -> - val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, cache, lazyBodiesMode = true) + val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, cache, allowLazyBodies = true) firFile.collectCallableDeclarationsTo(this, name) } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt index b06c436dbaa..2ab7c6a10ad 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt @@ -42,7 +42,7 @@ internal fun KtDeclaration.findFirDeclarationForAnyFirSourceDeclaration( ): FirDeclaration { val nonLocalDeclaration = getNonLocalContainingOrThisDeclaration() ?.findSourceNonLocalFirDeclaration(firFileBuilder, firSymbolProvider, moduleFileCache) - ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, lazyBodiesMode = true) + ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, allowLazyBodies = true) val originalDeclaration = originalDeclaration val fir = FirElementFinder.findElementIn(nonLocalDeclaration) { firDeclaration -> firDeclaration.psi == this || firDeclaration.psi == originalDeclaration @@ -66,7 +66,7 @@ private fun KtDeclaration.findSourceOfNonLocalFirDeclarationByTraversingWholeTre moduleFileCache: ModuleFileCache, containerFirFile: FirFile?, ): FirDeclaration? { - val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, lazyBodiesMode = true) + val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, allowLazyBodies = true) val originalDeclaration = originalDeclaration return FirElementFinder.findElementIn(firFile, goInside = { it is FirRegularClass }) { firDeclaration -> firDeclaration.psi == this || firDeclaration.psi == originalDeclaration @@ -88,7 +88,7 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider( containerClassFir?.declarations } else { val ktFile = containingKtFile - val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, lazyBodiesMode = true) + val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(ktFile, moduleFileCache, allowLazyBodies = true) firFile.declarations } val original = originalDeclaration