From 87bcc3ad0816cfae82b4dd60c004c195e2b20e26 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 30 Mar 2023 17:39:54 +0200 Subject: [PATCH] [LL FIR] KT-57220 Don't merge empty synthetic function symbol providers --- .../LLFirCombinedSyntheticFunctionSymbolProvider.kt | 5 +++-- .../low/level/api/fir/sessions/LLFirSessionCache.kt | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedSyntheticFunctionSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedSyntheticFunctionSymbolProvider.kt index 86891eca878..f2ac32325a3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedSyntheticFunctionSymbolProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedSyntheticFunctionSymbolProvider.kt @@ -55,7 +55,8 @@ internal class LLFirCombinedSyntheticFunctionSymbolProvider( override fun computeCallableNamesInPackage(packageFqName: FqName): Set? = null companion object { - fun merge(session: FirSession, providers: List): FirSymbolProvider = - providers.singleOrNull() ?: LLFirCombinedSyntheticFunctionSymbolProvider(session, providers) + fun merge(session: FirSession, providers: List): FirSymbolProvider? = + if (providers.size > 1) LLFirCombinedSyntheticFunctionSymbolProvider(session, providers) + else providers.singleOrNull() } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt index fd6c5e5778a..ae64a13537b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt @@ -13,7 +13,6 @@ import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.util.containers.CollectionFactory -import java.util.concurrent.ConcurrentMap import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirLazyDeclarationResolver import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents @@ -49,9 +48,9 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices -import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider -import org.jetbrains.kotlin.utils.addToStdlib.partitionIsInstance import org.jetbrains.kotlin.utils.addIfNotNull +import org.jetbrains.kotlin.utils.addToStdlib.partitionIsInstance +import java.util.concurrent.ConcurrentMap @OptIn(PrivateSessionConstructor::class, SessionConfiguration::class) internal class LLFirSessionCache(private val project: Project) { @@ -549,7 +548,7 @@ internal class LLFirSessionCache(private val project: Project) { // Unfortunately, the functions that an extension synthetic function symbol provider might provide differ between sessions because // they depend on compiler plugins. However, only extension providers that are affected by compiler plugins are added in // `createSourcesSession`. We can still combine these, because the `ClassId` heuristics only need to be checked once. - destination.add(LLFirCombinedSyntheticFunctionSymbolProvider.merge(session, syntheticFunctionSymbolProviders)) + destination.addIfNotNull(LLFirCombinedSyntheticFunctionSymbolProvider.merge(session, syntheticFunctionSymbolProviders)) } }