From 72f30d78d655bfdf63b99ba9877b3f2a19afdf05 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 18 May 2023 14:57:45 +0200 Subject: [PATCH] [LL FIR] cache import scopes during compiler required annotations phase In LL FIR file is always already resolved to import phase, so we can cache the result ^KT-56551 --- .../fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt | 2 ++ .../plugin/AbstractFirSpecificAnnotationResolveTransformer.kt | 2 +- .../plugin/FirCompilerRequiredAnnotationsResolveTransformer.kt | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) 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 07fcda11551..c586a3e4e28 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 @@ -85,6 +85,8 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( resolver.resolveDesignation() } + + override val useCacheForImportScope: Boolean get() = true } private val transformer = FirCompilerRequiredAnnotationsResolveTransformer( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt index 4fd7a91778f..a9770a173fc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt @@ -391,7 +391,7 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer( lateinit var scopes: List inline fun withFileScopes(file: FirFile, f: () -> T): T { - scopes = createImportingScopes(file, session, scopeSession, useCaching = false) + scopes = createImportingScopes(file, session, scopeSession, useCaching = computationSession.useCacheForImportScope) return f() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirCompilerRequiredAnnotationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirCompilerRequiredAnnotationsResolveTransformer.kt index 162a46fc59f..e69cc07db16 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirCompilerRequiredAnnotationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirCompilerRequiredAnnotationsResolveTransformer.kt @@ -136,6 +136,8 @@ open class CompilerRequiredAnnotationsComputationSession { return file in filesWithResolvedImports } + open val useCacheForImportScope: Boolean get() = false + fun recordThatImportsAreResolved(file: FirFile) { if (!filesWithResolvedImports.add(file)) { error("Imports are resolved twice")