diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt index c75c3121c76..944ebc0a145 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt @@ -41,9 +41,9 @@ private constructor( override val scopeProvider by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveState, token) } override val symbolProvider: KtSymbolProvider = KtFirSymbolProvider(this, firResolveState.rootModuleSession.firSymbolProvider, firResolveState, firSymbolBuilder, token) - override val completionCandidateChecker: KtCompletionCandidateChecker by threadLocal { KtFirCompletionCandidateChecker(this, token) } - override val symbolDeclarationOverridesProvider: KtSymbolDeclarationOverridesProvider - by threadLocal { KtFirSymbolDeclarationOverridesProvider(this, token) } + override val completionCandidateChecker: KtCompletionCandidateChecker = KtFirCompletionCandidateChecker(this, token) + override val symbolDeclarationOverridesProvider: KtSymbolDeclarationOverridesProvider = + KtFirSymbolDeclarationOverridesProvider(this, token) override fun createContextDependentCopy(): KtAnalysisSession { check(!isContextSession) { "Cannot create context-dependent copy of KtAnalysis session from a context dependent one" } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt index 2f690c1e654..96800e3d662 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import java.util.concurrent.ConcurrentHashMap internal class KtFirCompletionCandidateChecker( analysisSession: KtFirAnalysisSession, @@ -40,7 +41,7 @@ internal class KtFirCompletionCandidateChecker( override val analysisSession: KtFirAnalysisSession by weakRef(analysisSession) private val completionContextCache = - HashMap, LowLevelFirApiFacadeForCompletion.FirCompletionContext>() + ConcurrentHashMap, LowLevelFirApiFacadeForCompletion.FirCompletionContext>() override fun checkExtensionFitsCandidate( firSymbolForCandidate: KtCallableSymbol, @@ -94,7 +95,7 @@ internal class KtFirCompletionCandidateChecker( ): Sequence?> { val enclosingContext = EnclosingDeclarationContext.detect(originalFile, fakeNameExpression) - val completionContext = completionContextCache.getOrCreate(firFile to enclosingContext.fakeEnclosingDeclaration) { + val completionContext = completionContextCache.computeIfAbsent(firFile to enclosingContext.fakeEnclosingDeclaration) { enclosingContext.buildCompletionContext(firFile, firResolveState) }