[FIR] Make KotlinScopeProvider a session component

This commit is contained in:
Dmitriy Novozhilov
2021-09-24 17:29:37 +03:00
committed by TeamCityServer
parent 4f764c28cb
commit 270962e176
3 changed files with 12 additions and 2 deletions
@@ -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(
@@ -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,
@@ -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()