From 2d51bb233d1bea2ac388d682570eb928c8991b5c Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Fri, 22 Sep 2023 15:13:50 +0200 Subject: [PATCH] [FIR] Refactor: extract function which returns single compatible expect ...symbol for actual symbol. It will be reused in next commit. ^KT-62036 --- .../checkers/declaration/FirExpectActualDeclarationChecker.kt | 2 +- .../kotlin/fir/declarations/ExpectActualAttributes.kt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt index 679f4985fb0..560c054d536 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt @@ -188,7 +188,7 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() { else -> {} } // We want to report errors even if a candidate is incompatible, but it's single - val expectedSingleCandidate = compatibilityToMembersMap[Compatible]?.singleOrNull() + val expectedSingleCandidate = symbol.getSingleCompatibleExpectForActualOrNull() ?: symbol.getSingleExpectForActualOrNull() if (expectedSingleCandidate != null) { checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/ExpectActualAttributes.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/ExpectActualAttributes.kt index 708226f4791..a72aa014206 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/ExpectActualAttributes.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/ExpectActualAttributes.kt @@ -27,6 +27,10 @@ fun FirBasedSymbol<*>.getSingleExpectForActualOrNull(): FirBasedSymbol<*>? { return expectForActual?.values?.singleOrNull()?.singleOrNull() } +fun FirBasedSymbol<*>.getSingleCompatibleExpectForActualOrNull(): FirBasedSymbol<*>? { + return expectForActual?.get(ExpectActualCompatibility.Compatible)?.singleOrNull() +} + fun FirBasedSymbol<*>.getSingleCompatibleOrWeaklyIncompatibleExpectForActualOrNull(): FirBasedSymbol<*>? { val expectForActual = expectForActual ?: return null val compatibleOrWeakCompatible: List> =