diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index edac054f565..be24f2aff10 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -309,8 +309,8 @@ class FirCallCompleter( lambdaArgument.replaceReceiverParameter( lambdaArgument.receiverParameter?.let { receiverParameter -> receiverType?.approximateLambdaInputType()?.let { approximatedType -> - buildReceiverParameterCopy(receiverParameter) { - type = receiverParameter.type.resolvedTypeFromPrototype(approximatedType) + receiverParameter.apply { + replaceType(type.resolvedTypeFromPrototype(approximatedType)) } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt index dcbe05f5562..f3e7f973574 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt @@ -618,11 +618,7 @@ class FirCallCompletionResultsWriterTransformer( val initialReceiverType = receiverParameter?.type?.coneTypeSafe() val resultReceiverType = initialReceiverType?.let { finalSubstitutor.substituteOrNull(it) } if (resultReceiverType != null) { - anonymousFunction.replaceReceiverParameter( - buildReceiverParameterCopy(receiverParameter) { - type = receiverParameter.type.resolvedTypeFromPrototype(resultReceiverType) - } - ) + receiverParameter.replaceType(receiverParameter.type.resolvedTypeFromPrototype(resultReceiverType)) needUpdateLambdaType = true } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 7c82fca8bdc..6f1bc41af71 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -813,15 +813,12 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve resolvedLambdaAtom != null -> obtainValueParametersFromResolvedLambdaAtom(resolvedLambdaAtom, lambda) else -> lambda.valueParameters } - val returnTypeRefFromResolvedAtom = - resolvedLambdaAtom?.returnType?.let { lambda.returnTypeRef.resolvedTypeFromPrototype(it) } + val returnTypeRefFromResolvedAtom = resolvedLambdaAtom?.returnType?.let { lambda.returnTypeRef.resolvedTypeFromPrototype(it) } lambda = buildAnonymousFunctionCopy(lambda) { receiverParameter = lambda.receiverParameter?.takeIf { it.type !is FirImplicitTypeRef } ?: resolvedLambdaAtom?.receiver?.let { coneKotlinType -> - lambda.receiverParameter?.let { - buildReceiverParameterCopy(it) { - type = it.type.resolvedTypeFromPrototype(coneKotlinType) - } + lambda.receiverParameter?.apply { + replaceType(type.resolvedTypeFromPrototype(coneKotlinType)) } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirReceiverParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirReceiverParameter.kt index 46ae1a4e705..b3bc966bf89 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirReceiverParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirReceiverParameter.kt @@ -29,6 +29,8 @@ abstract class FirReceiverParameter : FirPureAbstractElement(), FirAnnotationCon override fun transform(transformer: FirTransformer, data: D): E = transformer.transformReceiverParameter(this, data) as E + abstract fun replaceType(newType: FirTypeRef) + abstract fun transformType(transformer: FirTransformer, data: D): FirReceiverParameter abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirReceiverParameter diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirReceiverParameterImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirReceiverParameterImpl.kt index f55e15de0b4..ced89679623 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirReceiverParameterImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirReceiverParameterImpl.kt @@ -43,4 +43,8 @@ internal class FirReceiverParameterImpl( annotations.transformInplace(transformer, data) return this } + + override fun replaceType(newType: FirTypeRef) { + type = newType + } } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index fdfad243b76..01e2d3309a0 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -394,7 +394,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } receiverParameter.configure { - +field("type", typeRef).withTransform() + +field("type", typeRef).withTransform().withReplace() +annotations }