[FIR IDE] Move refactoring for constructor of the FileStructure

This commit is contained in:
Igor Yakovlev
2021-06-04 14:50:57 +02:00
parent a60be78898
commit 7a0391b9b3
8 changed files with 25 additions and 20 deletions
@@ -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)
@@ -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(
@@ -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,
@@ -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)
}
}
@@ -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<KtAnnotated, FileStructureElement>()
@@ -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,
@@ -21,7 +21,6 @@ internal class FileStructureCache(
private val cache = ConcurrentHashMap<KtFile, FileStructure>()
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)
}
}
@@ -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<FirClassLikeDeclaration<*>>(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)
}
}
@@ -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<FirDeclaration>(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