[LL API] Move 'LLDiagnosticProvider' instantiation out

This commit is contained in:
Yan Zhulanow
2023-09-01 18:01:16 +09:00
committed by Space Team
parent 68bb39fbcd
commit 095dd7d9c3
5 changed files with 27 additions and 12 deletions
@@ -10,6 +10,8 @@ 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.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession 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.sessions.LLFirSessionCache
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 import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirLibraryOrLibrarySourceResolvableResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirNotUnderContentRootResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirNotUnderContentRootResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession
@@ -17,6 +19,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirScriptResolveS
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLModuleProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLModuleProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLSessionProvider 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.low.level.api.fir.util.errorWithFirSpecificEntries
import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.project.structure.*
@@ -39,12 +42,13 @@ class LLFirResolveSessionService(project: Project) {
private fun create(module: KtModule, factory: (KtModule) -> LLFirSession): LLFirResolvableResolveSession { private fun create(module: KtModule, factory: (KtModule) -> LLFirSession): LLFirResolvableResolveSession {
val moduleProvider = LLModuleProvider(module) val moduleProvider = LLModuleProvider(module)
val sessionProvider = LLSessionProvider(module, factory) val sessionProvider = LLSessionProvider(module, factory)
val diagnosticProvider = createDiagnosticProvider(moduleProvider, sessionProvider)
return when (module) { return when (module) {
is KtSourceModule -> LLFirSourceResolveSession(moduleProvider, sessionProvider) is KtSourceModule -> LLFirSourceResolveSession(moduleProvider, sessionProvider, diagnosticProvider)
is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(moduleProvider, sessionProvider) is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(moduleProvider, sessionProvider, diagnosticProvider)
is KtScriptModule -> LLFirScriptResolveSession(moduleProvider, sessionProvider) is KtScriptModule -> LLFirScriptResolveSession(moduleProvider, sessionProvider, diagnosticProvider)
is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(moduleProvider, sessionProvider) is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(moduleProvider, sessionProvider, diagnosticProvider)
else -> { else -> {
errorWithFirSpecificEntries("Unexpected ${module::class.java}") { errorWithFirSpecificEntries("Unexpected ${module::class.java}") {
withEntry("module", module) { it.moduleDescription } withEntry("module", module) { it.moduleDescription }
@@ -53,6 +57,13 @@ class LLFirResolveSessionService(project: Project) {
} }
} }
private fun createDiagnosticProvider(moduleProvider: LLModuleProvider, sessionProvider: LLSessionProvider): LLDiagnosticProvider {
return when (moduleProvider.useSiteModule) {
is KtSourceModule, is KtScriptModule -> LLSourceDiagnosticProvider(moduleProvider, sessionProvider)
else -> LLEmptyDiagnosticProvider
}
}
companion object { companion object {
fun getInstance(project: Project): LLFirResolveSessionService = fun getInstance(project: Project): LLFirResolveSessionService =
project.getService(LLFirResolveSessionService::class.java) project.getService(LLFirResolveSessionService::class.java)
@@ -10,12 +10,13 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule
internal class LLFirLibraryOrLibrarySourceResolvableResolveSession( internal class LLFirLibraryOrLibrarySourceResolvableResolveSession(
moduleProvider: LLModuleProvider, moduleProvider: LLModuleProvider,
sessionProvider: LLSessionProvider sessionProvider: LLSessionProvider,
diagnosticProvider: LLDiagnosticProvider
) : LLFirResolvableResolveSession( ) : LLFirResolvableResolveSession(
moduleProvider = moduleProvider, moduleProvider = moduleProvider,
moduleKindProvider = LLLibraryModuleKindProvider(moduleProvider.useSiteModule), moduleKindProvider = LLLibraryModuleKindProvider(moduleProvider.useSiteModule),
sessionProvider = sessionProvider, sessionProvider = sessionProvider,
diagnosticProvider = LLEmptyDiagnosticProvider diagnosticProvider = diagnosticProvider
) )
private class LLLibraryModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { private class LLLibraryModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider {
@@ -9,12 +9,13 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule
internal class LLFirNotUnderContentRootResolveSession( internal class LLFirNotUnderContentRootResolveSession(
moduleProvider: LLModuleProvider, moduleProvider: LLModuleProvider,
sessionProvider: LLSessionProvider sessionProvider: LLSessionProvider,
diagnosticProvider: LLDiagnosticProvider
) : LLFirResolvableResolveSession( ) : LLFirResolvableResolveSession(
moduleProvider = moduleProvider, moduleProvider = moduleProvider,
moduleKindProvider = LLNotUnderContentRootModuleKindProvider(moduleProvider.useSiteModule), moduleKindProvider = LLNotUnderContentRootModuleKindProvider(moduleProvider.useSiteModule),
sessionProvider = sessionProvider, sessionProvider = sessionProvider,
diagnosticProvider = LLEmptyDiagnosticProvider diagnosticProvider = diagnosticProvider
) )
private class LLNotUnderContentRootModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { private class LLNotUnderContentRootModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider {
@@ -10,12 +10,13 @@ import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
internal class LLFirScriptResolveSession( internal class LLFirScriptResolveSession(
moduleProvider: LLModuleProvider, moduleProvider: LLModuleProvider,
sessionProvider: LLSessionProvider sessionProvider: LLSessionProvider,
diagnosticProvider: LLDiagnosticProvider
) : LLFirResolvableResolveSession( ) : LLFirResolvableResolveSession(
moduleProvider = moduleProvider, moduleProvider = moduleProvider,
moduleKindProvider = LLScriptModuleKindProvider(moduleProvider.useSiteModule), moduleKindProvider = LLScriptModuleKindProvider(moduleProvider.useSiteModule),
sessionProvider = sessionProvider, sessionProvider = sessionProvider,
diagnosticProvider = LLSourceDiagnosticProvider(moduleProvider, sessionProvider) diagnosticProvider = diagnosticProvider
) )
private class LLScriptModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { private class LLScriptModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider {
@@ -13,12 +13,13 @@ import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
internal class LLFirSourceResolveSession( internal class LLFirSourceResolveSession(
moduleProvider: LLModuleProvider, moduleProvider: LLModuleProvider,
sessionProvider: LLSessionProvider sessionProvider: LLSessionProvider,
diagnosticProvider: LLDiagnosticProvider
) : LLFirResolvableResolveSession( ) : LLFirResolvableResolveSession(
moduleProvider = moduleProvider, moduleProvider = moduleProvider,
moduleKindProvider = LLSourceModuleKindProvider, moduleKindProvider = LLSourceModuleKindProvider,
sessionProvider = sessionProvider, sessionProvider = sessionProvider,
diagnosticProvider = LLSourceDiagnosticProvider(moduleProvider, sessionProvider) diagnosticProvider = diagnosticProvider
) )
private object LLSourceModuleKindProvider : LLModuleKindProvider { private object LLSourceModuleKindProvider : LLModuleKindProvider {