From 1123f97a15ccbe0a9369ba615fc1378ce0cb7e2c Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 22 Mar 2021 13:55:57 +0100 Subject: [PATCH] FIR: ensure declaration is resolved to types in FirStandardOverrideChecker --- .../kotlin/fir/resolve/transformers/PhaseUtils.kt | 8 ++++++++ .../kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt index 1957b5de6c5..4c14c018cbb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -31,6 +32,13 @@ fun AbstractFirBasedSymbol<*>.ensureResolved( resolver.ensureResolved(this, requiredPhase) } +fun FirSymbolOwner<*>.ensureResolved( + requiredPhase: FirResolvePhase, + useSiteSession: FirSession, +) { + symbol.ensureResolved(requiredPhase, useSiteSession) +} + fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( useSiteSession: FirSession, ) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt index 1fb60f89f84..60768a25694 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt @@ -9,13 +9,14 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor +import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.SimpleTypeMarker -class FirStandardOverrideChecker(session: FirSession) : FirAbstractOverrideChecker() { +class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractOverrideChecker() { private val context: ConeTypeContext = session.typeContext private fun isEqualTypes(substitutedCandidateType: ConeKotlinType, substitutedBaseType: ConeKotlinType): Boolean { @@ -116,6 +117,9 @@ class FirStandardOverrideChecker(session: FirSession) : FirAbstractOverrideCheck val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false + overrideCandidate.ensureResolved(FirResolvePhase.TYPES, useSiteSession = session) + baseDeclaration.ensureResolved(FirResolvePhase.TYPES, useSiteSession = session) + if (!isEqualReceiverTypes(overrideCandidate.receiverTypeRef, baseDeclaration.receiverTypeRef, substitutor)) return false return overrideCandidate.valueParameters.zip(baseDeclaration.valueParameters).all { (memberParam, selfParam) ->