From 0b2b23189ab25238010c8977485ff7882084966d Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 27 Jan 2020 17:41:19 +0300 Subject: [PATCH] FIR: Cache default importing scopes --- .../org/jetbrains/kotlin/fir/scopes/Scopes.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt index e3b775597e1..3f8495e41a2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey import org.jetbrains.kotlin.fir.resolve.scopeSessionKey import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.name.FqName @@ -16,6 +17,9 @@ fun MutableList.addImportingScopes(file: FirFile, session: FirSession, this += createImportingScopes(file, session, scopeSession) } +private object FirDefaultStarImportingScopeKey : ScopeSessionKey() +private object FirDefaultSimpleImportingScopeKey : ScopeSessionKey() + fun createImportingScopes( file: FirFile, session: FirSession, @@ -23,11 +27,19 @@ fun createImportingScopes( ): List { return listOf( // from low priority to high priority - FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW), - FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH), + scopeSession.getOrBuild(DefaultImportPriority.LOW, FirDefaultStarImportingScopeKey) { + FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW) + }, + scopeSession.getOrBuild(DefaultImportPriority.HIGH, FirDefaultStarImportingScopeKey) { + FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH) + }, FirExplicitStarImportingScope(file.imports, session, scopeSession), - FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW), - FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH), + scopeSession.getOrBuild(DefaultImportPriority.LOW, FirDefaultSimpleImportingScopeKey) { + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW) + }, + scopeSession.getOrBuild(DefaultImportPriority.HIGH, FirDefaultSimpleImportingScopeKey) { + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH) + }, scopeSession.getOrBuild(file.packageFqName, PACKAGE_MEMBER) { FirPackageMemberScope(file.packageFqName, session) },