[LL FIR] Use mergePackageProviders in LLFirCombinedKotlinSymbolProvider
^KT-61791
This commit is contained in:
committed by
Space Team
parent
b9e3d848a6
commit
c289da6cf3
+7
-5
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.caches.NullableCaffeineCa
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.mergeDeclarationProviders
|
||||
import org.jetbrains.kotlin.analysis.providers.mergePackageProviders
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirCompositeCachedSymbolNamesProvider
|
||||
@@ -129,6 +129,9 @@ internal class LLFirCombinedKotlinSymbolProvider private constructor(
|
||||
} else {
|
||||
packageProvider.doesKotlinOnlyPackageExist(fqName)
|
||||
}
|
||||
|
||||
// Regarding caching `hasPackage`: The static (standalone) package provider precomputes its packages, while the IDE package provider
|
||||
// caches the results itself. Hence, it's currently unnecessary to provide another layer of caching here.
|
||||
return fqName.takeIf { hasPackage }
|
||||
}
|
||||
|
||||
@@ -137,14 +140,13 @@ internal class LLFirCombinedKotlinSymbolProvider private constructor(
|
||||
if (providers.size > 1) {
|
||||
val declarationProvider = project.mergeDeclarationProviders(providers.map { it.declarationProvider })
|
||||
|
||||
// TODO (marco): Implement a package provider merger.
|
||||
val combinedScope = providers.createCombinedScope()
|
||||
val packageProvider = project.createPackageProvider(combinedScope)
|
||||
val packageProvider = project.mergePackageProviders(providers.map { it.packageProvider })
|
||||
|
||||
val packageProviderForKotlinPackages = providers
|
||||
.filter { it.allowKotlinPackage }
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.let { project.createPackageProvider(it.createCombinedScope()) }
|
||||
?.map { it.packageProvider }
|
||||
?.let(project::mergePackageProviders)
|
||||
|
||||
LLFirCombinedKotlinSymbolProvider(
|
||||
session,
|
||||
|
||||
-8
@@ -5,14 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
||||
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import java.util.*
|
||||
|
||||
internal fun <T: Any> Optional<T>.getOrNull(): T? = orElse(null)
|
||||
|
||||
internal fun List<FirSymbolProvider>.createCombinedScope(): GlobalSearchScope {
|
||||
if (isEmpty()) return GlobalSearchScope.EMPTY_SCOPE
|
||||
return GlobalSearchScope.union(map { it.session.llFirModuleData.ktModule.contentScope })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user