FIR: remove duplicate of 'wrapSubstitutionScopeIfNeed'
This commit is contained in:
@@ -99,7 +99,7 @@ class JavaSymbolProvider(
|
|||||||
if (symbol is FirClassSymbol && visitedSymbols.add(symbol)) {
|
if (symbol is FirClassSymbol && visitedSymbols.add(symbol)) {
|
||||||
// We need JavaClassEnhancementScope here to have already enhanced signatures from supertypes
|
// We need JavaClassEnhancementScope here to have already enhanced signatures from supertypes
|
||||||
val scope = buildJavaEnhancementScope(useSiteSession, symbol, scopeSession, visitedSymbols)
|
val scope = buildJavaEnhancementScope(useSiteSession, symbol, scopeSession, visitedSymbols)
|
||||||
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, scope, scopeSession)
|
useSiteSuperType.wrapSubstitutionScopeIfNeed(useSiteSession, scope, symbol.fir, scopeSession)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.resolve
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
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.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.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
@@ -24,7 +21,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
|||||||
is ConeClassLikeType -> {
|
is ConeClassLikeType -> {
|
||||||
// TODO: for ConeClassLikeType they might be a type alias instead of a regular class
|
// 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
|
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 -> {
|
is ConeTypeParameterType -> {
|
||||||
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
// 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 {
|
fun FirRegularClass.defaultType(): ConeClassTypeImpl {
|
||||||
return ConeClassTypeImpl(
|
return ConeClassTypeImpl(
|
||||||
symbol.toLookupTag(),
|
symbol.toLookupTag(),
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ inline fun <reified T : FirScope> scopeSessionKey(): ScopeSessionKey<T> {
|
|||||||
val USE_SITE = scopeSessionKey<FirScope>()
|
val USE_SITE = scopeSessionKey<FirScope>()
|
||||||
val DECLARED = 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? {
|
fun FirRegularClass.buildUseSiteScope(useSiteSession: FirSession, builder: ScopeSession): FirScope? {
|
||||||
val symbolProvider = useSiteSession.firSymbolProvider
|
val symbolProvider = useSiteSession.firSymbolProvider
|
||||||
@@ -83,7 +83,7 @@ fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
useSiteScope: FirScope,
|
useSiteScope: FirScope,
|
||||||
declaration: FirClassLikeDeclaration<*>,
|
declaration: FirClassLikeDeclaration<*>,
|
||||||
|
|||||||
Reference in New Issue
Block a user