FIR: Cache default importing scopes
This commit is contained in:
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
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.resolve.scopeSessionKey
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -16,6 +17,9 @@ fun MutableList<FirScope>.addImportingScopes(file: FirFile, session: FirSession,
|
|||||||
this += createImportingScopes(file, session, scopeSession)
|
this += createImportingScopes(file, session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private object FirDefaultStarImportingScopeKey : ScopeSessionKey<DefaultImportPriority, FirScope>()
|
||||||
|
private object FirDefaultSimpleImportingScopeKey : ScopeSessionKey<DefaultImportPriority, FirScope>()
|
||||||
|
|
||||||
fun createImportingScopes(
|
fun createImportingScopes(
|
||||||
file: FirFile,
|
file: FirFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -23,11 +27,19 @@ fun createImportingScopes(
|
|||||||
): List<FirScope> {
|
): List<FirScope> {
|
||||||
return listOf(
|
return listOf(
|
||||||
// from low priority to high priority
|
// from low priority to high priority
|
||||||
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
scopeSession.getOrBuild(DefaultImportPriority.LOW, FirDefaultStarImportingScopeKey) {
|
||||||
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW)
|
||||||
|
},
|
||||||
|
scopeSession.getOrBuild(DefaultImportPriority.HIGH, FirDefaultStarImportingScopeKey) {
|
||||||
|
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH)
|
||||||
|
},
|
||||||
FirExplicitStarImportingScope(file.imports, session, scopeSession),
|
FirExplicitStarImportingScope(file.imports, session, scopeSession),
|
||||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
scopeSession.getOrBuild(DefaultImportPriority.LOW, FirDefaultSimpleImportingScopeKey) {
|
||||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW)
|
||||||
|
},
|
||||||
|
scopeSession.getOrBuild(DefaultImportPriority.HIGH, FirDefaultSimpleImportingScopeKey) {
|
||||||
|
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH)
|
||||||
|
},
|
||||||
scopeSession.getOrBuild(file.packageFqName, PACKAGE_MEMBER) {
|
scopeSession.getOrBuild(file.packageFqName, PACKAGE_MEMBER) {
|
||||||
FirPackageMemberScope(file.packageFqName, session)
|
FirPackageMemberScope(file.packageFqName, session)
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user