FIR: ensure declaration is resolved to types in FirStandardOverrideChecker

This commit is contained in:
Ilya Kirillov
2021-03-22 13:55:57 +01:00
parent f7829d0bea
commit 1123f97a15
2 changed files with 13 additions and 1 deletions
@@ -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,
) {
@@ -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) ->