From e2d248b76d6ace397400e3bb26c50f998f4e29e1 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 20 Sep 2023 11:18:01 +0200 Subject: [PATCH] [FIR] extract functionality to a public function to use from Analysis API ^KT-62090 --- .../kotlin/fir/scopes/FirKotlinScopeProvider.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt index 76d621e2000..cde3008a22b 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt @@ -165,10 +165,7 @@ fun ConeKotlinType.scopeForSupertype( val symbol = lookupTag.toSymbol(useSiteSession) as? FirRegularClassSymbol ?: return null - val substitutor = when { - this.type.attributes.contains(CompilerConeAttributes.RawType) -> ConeRawScopeSubstitutor(useSiteSession) - else -> substitutor(symbol, this, useSiteSession) - } + val substitutor = substitutorForSuperType(useSiteSession, symbol) return symbol.fir.scopeForClassImpl( substitutor, @@ -182,6 +179,13 @@ fun ConeKotlinType.scopeForSupertype( ) } +fun ConeClassLikeType.substitutorForSuperType(useSiteSession: FirSession, classTypeSymbol: FirRegularClassSymbol): ConeSubstitutor { + return when { + this.type.attributes.contains(CompilerConeAttributes.RawType) -> ConeRawScopeSubstitutor(useSiteSession) + else -> substitutor(classTypeSymbol, this, useSiteSession) + } +} + private fun substitutor(symbol: FirRegularClassSymbol, type: ConeClassLikeType, useSiteSession: FirSession): ConeSubstitutor { if (type.typeArguments.isEmpty()) return ConeSubstitutor.Empty val originalSubstitution = createSubstitutionForScope(symbol.fir.typeParameters, type, useSiteSession)