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