Cache FirPackageMemberScope in ScopeSession instead of member scope provider

This commit is contained in:
Mikhail Glukhikh
2019-12-19 13:01:56 +03:00
parent cb93b25fca
commit c4e6f8a640
2 changed files with 7 additions and 15 deletions
@@ -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>()
@@ -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)
}