Remove some FirElement.session usages in FIR resolve
This commit is contained in:
@@ -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? {
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user