From 1d3a127f526712a461745188b3e76752663a2a6b Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 3 Jul 2023 16:58:53 +0200 Subject: [PATCH] [FIR] Simplify getSingleExpectForActualOrNull When compatibleOnly == false, the logic was equivalent to returning singleOrNull. The only call-site with compatibleOnly = true was FirElementSerializer, but after the fix for KT-59613, the map will never contain multiple entries when one of the entries is compatible. Assuming that we only run serialization on green code, the map will either contain one compatible entry or no entries which makes the additional check redundant. --- .../fir/serialization/FirElementSerializer.kt | 2 +- .../declarations/ExpectActualAttributes.kt | 20 ++++--------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 64bbbb5b7e0..8a0fc3fde0a 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -702,7 +702,7 @@ class FirElementSerializer private constructor( val builder = ProtoBuf.ValueParameter.newBuilder() val declaresDefaultValue = parameter.defaultValue != null || - function.symbol.getSingleExpectForActualOrNull(compatibleOnly = true).containsDefaultValue(index) + function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index) val flags = Flags.getValueParameterFlags( additionalAnnotations.isNotEmpty() 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 4c2d8dd4f6d..b3e2d0f22ac 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 @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility -import org.jetbrains.kotlin.resolve.multiplatform.compatible private object ExpectForActualAttributeKey : FirDeclarationDataKey() @@ -19,22 +18,11 @@ typealias ExpectForActualData = Map> @SymbolInternals var FirDeclaration.expectForActual: ExpectForActualData? by FirDeclarationDataRegistry.data(ExpectForActualAttributeKey) -fun FirFunctionSymbol<*>.getSingleExpectForActualOrNull(compatibleOnly: Boolean = false) = - (this as FirBasedSymbol<*>).getSingleExpectForActualOrNull(compatibleOnly) as? FirFunctionSymbol<*> +fun FirFunctionSymbol<*>.getSingleExpectForActualOrNull(): FirFunctionSymbol<*>? = + (this as FirBasedSymbol<*>).getSingleExpectForActualOrNull() as? FirFunctionSymbol<*> -fun FirBasedSymbol<*>.getSingleExpectForActualOrNull(compatibleOnly: Boolean = false): FirBasedSymbol<*>? { - val expectForActual = expectForActual ?: return null - var actuals: List>? = null - for ((key, item) in expectForActual) { - if (!compatibleOnly || key.compatible) { - if (actuals == null) { - actuals = item - } else { - return null // Exit if there are more than one list with actuals - } - } - } - return actuals?.singleOrNull() +fun FirBasedSymbol<*>.getSingleExpectForActualOrNull(): FirBasedSymbol<*>? { + return expectForActual?.values?.singleOrNull()?.singleOrNull() } val FirBasedSymbol<*>.expectForActual: ExpectForActualData?