[FIR] Prohibit calling functions with dynamic receiver over non-dynamics

^KT-63071 Fixed
This commit is contained in:
Nikolay Lunyak
2023-11-28 12:08:05 +02:00
committed by Space Team
parent c69c34ff8b
commit 875e2b0cd6
16 changed files with 61 additions and 11 deletions
@@ -93,6 +93,10 @@ class InapplicableWrongReceiver(
val actualType: ConeKotlinType? = null,
) : ResolutionDiagnostic(INAPPLICABLE_WRONG_RECEIVER)
class DynamicReceiverExpectedButWasNonDynamic(
val actualType: ConeKotlinType,
) : ResolutionDiagnostic(INAPPLICABLE_WRONG_RECEIVER)
object NoCompanionObject : ResolutionDiagnostic(K2_NO_COMPANION_OBJECT)
class UnsafeCall(val actualType: ConeKotlinType) : ResolutionDiagnostic(UNSAFE_CALL)
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.expressions.FirOperation
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.calls.AbstractCandidate
import org.jetbrains.kotlin.fir.resolve.calls.ResolutionDiagnostic
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -120,6 +121,11 @@ class ConeInapplicableWrongReceiver(override val candidates: Collection<Abstract
get() = "None of the following candidates is applicable because of receiver type mismatch: ${
candidateSymbols.map { describeSymbol(it) }
}"
val primaryDiagnostic: ResolutionDiagnostic?
get() = candidates.singleOrNull()
?.diagnostics
?.singleOrNull { it.applicability == CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER }
}
class ConeInapplicableCandidateError(