[FIR] Unify FirLibrarySession and FirJavaModuleBasedSession into single FirCliSession
This commit is contained in:
committed by
TeamCityServer
parent
f16194e60d
commit
24f1f7b7b2
@@ -77,8 +77,8 @@ object FirSessionFactory {
|
|||||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
lookupTracker: LookupTracker? = null,
|
lookupTracker: LookupTracker? = null,
|
||||||
init: FirSessionConfigurator.() -> Unit = {}
|
init: FirSessionConfigurator.() -> Unit = {}
|
||||||
): FirJavaModuleBasedSession {
|
): FirSession {
|
||||||
return FirJavaModuleBasedSession(sessionProvider).apply session@{
|
return FirCliSession(sessionProvider, FirCliSession.Kind.Source).apply session@{
|
||||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
||||||
registerModuleData(moduleData)
|
registerModuleData(moduleData)
|
||||||
registerCliCompilerOnlyComponents()
|
registerCliCompilerOnlyComponents()
|
||||||
@@ -136,8 +136,8 @@ object FirSessionFactory {
|
|||||||
project: Project,
|
project: Project,
|
||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
): FirLibrarySession {
|
): FirSession {
|
||||||
return FirLibrarySession(sessionProvider).apply session@{
|
return FirCliSession(sessionProvider, FirCliSession.Kind.Library).apply session@{
|
||||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
||||||
sessionProvider.registerSession(moduleData, this)
|
sessionProvider.registerSession(moduleData, this)
|
||||||
registerCliCompilerOnlyComponents()
|
registerCliCompilerOnlyComponents()
|
||||||
|
|||||||
+9
-9
@@ -8,16 +8,16 @@ package org.jetbrains.kotlin.fir.java
|
|||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
|
|
||||||
@OptIn(PrivateSessionConstructor::class)
|
@OptIn(PrivateSessionConstructor::class)
|
||||||
class FirJavaModuleBasedSession @PrivateSessionConstructor constructor(
|
class FirCliSession @PrivateSessionConstructor constructor(
|
||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
) : FirModuleBasedSession(sessionProvider)
|
val kind: Kind // used for debug
|
||||||
|
) : FirSession(sessionProvider) {
|
||||||
|
enum class Kind {
|
||||||
|
Source, Library
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(PrivateSessionConstructor::class)
|
class FirProjectSessionProvider : FirSessionProvider() {
|
||||||
class FirLibrarySession @PrivateSessionConstructor constructor(
|
|
||||||
sessionProvider: FirProjectSessionProvider
|
|
||||||
) : FirSession(sessionProvider)
|
|
||||||
|
|
||||||
open class FirProjectSessionProvider : FirSessionProvider() {
|
|
||||||
override fun getSession(moduleData: FirModuleData): FirSession? {
|
override fun getSession(moduleData: FirModuleData): FirSession? {
|
||||||
return sessionCache[moduleData]
|
return sessionCache[moduleData]
|
||||||
}
|
}
|
||||||
@@ -26,5 +26,5 @@ open class FirProjectSessionProvider : FirSessionProvider() {
|
|||||||
sessionCache[moduleData] = session
|
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)
|
|
||||||
+5
-7
@@ -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.project.productionSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider
|
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.moduleInfoUnsafe
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.moduleSourceInfo
|
|
||||||
import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure
|
import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure
|
||||||
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
|
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
|
||||||
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
|
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.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
||||||
@@ -55,20 +53,20 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
|||||||
doFirResolveTest(dirPath)
|
doFirResolveTest(dirPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirJavaModuleBasedSession {
|
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirSession {
|
||||||
val moduleInfo = module.productionSourceInfo()!!
|
val moduleInfo = module.productionSourceInfo()!!
|
||||||
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, moduleInfo.contentScope(), project)
|
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()
|
val contentScope = moduleInfo.contentScope()
|
||||||
return FirSessionFactory.createLibrarySession(moduleInfo, provider, contentScope, project, IDEPackagePartProvider(contentScope))
|
return FirSessionFactory.createLibrarySession(moduleInfo, provider, contentScope, project, IDEPackagePartProvider(contentScope))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doFirResolveTest(dirPath: String) {
|
private fun doFirResolveTest(dirPath: String) {
|
||||||
val firFilesPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirFile>>()
|
val firFilesPerSession = mutableMapOf<FirSession, List<FirFile>>()
|
||||||
val processorsPerSession = mutableMapOf<FirJavaModuleBasedSession, List<FirTransformerBasedResolveProcessor>>()
|
val processorsPerSession = mutableMapOf<FirSession, List<FirTransformerBasedResolveProcessor>>()
|
||||||
val sessions = mutableListOf<FirJavaModuleBasedSession>()
|
val sessions = mutableListOf<FirSession>()
|
||||||
val provider = FirProjectSessionProvider()
|
val provider = FirProjectSessionProvider()
|
||||||
for (module in project.allModules().drop(1)) {
|
for (module in project.allModules().drop(1)) {
|
||||||
val session = createSession(module, provider)
|
val session = createSession(module, provider)
|
||||||
|
|||||||
Reference in New Issue
Block a user