Cache FirSelfImportingScope and callables inside
This commit is contained in:
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirDependenciesSymbolProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirLibrarySymbolProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirMemberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache
|
||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||
import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
|
||||
@@ -92,7 +92,7 @@ class FirLibrarySession private constructor(
|
||||
)
|
||||
) as FirSymbolProvider
|
||||
)
|
||||
registerComponent(FirClassDeclaredMemberScopeProvider::class, FirClassDeclaredMemberScopeProvider())
|
||||
registerComponent(FirMemberScopeProvider::class, FirMemberScopeProvider())
|
||||
|
||||
registerComponent(
|
||||
FirCorrespondingSupertypesCache::class,
|
||||
|
||||
@@ -8,14 +8,14 @@ package org.jetbrains.kotlin.fir
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.*
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirMemberScopeProvider
|
||||
|
||||
abstract class FirModuleBasedSession(override val moduleInfo: ModuleInfo, sessionProvider: FirSessionProvider?) :
|
||||
FirSessionBase(sessionProvider) {
|
||||
init {
|
||||
registerComponent(FirQualifierResolver::class, FirQualifierResolverImpl(this))
|
||||
registerComponent(FirTypeResolver::class, FirTypeResolverImpl(this))
|
||||
registerComponent(FirClassDeclaredMemberScopeProvider::class, FirClassDeclaredMemberScopeProvider())
|
||||
registerComponent(FirMemberScopeProvider::class, FirMemberScopeProvider())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirMemberScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
||||
import org.jetbrains.kotlin.fir.symbols.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
@@ -41,7 +41,7 @@ inline fun <K, V, VA : V> MutableMap<K, V>.getOrPut(key: K, defaultValue: (K) ->
|
||||
val FirSession.firSymbolProvider: FirSymbolProvider by componentArrayAccessor()
|
||||
val FirSession.firProvider: FirProvider by componentArrayAccessor()
|
||||
val FirSession.correspondingSupertypesCache: FirCorrespondingSupertypesCache by componentArrayAccessor()
|
||||
val FirSession.memberScopeProvider: FirClassDeclaredMemberScopeProvider by componentArrayAccessor()
|
||||
val FirSession.memberScopeProvider: FirMemberScopeProvider by componentArrayAccessor()
|
||||
|
||||
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): FirClassLikeSymbol<*>? {
|
||||
val firSymbolProvider = useSiteSession.firSymbolProvider
|
||||
|
||||
@@ -18,7 +18,7 @@ fun MutableList<FirScope>.addImportingScopes(file: FirFile, session: FirSession,
|
||||
FirExplicitStarImportingScope(file.imports, session, scopeSession),
|
||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
||||
FirSelfImportingScope(file.packageFqName, session),
|
||||
selfImportingScope(file.packageFqName, session),
|
||||
// TODO: explicit simple importing scope should have highest priority (higher than inner scopes added in process)
|
||||
FirExplicitSimpleImportingScope(file.imports, session, scopeSession)
|
||||
)
|
||||
|
||||
+13
-1
@@ -18,12 +18,14 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirClassDeclaredMemberScopeProvider : FirSessionComponent {
|
||||
class FirMemberScopeProvider : FirSessionComponent {
|
||||
|
||||
private val declaredMemberCache = mutableMapOf<FirRegularClass, FirClassDeclaredMemberScope>()
|
||||
private val nestedClassifierCache = mutableMapOf<FirRegularClass, FirNestedClassifierScope>()
|
||||
private val selfImportingCache = mutableMapOf<FqName, FirSelfImportingScope>()
|
||||
|
||||
fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope {
|
||||
return declaredMemberCache.getOrPut(klass) {
|
||||
@@ -36,6 +38,12 @@ class FirClassDeclaredMemberScopeProvider : FirSessionComponent {
|
||||
FirNestedClassifierScope(klass)
|
||||
}
|
||||
}
|
||||
|
||||
fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope {
|
||||
return selfImportingCache.getOrPut(fqName) {
|
||||
FirSelfImportingScope(fqName, session)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope {
|
||||
@@ -56,6 +64,10 @@ fun nestedClassifierScope(classId: ClassId, session: FirSession): FirLazyNestedC
|
||||
return FirLazyNestedClassifierScope(classId, session)
|
||||
}
|
||||
|
||||
fun selfImportingScope(fqName: FqName, session: FirSession): FirSelfImportingScope {
|
||||
return session.memberScopeProvider.selfImportingScope(fqName, session)
|
||||
}
|
||||
|
||||
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
|
||||
private val nestedClassifierScope = nestedClassifierScope(klass)
|
||||
|
||||
|
||||
+10
-4
@@ -22,7 +22,9 @@ class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirSc
|
||||
|
||||
private val symbolProvider = FirSymbolProvider.getInstance(session)
|
||||
|
||||
private val cache = mutableMapOf<Name, FirClassifierSymbol<*>?>()
|
||||
private val classifierCache = mutableMapOf<Name, FirClassifierSymbol<*>?>()
|
||||
|
||||
private val callableCache = mutableMapOf<Name, List<FirCallableSymbol<*>>>()
|
||||
|
||||
override fun processClassifiersByName(
|
||||
name: Name,
|
||||
@@ -32,7 +34,7 @@ class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirSc
|
||||
if (name.asString().isEmpty()) return ProcessorAction.NONE
|
||||
|
||||
|
||||
val symbol = cache.getOrPut(name) {
|
||||
val symbol = classifierCache.getOrPut(name) {
|
||||
val unambiguousFqName = ClassId(fqName, name)
|
||||
symbolProvider.getClassLikeSymbolByFqName(unambiguousFqName)
|
||||
}
|
||||
@@ -45,7 +47,9 @@ class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirSc
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||
val symbols = symbolProvider.getTopLevelCallableSymbols(fqName, name)
|
||||
val symbols = callableCache.getOrPut(name) {
|
||||
symbolProvider.getTopLevelCallableSymbols(fqName, name)
|
||||
}
|
||||
for (symbol in symbols) {
|
||||
if (symbol is FirFunctionSymbol<*> && !processor(symbol)) {
|
||||
return ProcessorAction.STOP
|
||||
@@ -55,7 +59,9 @@ class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirSc
|
||||
}
|
||||
|
||||
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||
val symbols = symbolProvider.getTopLevelCallableSymbols(fqName, name)
|
||||
val symbols = callableCache.getOrPut(name) {
|
||||
symbolProvider.getTopLevelCallableSymbols(fqName, name)
|
||||
}
|
||||
for (symbol in symbols) {
|
||||
if (symbol is FirPropertySymbol && !processor(symbol)) {
|
||||
return ProcessorAction.STOP
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDesignatedBodyResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.runResolve
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSelfImportingScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.selfImportingScope
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||
@@ -39,7 +39,7 @@ private fun FirFile.findCallableMember(
|
||||
packageFqName: FqName, klassFqName: FqName?, declName: Name
|
||||
): FirCallableDeclaration<*> {
|
||||
val memberScope =
|
||||
if (klassFqName == null) FirSelfImportingScope(this.packageFqName, session)
|
||||
if (klassFqName == null) selfImportingScope(this.packageFqName, session)
|
||||
else provider.getClassDeclaredMemberScope(ClassId(packageFqName, klassFqName, false))!!
|
||||
var result: FirCallableDeclaration<*>? = null
|
||||
val processor = { symbol: FirCallableSymbol<*> ->
|
||||
|
||||
Reference in New Issue
Block a user