From c1d223dbde67a372f294fc3f84f018b82e622856 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 14 Jul 2020 11:31:20 +0300 Subject: [PATCH] FirTypeIntersectionScope: enhance support of inherited default parameters --- .../scopes/impl/FirTypeIntersectionScope.kt | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index b009e107ac6..e768a82cacd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -95,25 +95,22 @@ class FirTypeIntersectionScope private constructor( // TODO: same code for properties val newSymbol = FirNamedFunctionSymbol(mostSpecific.callableId, mostSpecific.isFakeOverride, mostSpecific) val mostSpecificFunction = mostSpecific.fir - val overriddenWithDefault = - extractedOverrides.firstOrNull { - (it as FirNamedFunctionSymbol).fir.valueParameters.any { parameter -> parameter.defaultValue != null } - }?.fir as? FirSimpleFunction createFunctionCopy(mostSpecific.fir, newSymbol).apply { resolvePhase = mostSpecificFunction.resolvePhase typeParameters += mostSpecificFunction.typeParameters - if (overriddenWithDefault == null) { - valueParameters += mostSpecificFunction.valueParameters - } else { - valueParameters += mostSpecificFunction.valueParameters.zip(overriddenWithDefault.valueParameters) - .map { (mostSpecificParameter, overriddenWithDefaultParameter) -> - if (overriddenWithDefaultParameter.defaultValue != null) - createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply { - annotations += mostSpecificParameter.annotations - }.build() - else - mostSpecificParameter - } + valueParameters += mostSpecificFunction.valueParameters.mapIndexed { index, mostSpecificParameter -> + val overriddenWithDefault = + extractedOverrides.firstOrNull { + (it as FirNamedFunctionSymbol).fir.valueParameters.getOrNull(index)?.defaultValue != null + }?.fir as? FirSimpleFunction + if (overriddenWithDefault == null) { + mostSpecificParameter + } else { + val overriddenWithDefaultParameter = overriddenWithDefault.valueParameters[index] + createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply { + annotations += mostSpecificParameter.annotations + }.build() + } } }.build() overriddenSymbols[newSymbol] = extractedOverrides