[LL API] Move 'LLModuleKindProvider' instantiation out

This commit is contained in:
Yan Zhulanow
2023-09-01 18:05:55 +09:00
committed by Space Team
parent 095dd7d9c3
commit f51a7515e1
6 changed files with 57 additions and 63 deletions
@@ -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)
}
}
}
@@ -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
}
}
)
@@ -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
}
}
}
)
@@ -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)
}
}
}
)
@@ -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)
}
}
}
)
@@ -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
}
}
}