FIR: ensure declaration is resolved to types in FirStandardOverrideChecker
This commit is contained in:
@@ -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,
|
||||
) {
|
||||
|
||||
+5
-1
@@ -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) ->
|
||||
|
||||
Reference in New Issue
Block a user