From f51a7515e1a23df1738b100bcd462d4883a4fbad Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 1 Sep 2023 18:05:55 +0900 Subject: [PATCH] [LL API] Move 'LLModuleKindProvider' instantiation out --- .../level/api/fir/LLFirResolveStateService.kt | 40 +++++++++++++++++-- ...OrLibrarySourceResolvableResolveSession.kt | 15 ++----- .../LLFirNotUnderContentRootResolveSession.kt | 16 ++------ .../fir/state/LLFirScriptResolveSession.kt | 18 ++------- .../fir/state/LLFirSourceResolveSession.kt | 22 ++-------- .../api/fir/state/LLModuleKindProvider.kt | 9 +++++ 6 files changed, 57 insertions(+), 63 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt index f4725b5d088..b58f51d1555 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt @@ -8,8 +8,10 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import com.intellij.openapi.project.Project import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirLibraryOrLibrarySourceResolvableModuleSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache +import org.jetbrains.kotlin.analysis.low.level.api.fir.state.KtModuleKind import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLDiagnosticProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLEmptyDiagnosticProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirLibraryOrLibrarySourceResolvableResolveSession @@ -17,11 +19,14 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirNotUnderConten import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirScriptResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession +import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLModuleKindProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLModuleProvider +import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLSimpleResolvableModuleKindProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLSessionProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLSourceDiagnosticProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries import org.jetbrains.kotlin.analysis.project.structure.* +import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError class LLFirResolveSessionService(project: Project) { private val cache = LLFirSessionCache.getInstance(project) @@ -45,10 +50,10 @@ class LLFirResolveSessionService(project: Project) { val diagnosticProvider = createDiagnosticProvider(moduleProvider, sessionProvider) return when (module) { - is KtSourceModule -> LLFirSourceResolveSession(moduleProvider, sessionProvider, diagnosticProvider) - is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(moduleProvider, sessionProvider, diagnosticProvider) - is KtScriptModule -> LLFirScriptResolveSession(moduleProvider, sessionProvider, diagnosticProvider) - is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(moduleProvider, sessionProvider, diagnosticProvider) + is KtSourceModule -> LLFirSourceResolveSession(moduleProvider, LLSourceModuleKindProvider, sessionProvider, diagnosticProvider) + is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(moduleProvider, LLLibraryModuleKindProvider(module), sessionProvider, diagnosticProvider) + is KtScriptModule -> LLFirScriptResolveSession(moduleProvider, LLScriptModuleKindProvider(module), sessionProvider, diagnosticProvider) + is KtNotUnderContentRootModule -> LLSimpleResolvableModuleKindProvider(moduleProvider, LLNotUnderContentRootModuleKindProvider(module), sessionProvider, diagnosticProvider) else -> { errorWithFirSpecificEntries("Unexpected ${module::class.java}") { withEntry("module", module) { it.moduleDescription } @@ -68,4 +73,31 @@ class LLFirResolveSessionService(project: Project) { fun getInstance(project: Project): LLFirResolveSessionService = project.getService(LLFirResolveSessionService::class.java) } +} + +private object LLSourceModuleKindProvider : LLModuleKindProvider { + override fun getKind(module: KtModule): KtModuleKind { + return when (module) { + is KtSourceModule -> KtModuleKind.RESOLVABLE_MODULE + is KtBuiltinsModule, is KtLibraryModule -> KtModuleKind.BINARY_MODULE + else -> unexpectedElementError("module", module) + } + } +} + +private class LLLibraryModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { + override fun getKind(module: KtModule): KtModuleKind { + LLFirLibraryOrLibrarySourceResolvableModuleSession.checkIsValidKtModule(module) + return if (module == useSiteModule) KtModuleKind.RESOLVABLE_MODULE else KtModuleKind.BINARY_MODULE + } +} + +private class LLScriptModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { + override fun getKind(module: KtModule): KtModuleKind { + return when (module) { + useSiteModule, is KtSourceModule -> KtModuleKind.RESOLVABLE_MODULE + is KtBuiltinsModule, is KtLibraryModule -> KtModuleKind.BINARY_MODULE + else -> unexpectedElementError("module", module) + } + } } \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirLibraryOrLibrarySourceResolvableResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirLibraryOrLibrarySourceResolvableResolveSession.kt index 137692fb038..b7d24191d3a 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirLibraryOrLibrarySourceResolvableResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirLibraryOrLibrarySourceResolvableResolveSession.kt @@ -5,23 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.state -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirLibraryOrLibrarySourceResolvableModuleSession -import org.jetbrains.kotlin.analysis.project.structure.KtModule - internal class LLFirLibraryOrLibrarySourceResolvableResolveSession( moduleProvider: LLModuleProvider, + moduleKindProvider: LLModuleKindProvider, sessionProvider: LLSessionProvider, diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, - moduleKindProvider = LLLibraryModuleKindProvider(moduleProvider.useSiteModule), + moduleKindProvider = moduleKindProvider, sessionProvider = sessionProvider, diagnosticProvider = diagnosticProvider -) - -private class LLLibraryModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { - override fun getKind(module: KtModule): KtModuleKind { - LLFirLibraryOrLibrarySourceResolvableModuleSession.checkIsValidKtModule(module) - return if (module == useSiteModule) KtModuleKind.RESOLVABLE_MODULE else KtModuleKind.BINARY_MODULE - } -} \ No newline at end of file +) \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirNotUnderContentRootResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirNotUnderContentRootResolveSession.kt index 54ecf3d1b10..9da230ad4bd 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirNotUnderContentRootResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirNotUnderContentRootResolveSession.kt @@ -5,24 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.state -import org.jetbrains.kotlin.analysis.project.structure.KtModule - internal class LLFirNotUnderContentRootResolveSession( moduleProvider: LLModuleProvider, + moduleKindProvider: LLModuleKindProvider, sessionProvider: LLSessionProvider, diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, - moduleKindProvider = LLNotUnderContentRootModuleKindProvider(moduleProvider.useSiteModule), + moduleKindProvider = moduleKindProvider, sessionProvider = sessionProvider, diagnosticProvider = diagnosticProvider -) - -private class LLNotUnderContentRootModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { - override fun getKind(module: KtModule): KtModuleKind { - return when (module) { - useSiteModule -> KtModuleKind.RESOLVABLE_MODULE - else -> KtModuleKind.BINARY_MODULE - } - } -} \ No newline at end of file +) \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirScriptResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirScriptResolveSession.kt index 4ab7d216293..4f60a92ee4d 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirScriptResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirScriptResolveSession.kt @@ -5,26 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.state -import org.jetbrains.kotlin.analysis.project.structure.* -import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError - internal class LLFirScriptResolveSession( moduleProvider: LLModuleProvider, + moduleKindProvider: LLModuleKindProvider, sessionProvider: LLSessionProvider, diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, - moduleKindProvider = LLScriptModuleKindProvider(moduleProvider.useSiteModule), + moduleKindProvider = moduleKindProvider, sessionProvider = sessionProvider, diagnosticProvider = diagnosticProvider -) - -private class LLScriptModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { - override fun getKind(module: KtModule): KtModuleKind { - return when (module) { - useSiteModule, is KtSourceModule -> KtModuleKind.RESOLVABLE_MODULE - is KtBuiltinsModule, is KtLibraryModule -> KtModuleKind.BINARY_MODULE - else -> unexpectedElementError("module", module) - } - } -} \ No newline at end of file +) \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt index a6727fdfd3e..0798ab07d9d 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt @@ -5,30 +5,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.state -import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule -import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule -import org.jetbrains.kotlin.analysis.project.structure.KtModule -import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule -import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError - internal class LLFirSourceResolveSession( moduleProvider: LLModuleProvider, + moduleKindProvider: LLModuleKindProvider, sessionProvider: LLSessionProvider, diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, - moduleKindProvider = LLSourceModuleKindProvider, + moduleKindProvider = moduleKindProvider, sessionProvider = sessionProvider, diagnosticProvider = diagnosticProvider -) - -private object LLSourceModuleKindProvider : LLModuleKindProvider { - override fun getKind(module: KtModule): KtModuleKind { - return when (module) { - is KtSourceModule -> KtModuleKind.RESOLVABLE_MODULE - is KtBuiltinsModule, - is KtLibraryModule -> KtModuleKind.BINARY_MODULE - else -> unexpectedElementError("module", module) - } - } -} \ No newline at end of file +) \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLModuleKindProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLModuleKindProvider.kt index 9d7e633a585..24a5f7662be 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLModuleKindProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLModuleKindProvider.kt @@ -34,4 +34,13 @@ enum class KtModuleKind { * is available. */ BINARY_MODULE +} + +internal class LLSimpleResolvableModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { + override fun getKind(module: KtModule): KtModuleKind { + return when (module) { + useSiteModule -> KtModuleKind.RESOLVABLE_MODULE + else -> KtModuleKind.BINARY_MODULE + } + } } \ No newline at end of file