diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index e949936b9a6..52a86f279bd 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -198,16 +198,7 @@ abstract class AbstractFirUseSiteMemberScope( override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) { declaredMemberScope.processClassifiersByNameWithSubstitution(name, processor) - - if (name in absentClassifiersFromSupertypes) return - val classifiers = supertypeScopeContext.collectClassifiers(name) - if (classifiers.isEmpty()) { - absentClassifiersFromSupertypes += name - return - } - for ((symbol, substitution) in classifiers) { - processor(symbol, substitution) - } + supertypeScopeContext.processClassifiersByNameWithSubstitution(name, absentClassifiersFromSupertypes, processor) } override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index 61f8895c430..0e041606e99 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -63,17 +63,7 @@ class FirTypeIntersectionScope private constructor( } override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) { - if (name in absentClassifiers) { - return - } - val classifiersWithSubstitution = intersectionContext.collectClassifiers(name) - if (classifiersWithSubstitution.isEmpty()) { - absentClassifiers += name - return - } - for ((symbol, substitution) in classifiersWithSubstitution) { - processor(symbol, substitution) - } + intersectionContext.processClassifiersByNameWithSubstitution(name, absentClassifiers, processor) } @Suppress("UNCHECKED_CAST") diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt index 21195af1fac..998248eff6d 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScopeContext.kt @@ -78,8 +78,23 @@ class FirTypeIntersectionScopeContext( } } - @OptIn(PrivateForInline::class) - fun collectClassifiers(name: Name): List, ConeSubstitutor>> { + fun processClassifiersByNameWithSubstitution( + name: Name, + absentClassifierNames: MutableSet, + processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit + ) { + if (name in absentClassifierNames) return + val classifiers = collectClassifiers(name) + if (classifiers.isEmpty()) { + absentClassifierNames += name + return + } + for ((symbol, substitution) in classifiers) { + processor(symbol, substitution) + } + } + + private fun collectClassifiers(name: Name): List, ConeSubstitutor>> { val accepted = HashSet>() val pending = mutableListOf>() val result = mutableListOf, ConeSubstitutor>>()