LL FIR: cache built-ins module to session
This commit is contained in:
committed by
Ilya Kirillov
parent
c2daa26118
commit
7529965619
+5
-1
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user