diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/QualifierReceiver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/QualifierReceiver.kt index 14247b51d0b..79cef91aba5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/QualifierReceiver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/QualifierReceiver.kt @@ -10,17 +10,20 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope +import org.jetbrains.kotlin.fir.scopes.impl.FirOnlyCallablesScope +import org.jetbrains.kotlin.fir.scopes.impl.FirOnlyClassifiersScope +import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import java.util.ArrayDeque +import java.util.* fun FirClassLikeDeclaration<*>.fullyExpandedClass(useSiteSession: FirSession): FirRegularClass? { @@ -61,6 +64,9 @@ class ClassQualifierReceiver( val scopeSession: ScopeSession ) : QualifierReceiver(explicitReceiver) { + private companion object { + val SUPERTYPE_STATICS_SCOPE_SESSION_KEY = object : ScopeSessionKey, List>() {} + } private fun collectSuperTypeScopesComposedByDepth( klass: FirClass<*>, @@ -114,7 +120,9 @@ class ClassQualifierReceiver( if (klassScope != null) { result += klassScope if (provider is KotlinScopeProvider) return result - result += collectSuperTypeScopesComposedByDepth(klass, useSiteSession, scopeSession) + result += scopeSession.getOrBuild(klass, SUPERTYPE_STATICS_SCOPE_SESSION_KEY) { + collectSuperTypeScopesComposedByDepth(klass, useSiteSession, scopeSession) + } } return result } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/resolve/ScopeSession.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/resolve/ScopeSession.kt index 491335a441e..80ba7909d2d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/resolve/ScopeSession.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/resolve/ScopeSession.kt @@ -5,17 +5,15 @@ package org.jetbrains.kotlin.fir.resolve -import org.jetbrains.kotlin.fir.scopes.FirScope - class ScopeSession { - private val scopes = hashMapOf, FirScope>>() + private val scopes = hashMapOf, Any>>() var returnTypeCalculator: Any? = null @Deprecated(level = DeprecationLevel.ERROR, message = "Only for getOrBuild") fun scopes() = scopes - inline fun getOrBuild(id: ID, key: ScopeSessionKey, build: () -> FS): FS { + inline fun getOrBuild(id: ID, key: ScopeSessionKey, build: () -> FS): FS { @Suppress("DEPRECATION_ERROR") return scopes().getOrPut(id) { hashMapOf() @@ -25,5 +23,5 @@ class ScopeSession { } } -abstract class ScopeSessionKey +abstract class ScopeSessionKey