From 270962e17628bb1c3cfe60235968c72e195a0196 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 24 Sep 2021 17:29:37 +0300 Subject: [PATCH] [FIR] Make KotlinScopeProvider a session component --- .../low/level/api/fir/sessions/FirIdeSessionFactory.kt | 7 ++++++- .../org/jetbrains/kotlin/fir/session/FirSessionFactory.kt | 2 ++ .../jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt index d6261a3b0cc..8d3e20a718f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt @@ -76,6 +76,7 @@ internal object FirIdeSessionFactory { return session.apply session@{ val moduleData = KtModuleBasedModuleData(module).apply { bindSession(this@session) } registerModuleData(moduleData) + register(FirKotlinScopeProvider::class, scopeProvider) val cache = ModuleFileCacheImpl(this) val firPhaseManager = IdeFirPhaseManager(FirLazyDeclarationResolver(firFileBuilder), cache, sessionInvalidator) @@ -182,12 +183,15 @@ internal object FirIdeSessionFactory { registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaSpecificResolveComponents() + val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) + register(FirKotlinScopeProvider::class, kotlinScopeProvider) + val mainModuleData = KtModuleBasedModuleData(sourceModule).apply { bindSession(this@session) } val classFileBasedSymbolProvider = JvmClassFileBasedSymbolProvider( this@session, moduleDataProvider = createModuleDataProvider(sourceModule, this), - kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped), + kotlinScopeProvider = kotlinScopeProvider, packagePartProvider = project.createPackagePartProviderForLibrary(searchScope), kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope), javaFacade = FirJavaFacade( @@ -241,6 +245,7 @@ internal object FirIdeSessionFactory { registerModuleData(moduleData) val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) + register(FirKotlinScopeProvider::class, kotlinScopeProvider) val symbolProvider = FirCompositeSymbolProvider( this, listOf( diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index a76f2abdc4b..25d2f9b4fff 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -143,6 +143,7 @@ object FirSessionFactory { registerJavaSpecificResolveComponents() val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) + register(FirKotlinScopeProvider::class, kotlinScopeProvider) val firProvider = FirProviderImpl(this, kotlinScopeProvider) register(FirProvider::class, firProvider) @@ -209,6 +210,7 @@ object FirSessionFactory { registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) + register(FirKotlinScopeProvider::class, kotlinScopeProvider) val classFileBasedSymbolProvider = JvmClassFileBasedSymbolProvider( this, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt index 593ff7479e2..ac33ccfce2f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirField import org.jetbrains.kotlin.fir.declarations.FirRegularClass @@ -28,7 +29,7 @@ class FirKotlinScopeProvider( useSiteSession: FirSession, scopeSession: ScopeSession ) -> FirScope = { _, declaredMemberScope, _, _ -> declaredMemberScope } -) : FirScopeProvider() { +) : FirScopeProvider(), FirSessionComponent { override fun getUseSiteMemberScope( klass: FirClass, useSiteSession: FirSession, @@ -163,3 +164,5 @@ private fun FirClass.scopeForClassImpl( ) } } + +val FirSession.kotlinScopeProvider: FirKotlinScopeProvider by FirSession.sessionComponentAccessor()