[FIR] drop redundant receiver copy
^KT-54417
This commit is contained in:
committed by
Space Team
parent
f67030f035
commit
3cd85a4622
+2
-2
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -618,11 +618,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
val initialReceiverType = receiverParameter?.type?.coneTypeSafe<ConeKotlinType>()
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ abstract class FirReceiverParameter : FirPureAbstractElement(), FirAnnotationCon
|
||||
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformReceiverParameter(this, data) as E
|
||||
|
||||
abstract fun replaceType(newType: FirTypeRef)
|
||||
|
||||
abstract fun <D> transformType(transformer: FirTransformer<D>, data: D): FirReceiverParameter
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirReceiverParameter
|
||||
|
||||
+4
@@ -43,4 +43,8 @@ internal class FirReceiverParameterImpl(
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceType(newType: FirTypeRef) {
|
||||
type = newType
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -394,7 +394,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
}
|
||||
|
||||
receiverParameter.configure {
|
||||
+field("type", typeRef).withTransform()
|
||||
+field("type", typeRef).withTransform().withReplace()
|
||||
+annotations
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user