FirTypeIntersectionScope: enhance support of inherited default parameters

This commit is contained in:
Mikhail Glukhikh
2020-07-14 11:31:20 +03:00
parent c46fac3464
commit c1d223dbde
@@ -95,25 +95,22 @@ class FirTypeIntersectionScope private constructor(
// TODO: same code for properties // TODO: same code for properties
val newSymbol = FirNamedFunctionSymbol(mostSpecific.callableId, mostSpecific.isFakeOverride, mostSpecific) val newSymbol = FirNamedFunctionSymbol(mostSpecific.callableId, mostSpecific.isFakeOverride, mostSpecific)
val mostSpecificFunction = mostSpecific.fir 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 { createFunctionCopy(mostSpecific.fir, newSymbol).apply {
resolvePhase = mostSpecificFunction.resolvePhase resolvePhase = mostSpecificFunction.resolvePhase
typeParameters += mostSpecificFunction.typeParameters typeParameters += mostSpecificFunction.typeParameters
if (overriddenWithDefault == null) { valueParameters += mostSpecificFunction.valueParameters.mapIndexed { index, mostSpecificParameter ->
valueParameters += mostSpecificFunction.valueParameters val overriddenWithDefault =
} else { extractedOverrides.firstOrNull {
valueParameters += mostSpecificFunction.valueParameters.zip(overriddenWithDefault.valueParameters) (it as FirNamedFunctionSymbol).fir.valueParameters.getOrNull(index)?.defaultValue != null
.map { (mostSpecificParameter, overriddenWithDefaultParameter) -> }?.fir as? FirSimpleFunction
if (overriddenWithDefaultParameter.defaultValue != null) if (overriddenWithDefault == null) {
createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply { mostSpecificParameter
annotations += mostSpecificParameter.annotations } else {
}.build() val overriddenWithDefaultParameter = overriddenWithDefault.valueParameters[index]
else createValueParameterCopy(mostSpecificParameter, overriddenWithDefaultParameter.defaultValue).apply {
mostSpecificParameter annotations += mostSpecificParameter.annotations
} }.build()
}
} }
}.build() }.build()
overriddenSymbols[newSymbol] = extractedOverrides overriddenSymbols[newSymbol] = extractedOverrides