Remove some FirElement.session usages in FIR resolve

This commit is contained in:
Mikhail Glukhikh
2019-03-06 18:44:14 +03:00
parent 63cb8bb1a7
commit 8ea347653b
4 changed files with 12 additions and 9 deletions
@@ -46,7 +46,7 @@ private fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession)
val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession) val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession)
if (symbol is FirClassSymbol) { if (symbol is FirClassSymbol) {
val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession) val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession)
useSiteSuperType.buildSubstitutionScope(useSiteScope, symbol.fir) ?: useSiteScope useSiteSuperType.buildSubstitutionScope(useSiteSession, useSiteScope, symbol.fir) ?: useSiteScope
} else { } else {
null null
} }
@@ -55,6 +55,7 @@ private fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession)
} }
private fun ConeClassLikeType.buildSubstitutionScope( private fun ConeClassLikeType.buildSubstitutionScope(
session: FirSession,
useSiteScope: FirScope, useSiteScope: FirScope,
regularClass: FirRegularClass regularClass: FirRegularClass
): FirClassSubstitutionScope? { ): FirClassSubstitutionScope? {
@@ -65,7 +66,7 @@ private fun ConeClassLikeType.buildSubstitutionScope(
typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type
}.filter { (_, type) -> type != null }.toMap() as Map<ConeTypeParameterSymbol, ConeKotlinType> }.filter { (_, type) -> type != null }.toMap() as Map<ConeTypeParameterSymbol, ConeKotlinType>
return FirClassSubstitutionScope(useSiteScope, substitution) return FirClassSubstitutionScope(session, useSiteScope, substitution)
} }
private tailrec fun ConeClassLikeType.computePartialExpansion(useSiteSession: FirSession): ConeClassLikeType? { private tailrec fun ConeClassLikeType.computePartialExpansion(useSiteSession: FirSession): ConeClassLikeType? {
@@ -113,7 +113,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
superTypesDeserialized.mapNotNullTo(superTypeRefs) { superTypesDeserialized.mapNotNullTo(superTypeRefs) {
if (it == null) return@mapNotNullTo null if (it == null) return@mapNotNullTo null
FirResolvedTypeRefImpl(session, null, it, false, emptyList()) FirResolvedTypeRefImpl(this@BuiltInsPackageFragment.session, null, it, false, emptyList())
} }
// TODO: declarations (probably should be done later) // TODO: declarations (probably should be done later)
} }
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
class FirTypeResolverImpl(session: FirSession) : FirTypeResolver { class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
private val symbolProvider by lazy { private val symbolProvider by lazy {
session.getService(FirSymbolProvider::class) session.getService(FirSymbolProvider::class)
@@ -48,7 +48,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver {
is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag) is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag)
is FirUserTypeRef -> { is FirUserTypeRef -> {
val qualifierResolver = FirQualifierResolver.getInstance(typeRef.session) val qualifierResolver = FirQualifierResolver.getInstance(session)
var resolvedSymbol: ConeClassifierSymbol? = null var resolvedSymbol: ConeClassifierSymbol? = null
scope.processClassifiersByName(typeRef.qualifier.first().name, position) { symbol -> scope.processClassifiersByName(typeRef.qualifier.first().name, position) { symbol ->
@@ -73,7 +73,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver {
resolvedSymbol ?: qualifierResolver.resolveSymbol(typeRef.qualifier) resolvedSymbol ?: qualifierResolver.resolveSymbol(typeRef.qualifier)
} }
is FirImplicitBuiltinTypeRef -> { is FirImplicitBuiltinTypeRef -> {
resolveBuiltInQualified(typeRef.id, typeRef.session) resolveBuiltInQualified(typeRef.id, session)
} }
else -> null else -> null
} }
@@ -102,7 +102,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver {
(typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type, (typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type,
typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() }, typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() },
typeRef.returnTypeRef.coneTypeUnsafe(), typeRef.returnTypeRef.coneTypeUnsafe(),
resolveBuiltInQualified(KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount), typeRef.session).toLookupTag(), resolveBuiltInQualified(KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount), session).toLookupTag(),
typeRef.isMarkedNullable typeRef.isMarkedNullable
) )
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.scopes.impl package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirClassSubstitutionScope( class FirClassSubstitutionScope(
private val session: FirSession,
private val useSiteScope: FirScope, private val useSiteScope: FirScope,
private val substitution: Map<ConeTypeParameterSymbol, ConeKotlinType> private val substitution: Map<ConeTypeParameterSymbol, ConeKotlinType>
) : FirScope { ) : FirScope {
@@ -114,7 +116,7 @@ class FirClassSubstitutionScope(
// TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl // TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl
// As second alternative, we can invent some light-weight kind of FirRegularClass // As second alternative, we can invent some light-weight kind of FirRegularClass
FirMemberFunctionImpl( FirMemberFunctionImpl(
session, this@FirClassSubstitutionScope.session,
psi, psi,
symbol, symbol,
name, name,
@@ -125,7 +127,7 @@ class FirClassSubstitutionScope(
valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType -> valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType ->
with(valueParameter) { with(valueParameter) {
FirValueParameterImpl( FirValueParameterImpl(
session, psi, this@FirClassSubstitutionScope.session, psi,
name, this.returnTypeRef.withReplacedConeType(newType), name, this.returnTypeRef.withReplacedConeType(newType),
defaultValue, isCrossinline, isNoinline, isVararg defaultValue, isCrossinline, isNoinline, isVararg
) )