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 5724142578d..f4725b5d088 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 @@ -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.sessions.LLFirSession 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.LLFirNotUnderContentRootResolveSession 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.LLModuleProvider 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.* @@ -39,12 +42,13 @@ class LLFirResolveSessionService(project: Project) { private fun create(module: KtModule, factory: (KtModule) -> LLFirSession): LLFirResolvableResolveSession { val moduleProvider = LLModuleProvider(module) val sessionProvider = LLSessionProvider(module, factory) + val diagnosticProvider = createDiagnosticProvider(moduleProvider, sessionProvider) return when (module) { - is KtSourceModule -> LLFirSourceResolveSession(moduleProvider, sessionProvider) - is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(moduleProvider, sessionProvider) - is KtScriptModule -> LLFirScriptResolveSession(moduleProvider, sessionProvider) - is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(moduleProvider, sessionProvider) + 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) else -> { errorWithFirSpecificEntries("Unexpected ${module::class.java}") { 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 { fun getInstance(project: Project): LLFirResolveSessionService = project.getService(LLFirResolveSessionService::class.java) 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 8c39d117953..137692fb038 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 @@ -10,12 +10,13 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule internal class LLFirLibraryOrLibrarySourceResolvableResolveSession( moduleProvider: LLModuleProvider, - sessionProvider: LLSessionProvider + sessionProvider: LLSessionProvider, + diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, moduleKindProvider = LLLibraryModuleKindProvider(moduleProvider.useSiteModule), sessionProvider = sessionProvider, - diagnosticProvider = LLEmptyDiagnosticProvider + diagnosticProvider = diagnosticProvider ) private class LLLibraryModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { 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 6bc75fdc59a..54ecf3d1b10 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 @@ -9,12 +9,13 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule internal class LLFirNotUnderContentRootResolveSession( moduleProvider: LLModuleProvider, - sessionProvider: LLSessionProvider + sessionProvider: LLSessionProvider, + diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, moduleKindProvider = LLNotUnderContentRootModuleKindProvider(moduleProvider.useSiteModule), sessionProvider = sessionProvider, - diagnosticProvider = LLEmptyDiagnosticProvider + diagnosticProvider = diagnosticProvider ) private class LLNotUnderContentRootModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { 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 c49effed154..4ab7d216293 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 @@ -10,12 +10,13 @@ import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError internal class LLFirScriptResolveSession( moduleProvider: LLModuleProvider, - sessionProvider: LLSessionProvider + sessionProvider: LLSessionProvider, + diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, moduleKindProvider = LLScriptModuleKindProvider(moduleProvider.useSiteModule), sessionProvider = sessionProvider, - diagnosticProvider = LLSourceDiagnosticProvider(moduleProvider, sessionProvider) + diagnosticProvider = diagnosticProvider ) private class LLScriptModuleKindProvider(private val useSiteModule: KtModule) : LLModuleKindProvider { 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 8586e9cd90a..a6727fdfd3e 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 @@ -13,12 +13,13 @@ import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError internal class LLFirSourceResolveSession( moduleProvider: LLModuleProvider, - sessionProvider: LLSessionProvider + sessionProvider: LLSessionProvider, + diagnosticProvider: LLDiagnosticProvider ) : LLFirResolvableResolveSession( moduleProvider = moduleProvider, moduleKindProvider = LLSourceModuleKindProvider, sessionProvider = sessionProvider, - diagnosticProvider = LLSourceDiagnosticProvider(moduleProvider, sessionProvider) + diagnosticProvider = diagnosticProvider ) private object LLSourceModuleKindProvider : LLModuleKindProvider {