LL FIR: cache built-ins module to session

This commit is contained in:
Jinseong Jeon
2022-09-07 23:45:03 -07:00
committed by Ilya Kirillov
parent c2daa26118
commit 7529965619
@@ -35,14 +35,18 @@ class LLFirLibrarySessionFactory(
) { ) {
internal fun getLibrarySession(ktBinaryModule: KtBinaryModule, sessionsCache: MutableMap<KtModule, LLFirSession>): LLFirLibrarySession { internal fun getLibrarySession(ktBinaryModule: KtBinaryModule, sessionsCache: MutableMap<KtModule, LLFirSession>): LLFirLibrarySession {
return sessionsCache.getOrPut(ktBinaryModule) { createModuleLibrariesSession(ktBinaryModule) } as LLFirLibrarySession return sessionsCache.getOrPut(ktBinaryModule) {
createModuleLibrariesSession(ktBinaryModule, sessionsCache)
} as LLFirLibrarySession
} }
private fun createModuleLibrariesSession( private fun createModuleLibrariesSession(
ktLibraryModule: KtBinaryModule, ktLibraryModule: KtBinaryModule,
sessionsCache: MutableMap<KtModule, LLFirSession>,
): LLFirLibrarySession { ): LLFirLibrarySession {
val platform = ktLibraryModule.platform val platform = ktLibraryModule.platform
val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform) val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform)
sessionsCache.putIfAbsent(builtinsSession.ktModule, builtinsSession)
return LLFirLibrarySession(ktLibraryModule, project, builtinsSession.builtinTypes).apply session@{ return LLFirLibrarySession(ktLibraryModule, project, builtinsSession.builtinTypes).apply session@{
val moduleData = LLFirModuleData(ktLibraryModule).apply { bindSession(this@session) } val moduleData = LLFirModuleData(ktLibraryModule).apply { bindSession(this@session) }
registerModuleData(moduleData) registerModuleData(moduleData)