FIR: remove duplicate of 'wrapSubstitutionScopeIfNeed'
This commit is contained in:
@@ -99,7 +99,7 @@ class JavaSymbolProvider(
|
||||
if (symbol is FirClassSymbol && visitedSymbols.add(symbol)) {
|
||||
// We need JavaClassEnhancementScope here to have already enhanced signatures from supertypes
|
||||
val scope = buildJavaEnhancementScope(useSiteSession, symbol, scopeSession, visitedSymbols)
|
||||
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, scope, scopeSession)
|
||||
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, scope, symbol.fir, scopeSession)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.resolve
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||
@@ -24,7 +21,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
||||
is ConeClassLikeType -> {
|
||||
// TODO: for ConeClassLikeType they might be a type alias instead of a regular class
|
||||
val fir = this.lookupTag.toSymbol(useSiteSession)?.fir as? FirRegularClass ?: return null
|
||||
wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteScope(useSiteSession, scopeSession)!!, scopeSession)
|
||||
wrapSubstitutionScopeIfNeed(useSiteSession, fir.buildUseSiteScope(useSiteSession, scopeSession)!!, fir, scopeSession)
|
||||
}
|
||||
is ConeTypeParameterType -> {
|
||||
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
||||
@@ -45,24 +42,6 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
||||
}
|
||||
}
|
||||
|
||||
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||
session: FirSession,
|
||||
useSiteScope: FirScope,
|
||||
builder: ScopeSession
|
||||
): FirScope {
|
||||
if (this.typeArguments.isEmpty()) return useSiteScope
|
||||
val symbol = this.lookupTag.toSymbol(session) as? FirClassSymbol ?: return useSiteScope
|
||||
val regularClass = symbol.fir
|
||||
return builder.getOrBuild(symbol, SubstitutionScopeKey(this)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val substitution = regularClass.typeParameters.zip(this.typeArguments) { typeParameter, typeArgument ->
|
||||
typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type
|
||||
}.filter { (_, type) -> type != null }.toMap() as Map<FirTypeParameterSymbol, ConeKotlinType>
|
||||
|
||||
FirClassSubstitutionScope(session, useSiteScope, builder, substitution)
|
||||
}
|
||||
}
|
||||
|
||||
fun FirRegularClass.defaultType(): ConeClassTypeImpl {
|
||||
return ConeClassTypeImpl(
|
||||
symbol.toLookupTag(),
|
||||
|
||||
@@ -50,7 +50,7 @@ inline fun <reified T : FirScope> scopeSessionKey(): ScopeSessionKey<T> {
|
||||
val USE_SITE = scopeSessionKey<FirScope>()
|
||||
val DECLARED = scopeSessionKey<FirScope>()
|
||||
|
||||
data class SubstitutionScopeKey<T : FirClassSubstitutionScope>(val type: ConeClassLikeType) : ScopeSessionKey<T>() {}
|
||||
data class SubstitutionScopeKey(val type: ConeClassLikeType) : ScopeSessionKey<FirClassSubstitutionScope>() {}
|
||||
|
||||
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||
val symbolProvider = useSiteSession.firSymbolProvider
|
||||
@@ -83,7 +83,7 @@ fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder
|
||||
}
|
||||
}
|
||||
|
||||
private fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||
session: FirSession,
|
||||
useSiteScope: FirScope,
|
||||
declaration: FirClassLikeDeclaration<*>,
|
||||
|
||||
Reference in New Issue
Block a user