From 8ea347653bf4f242ffa4de29402ca0ba5a435b61 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 6 Mar 2019 18:44:14 +0300 Subject: [PATCH] Remove some FirElement.session usages in FIR resolve --- .../org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt | 5 +++-- .../fir/resolve/impl/FirLibrarySymbolProviderImpl.kt | 2 +- .../kotlin/fir/resolve/impl/FirTypeResolverImpl.kt | 8 ++++---- .../kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt | 6 ++++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index da3f6107d17..fc07a86dfc4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -46,7 +46,7 @@ private fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession) val symbol = useSiteSuperType.lookupTag.toSymbol(useSiteSession) if (symbol is FirClassSymbol) { val useSiteScope = symbol.fir.buildUseSiteScope(useSiteSession) - useSiteSuperType.buildSubstitutionScope(useSiteScope, symbol.fir) ?: useSiteScope + useSiteSuperType.buildSubstitutionScope(useSiteSession, useSiteScope, symbol.fir) ?: useSiteScope } else { null } @@ -55,6 +55,7 @@ private fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession) } private fun ConeClassLikeType.buildSubstitutionScope( + session: FirSession, useSiteScope: FirScope, regularClass: FirRegularClass ): FirClassSubstitutionScope? { @@ -65,7 +66,7 @@ private fun ConeClassLikeType.buildSubstitutionScope( typeParameter.symbol to (typeArgument as? ConeTypedProjection)?.type }.filter { (_, type) -> type != null }.toMap() as Map - return FirClassSubstitutionScope(useSiteScope, substitution) + return FirClassSubstitutionScope(session, useSiteScope, substitution) } private tailrec fun ConeClassLikeType.computePartialExpansion(useSiteSession: FirSession): ConeClassLikeType? { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index c3bbefcecb0..e531ce5e231 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -113,7 +113,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider superTypesDeserialized.mapNotNullTo(superTypeRefs) { 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) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt index 73f61be5db2..75ad8491d9f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.name.ClassId -class FirTypeResolverImpl(session: FirSession) : FirTypeResolver { +class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver { private val symbolProvider by lazy { session.getService(FirSymbolProvider::class) @@ -48,7 +48,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver { is FirResolvedTypeRef -> typeRef.coneTypeSafe()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag) is FirUserTypeRef -> { - val qualifierResolver = FirQualifierResolver.getInstance(typeRef.session) + val qualifierResolver = FirQualifierResolver.getInstance(session) var resolvedSymbol: ConeClassifierSymbol? = null scope.processClassifiersByName(typeRef.qualifier.first().name, position) { symbol -> @@ -73,7 +73,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver { resolvedSymbol ?: qualifierResolver.resolveSymbol(typeRef.qualifier) } is FirImplicitBuiltinTypeRef -> { - resolveBuiltInQualified(typeRef.id, typeRef.session) + resolveBuiltInQualified(typeRef.id, session) } else -> null } @@ -102,7 +102,7 @@ class FirTypeResolverImpl(session: FirSession) : FirTypeResolver { (typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type, typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() }, typeRef.returnTypeRef.coneTypeUnsafe(), - resolveBuiltInQualified(KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount), typeRef.session).toLookupTag(), + resolveBuiltInQualified(KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount), session).toLookupTag(), typeRef.isMarkedNullable ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index cbd6f335af2..1c0eb92ad4c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -5,6 +5,7 @@ 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.impl.FirDeclarationStatusImpl 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 class FirClassSubstitutionScope( + private val session: FirSession, private val useSiteScope: FirScope, private val substitution: Map ) : FirScope { @@ -114,7 +116,7 @@ class FirClassSubstitutionScope( // 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 FirMemberFunctionImpl( - session, + this@FirClassSubstitutionScope.session, psi, symbol, name, @@ -125,7 +127,7 @@ class FirClassSubstitutionScope( valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType -> with(valueParameter) { FirValueParameterImpl( - session, psi, + this@FirClassSubstitutionScope.session, psi, name, this.returnTypeRef.withReplacedConeType(newType), defaultValue, isCrossinline, isNoinline, isVararg )