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 {
return sessionsCache.getOrPut(ktBinaryModule) { createModuleLibrariesSession(ktBinaryModule) } as LLFirLibrarySession
return sessionsCache.getOrPut(ktBinaryModule) {
createModuleLibrariesSession(ktBinaryModule, sessionsCache)
} as LLFirLibrarySession
}
private fun createModuleLibrariesSession(
ktLibraryModule: KtBinaryModule,
sessionsCache: MutableMap<KtModule, LLFirSession>,
): LLFirLibrarySession {
val platform = ktLibraryModule.platform
val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform)
sessionsCache.putIfAbsent(builtinsSession.ktModule, builtinsSession)
return LLFirLibrarySession(ktLibraryModule, project, builtinsSession.builtinTypes).apply session@{
val moduleData = LLFirModuleData(ktLibraryModule).apply { bindSession(this@session) }
registerModuleData(moduleData)