[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.replaceReceiverParameter(
|
||||||
lambdaArgument.receiverParameter?.let { receiverParameter ->
|
lambdaArgument.receiverParameter?.let { receiverParameter ->
|
||||||
receiverType?.approximateLambdaInputType()?.let { approximatedType ->
|
receiverType?.approximateLambdaInputType()?.let { approximatedType ->
|
||||||
buildReceiverParameterCopy(receiverParameter) {
|
receiverParameter.apply {
|
||||||
type = receiverParameter.type.resolvedTypeFromPrototype(approximatedType)
|
replaceType(type.resolvedTypeFromPrototype(approximatedType))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -618,11 +618,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
val initialReceiverType = receiverParameter?.type?.coneTypeSafe<ConeKotlinType>()
|
val initialReceiverType = receiverParameter?.type?.coneTypeSafe<ConeKotlinType>()
|
||||||
val resultReceiverType = initialReceiverType?.let { finalSubstitutor.substituteOrNull(it) }
|
val resultReceiverType = initialReceiverType?.let { finalSubstitutor.substituteOrNull(it) }
|
||||||
if (resultReceiverType != null) {
|
if (resultReceiverType != null) {
|
||||||
anonymousFunction.replaceReceiverParameter(
|
receiverParameter.replaceType(receiverParameter.type.resolvedTypeFromPrototype(resultReceiverType))
|
||||||
buildReceiverParameterCopy(receiverParameter) {
|
|
||||||
type = receiverParameter.type.resolvedTypeFromPrototype(resultReceiverType)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
needUpdateLambdaType = true
|
needUpdateLambdaType = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-6
@@ -813,15 +813,12 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
|
|||||||
resolvedLambdaAtom != null -> obtainValueParametersFromResolvedLambdaAtom(resolvedLambdaAtom, lambda)
|
resolvedLambdaAtom != null -> obtainValueParametersFromResolvedLambdaAtom(resolvedLambdaAtom, lambda)
|
||||||
else -> lambda.valueParameters
|
else -> lambda.valueParameters
|
||||||
}
|
}
|
||||||
val returnTypeRefFromResolvedAtom =
|
val returnTypeRefFromResolvedAtom = resolvedLambdaAtom?.returnType?.let { lambda.returnTypeRef.resolvedTypeFromPrototype(it) }
|
||||||
resolvedLambdaAtom?.returnType?.let { lambda.returnTypeRef.resolvedTypeFromPrototype(it) }
|
|
||||||
lambda = buildAnonymousFunctionCopy(lambda) {
|
lambda = buildAnonymousFunctionCopy(lambda) {
|
||||||
receiverParameter = lambda.receiverParameter?.takeIf { it.type !is FirImplicitTypeRef }
|
receiverParameter = lambda.receiverParameter?.takeIf { it.type !is FirImplicitTypeRef }
|
||||||
?: resolvedLambdaAtom?.receiver?.let { coneKotlinType ->
|
?: resolvedLambdaAtom?.receiver?.let { coneKotlinType ->
|
||||||
lambda.receiverParameter?.let {
|
lambda.receiverParameter?.apply {
|
||||||
buildReceiverParameterCopy(it) {
|
replaceType(type.resolvedTypeFromPrototype(coneKotlinType))
|
||||||
type = it.type.resolvedTypeFromPrototype(coneKotlinType)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ abstract class FirReceiverParameter : FirPureAbstractElement(), FirAnnotationCon
|
|||||||
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||||
transformer.transformReceiverParameter(this, data) as E
|
transformer.transformReceiverParameter(this, data) as E
|
||||||
|
|
||||||
|
abstract fun replaceType(newType: FirTypeRef)
|
||||||
|
|
||||||
abstract fun <D> transformType(transformer: FirTransformer<D>, data: D): FirReceiverParameter
|
abstract fun <D> transformType(transformer: FirTransformer<D>, data: D): FirReceiverParameter
|
||||||
|
|
||||||
abstract override fun <D> transformAnnotations(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)
|
annotations.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun replaceType(newType: FirTypeRef) {
|
||||||
|
type = newType
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -394,7 +394,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
}
|
}
|
||||||
|
|
||||||
receiverParameter.configure {
|
receiverParameter.configure {
|
||||||
+field("type", typeRef).withTransform()
|
+field("type", typeRef).withTransform().withReplace()
|
||||||
+annotations
|
+annotations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user