Cache FirPackageMemberScope in ScopeSession instead of member scope provider
This commit is contained in:
@@ -8,7 +8,9 @@ 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.scopes.impl.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
fun MutableList<FirScope>.addImportingScopes(file: FirFile, session: FirSession, scopeSession: ScopeSession) {
|
||||
this += createImportingScopes(file, session, scopeSession)
|
||||
@@ -26,7 +28,9 @@ fun createImportingScopes(
|
||||
FirExplicitStarImportingScope(file.imports, session, scopeSession),
|
||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
||||
packageMemberScope(file.packageFqName, session),
|
||||
scopeSession.getOrBuild(file.packageFqName, PACKAGE_MEMBER) {
|
||||
FirPackageMemberScope(file.packageFqName, session)
|
||||
},
|
||||
// TODO: explicit simple importing scope should have highest priority (higher than inner scopes added in process)
|
||||
FirExplicitSimpleImportingScope(file.imports, session, scopeSession)
|
||||
)
|
||||
@@ -36,3 +40,5 @@ fun FirCompositeScope.addImportingScopes(file: FirFile, session: FirSession, sco
|
||||
scopes.addImportingScopes(file, session, scopeSession)
|
||||
}
|
||||
|
||||
private val PACKAGE_MEMBER = scopeSessionKey<FqName, FirPackageMemberScope>()
|
||||
|
||||
|
||||
-14
@@ -5,21 +5,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.scopes.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.memberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirMemberScopeProvider : FirSessionComponent {
|
||||
|
||||
private val declaredMemberCache = mutableMapOf<FirClass<*>, FirScope>()
|
||||
private val nestedClassifierCache = mutableMapOf<FirClass<*>, FirNestedClassifierScope>()
|
||||
private val packageMemberCache = mutableMapOf<FqName, FirPackageMemberScope>()
|
||||
|
||||
fun declaredMemberScope(
|
||||
klass: FirClass<*>,
|
||||
@@ -37,13 +34,6 @@ class FirMemberScopeProvider : FirSessionComponent {
|
||||
FirNestedClassifierScope(klass)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: it's better to cache this scope in ScopeSession
|
||||
fun packageMemberScope(fqName: FqName, session: FirSession): FirPackageMemberScope {
|
||||
return packageMemberCache.getOrPut(fqName) {
|
||||
FirPackageMemberScope(fqName, session)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun declaredMemberScope(klass: FirClass<*>): FirScope {
|
||||
@@ -79,7 +69,3 @@ fun lazyNestedClassifierScope(
|
||||
return FirLazyNestedClassifierScope(classId, existingNames, symbolProvider)
|
||||
}
|
||||
|
||||
fun packageMemberScope(fqName: FqName, session: FirSession): FirPackageMemberScope {
|
||||
return session.memberScopeProvider.packageMemberScope(fqName, session)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user