[kotlin][k2] Implement IdeKotlinPackageProviderMerger

^KT-61791

GitOrigin-RevId: 793f2e4e1dbd260716a2801f54c5283dc0155b25
This commit is contained in:
Marco Pennekamp
2023-10-12 16:16:25 +00:00
committed by intellij-monorepo-bot
parent 4e41fbe678
commit 764c8ca8fb
2 changed files with 17 additions and 1 deletions
@@ -15,6 +15,9 @@
<projectService
serviceInterface="org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory"
serviceImplementation="org.jetbrains.kotlin.idea.base.analysisApiProviders.IdeKotlinPackageProviderFactory"/>
<projectService
serviceInterface="org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderMerger"
serviceImplementation="org.jetbrains.kotlin.idea.base.analysisApiProviders.IdeKotlinPackageProviderMerger"/>
<projectService
serviceInterface="org.jetbrains.kotlin.analysis.providers.KotlinMessageBusProvider"
serviceImplementation="org.jetbrains.kotlin.analysis.providers.impl.KotlinProjectMessageBusProvider"/>
@@ -6,8 +6,11 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.CachedValueProvider
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderMerger
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
import org.jetbrains.kotlin.analysis.providers.impl.KotlinPackageProviderBase
import org.jetbrains.kotlin.analysis.providers.impl.mergeSpecificProviders
import org.jetbrains.kotlin.analysis.providers.impl.packageProviders.CompositeKotlinPackageProvider
import org.jetbrains.kotlin.caches.project.CachedValue
import org.jetbrains.kotlin.caches.project.getValue
import org.jetbrains.kotlin.idea.base.indices.KotlinPackageIndexUtils
@@ -21,9 +24,19 @@ internal class IdeKotlinPackageProviderFactory(private val project: Project) : K
}
}
internal class IdeKotlinPackageProviderMerger(private val project: Project) : KotlinPackageProviderMerger() {
override fun merge(providers: List<KotlinPackageProvider>): KotlinPackageProvider =
providers.mergeSpecificProviders<_, IdeKotlinPackageProvider>(CompositeKotlinPackageProvider.factory) { targetProviders ->
IdeKotlinPackageProvider(
project,
GlobalSearchScope.union(targetProviders.map { it.searchScope })
)
}
}
private class IdeKotlinPackageProvider(
project: Project,
searchScope: GlobalSearchScope
searchScope: GlobalSearchScope
) : KotlinPackageProviderBase(project, searchScope) {
private val cache by CachedValue(project) {
CachedValueProvider.Result(