From 988dbfc5c828f90c38493230ecdb0ea0b42187b5 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 3 Jul 2023 17:22:27 +0200 Subject: [PATCH] [FIR] Extract common helper for checking of (expect) default value --- .../kotlin/fir/serialization/FirElementSerializer.kt | 3 +-- .../kotlin/fir/declarations/declarationUtils.kt | 8 ++++---- .../kotlin/fir/resolve/FirDefaultParametersResolver.kt | 9 ++------- .../fir/resolve/calls/FirArgumentsToParametersMapper.kt | 2 +- 4 files changed, 8 insertions(+), 14 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 8a0fc3fde0a..68f22bc98f6 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 @@ -701,8 +701,7 @@ class FirElementSerializer private constructor( ): ProtoBuf.ValueParameter.Builder = whileAnalysing(session, parameter) { val builder = ProtoBuf.ValueParameter.newBuilder() - val declaresDefaultValue = parameter.defaultValue != null || - function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index) + val declaresDefaultValue = function.itOrExpectHasDefaultParameterValue(index) val flags = Flags.getValueParameterFlags( additionalAnnotations.isNotEmpty() diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt index a910e7ea739..e57dbd07549 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/declarationUtils.kt @@ -116,7 +116,7 @@ inline val FirBasedSymbol<*>.isJavaOrEnhancement: Boolean get() = origin.isJavaOrEnhancement || (fir as? FirCallableDeclaration)?.importedFromObjectOrStaticData?.original?.isJavaOrEnhancement == true -fun FirFunctionSymbol<*>?.containsDefaultValue(index: Int): Boolean { - if (this == null) return false - return this.fir.valueParameters[index].defaultValue != null -} +private fun FirFunction.containsDefaultValue(index: Int): Boolean = valueParameters[index].defaultValue != null + +fun FirFunction.itOrExpectHasDefaultParameterValue(index: Int): Boolean = + containsDefaultValue(index) || symbol.getSingleExpectForActualOrNull()?.fir?.containsDefaultValue(index) == true diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirDefaultParametersResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirDefaultParametersResolver.kt index 8ef8e86cbdd..d32fc719d44 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirDefaultParametersResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirDefaultParametersResolver.kt @@ -16,14 +16,11 @@ class FirDefaultParametersResolver : FirSessionComponent { fun declaresDefaultValue( session: FirSession, scopeSession: ScopeSession, - valueParameter: FirValueParameter, function: FirFunction, originScope: FirScope?, index: Int, ): Boolean { - if (valueParameter.defaultValue != null || function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index)) { - return true - } + if (function.itOrExpectHasDefaultParameterValue(index)) return true if (function !is FirSimpleFunction) return false val symbol = function.symbol val typeScope = when (originScope) { @@ -44,9 +41,7 @@ class FirDefaultParametersResolver : FirSessionComponent { var result = false typeScope.processOverriddenFunctions(symbol) { overridden -> - if (overridden.containsDefaultValue(index) || - overridden.getSingleExpectForActualOrNull().containsDefaultValue(index) - ) { + if (overridden.fir.itOrExpectHasDefaultParameterValue(index)) { result = true return@processOverriddenFunctions ProcessorAction.STOP } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt index b1dc13ded26..ab23ecf9dad 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt @@ -304,7 +304,7 @@ private class FirCallArgumentsProcessor( if (!result.containsKey(parameter)) { when { bodyResolveComponents.session.defaultParameterResolver.declaresDefaultValue( - useSiteSession, bodyResolveComponents.scopeSession, parameter, function, originScope, index + useSiteSession, bodyResolveComponents.scopeSession, function, originScope, index ) -> result[parameter] = ResolvedCallArgument.DefaultArgument parameter.isVararg ->