FIR: remove duplicate of 'wrapSubstitutionScopeIfNeed'

This commit is contained in:
Mikhail Glukhikh
2019-10-08 10:04:27 +03:00
parent a0ed03a121
commit dfa494a21e
3 changed files with 4 additions and 25 deletions
@@ -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<*>,