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)
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<ConeTypeParameterSymbol, ConeKotlinType>
return FirClassSubstitutionScope(useSiteScope, substitution)
return FirClassSubstitutionScope(session, useSiteScope, substitution)
}
private tailrec fun ConeClassLikeType.computePartialExpansion(useSiteSession: FirSession): ConeClassLikeType? {
@@ -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)
}
@@ -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<ConeLookupTagBasedType>()?.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
)
}
@@ -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<ConeTypeParameterSymbol, ConeKotlinType>
) : 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
)