[FIR] Unify FirLibrarySession and FirJavaModuleBasedSession into single FirCliSession

This commit is contained in:
Dmitriy Novozhilov
2021-04-30 11:15:58 +03:00
committed by TeamCityServer
parent f16194e60d
commit 24f1f7b7b2
4 changed files with 18 additions and 31 deletions
@@ -77,8 +77,8 @@ object FirSessionFactory {
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker? = null,
init: FirSessionConfigurator.() -> Unit = {}
): FirJavaModuleBasedSession {
return FirJavaModuleBasedSession(sessionProvider).apply session@{
): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Source).apply session@{
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
registerModuleData(moduleData)
registerCliCompilerOnlyComponents()
@@ -136,8 +136,8 @@ object FirSessionFactory {
project: Project,
packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
): FirLibrarySession {
return FirLibrarySession(sessionProvider).apply session@{
): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Library).apply session@{
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
sessionProvider.registerSession(moduleData, this)
registerCliCompilerOnlyComponents()
@@ -8,16 +8,16 @@ package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.fir.*
@OptIn(PrivateSessionConstructor::class)
class FirJavaModuleBasedSession @PrivateSessionConstructor constructor(
class FirCliSession @PrivateSessionConstructor constructor(
sessionProvider: FirProjectSessionProvider,
) : FirModuleBasedSession(sessionProvider)
val kind: Kind // used for debug
) : FirSession(sessionProvider) {
enum class Kind {
Source, Library
}
}
@OptIn(PrivateSessionConstructor::class)
class FirLibrarySession @PrivateSessionConstructor constructor(
sessionProvider: FirProjectSessionProvider
) : FirSession(sessionProvider)
open class FirProjectSessionProvider : FirSessionProvider() {
class FirProjectSessionProvider : FirSessionProvider() {
override fun getSession(moduleData: FirModuleData): FirSession? {
return sessionCache[moduleData]
}
@@ -26,5 +26,5 @@ open class FirProjectSessionProvider : FirSessionProvider() {
sessionCache[moduleData] = session
}
protected open val sessionCache: MutableMap<FirModuleData, FirSession> = mutableMapOf()
private val sessionCache: MutableMap<FirModuleData, FirSession> = mutableMapOf()
}
@@ -1,11 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir
@OptIn(PrivateSessionConstructor::class)
abstract class FirModuleBasedSession @PrivateSessionConstructor constructor(
sessionProvider: FirSessionProvider?
) : FirSession(sessionProvider)
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.idea.caches.project.isLibraryClasses
import org.jetbrains.kotlin.idea.caches.project.productionSourceInfo
import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.moduleInfoUnsafe
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.moduleSourceInfo
import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
@@ -34,7 +33,6 @@ import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.utils.addToStdlib.cast
import java.io.File
abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
@@ -55,20 +53,20 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
doFirResolveTest(dirPath)
}
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirJavaModuleBasedSession {
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirSession {
val moduleInfo = module.productionSourceInfo()!!
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, moduleInfo.contentScope(), project)
}
private fun createLibrarySession(moduleInfo: IdeaModuleInfo, provider: FirProjectSessionProvider): FirLibrarySession {
private fun createLibrarySession(moduleInfo: IdeaModuleInfo, provider: FirProjectSessionProvider): FirSession {
val contentScope = moduleInfo.contentScope()
return FirSessionFactory.createLibrarySession(moduleInfo, provider, contentScope, project, IDEPackagePartProvider(contentScope))
}
private fun doFirResolveTest(dirPath: String) {
val firFilesPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirFile>>()
val processorsPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirTransformerBasedResolveProcessor>>()
val sessions = mutableListOf<FirJavaModuleBasedSession>()
val firFilesPerSession = mutableMapOf<FirSession, List<FirFile>>()
val processorsPerSession = mutableMapOf<FirSession, List<FirTransformerBasedResolveProcessor>>()
val sessions = mutableListOf<FirSession>()
val provider = FirProjectSessionProvider()
for (module in project.allModules().drop(1)) {
val session = createSession(module, provider)