From 3f8beb0b520fed26f4639c87824705940d1103bd Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 15 Dec 2022 13:12:06 +0200 Subject: [PATCH] [FIR] Get rid of `StoreReceiver` All usages of it are replaced with `replaceXXXReceiver` --- .../src/org/jetbrains/kotlin/fir/FirCallResolver.kt | 13 +++++++------ .../FirCallCompletionResultsWriterTransformer.kt | 13 ++++++++----- .../fir/resolve/transformers/TransformUtils.kt | 7 ------- .../resolve/FirExpressionsResolveTransformer.kt | 3 +-- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index c6a5b2b3e64..8b4b14dee4a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.fir.resolve.inference.ResolvedCallableReferenceAtom import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference -import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType @@ -320,12 +319,14 @@ class FirCallResolver( } } - var resultExpression = qualifiedAccess.transformCalleeReference(StoreNameReference, nameReference) + val resultExpression = qualifiedAccess.transformCalleeReference(StoreNameReference, nameReference) if (reducedCandidates.size == 1) { val candidate = reducedCandidates.single() - resultExpression = resultExpression.transformDispatchReceiver(StoreReceiver, candidate.dispatchReceiverExpression()) - resultExpression = resultExpression.transformExtensionReceiver(StoreReceiver, candidate.chosenExtensionReceiverExpression()) - resultExpression.replaceContextReceiverArguments(candidate.contextReceiverArguments()) + resultExpression.apply { + replaceDispatchReceiver(candidate.dispatchReceiverExpression()) + replaceExtensionReceiver(candidate.chosenExtensionReceiverExpression()) + replaceContextReceiverArguments(candidate.contextReceiverArguments()) + } } if (resultExpression is FirExpression) transformer.storeTypeFromCallee(resultExpression) return resultExpression @@ -592,7 +593,7 @@ class FirCallResolver( if (singleCandidate != null) { val symbol = singleCandidate.symbol if (symbol is FirConstructorSymbol && symbol.fir.isInner) { - transformDispatchReceiver(StoreReceiver, singleCandidate.dispatchReceiverExpression()) + replaceDispatchReceiver(singleCandidate.dispatchReceiverExpression()) } replaceContextReceiverArguments(singleCandidate.contextReceiverArguments()) } 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 146d4ffafb0..d019e8eb91b 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 @@ -135,9 +135,10 @@ class FirCallCompletionResultsWriterTransformer( .transformCalleeReference( StoreCalleeReference, calleeReference.toResolvedReference(), - ) - .transformDispatchReceiver(StoreReceiver, dispatchReceiver) - .transformExtensionReceiver(StoreReceiver, extensionReceiver) as T + ).apply { + replaceDispatchReceiver(dispatchReceiver) + replaceExtensionReceiver(extensionReceiver) + } as T result.replaceContextReceiverArguments(subCandidate.contextReceiverArguments()) @@ -388,8 +389,10 @@ class FirCallCompletionResultsWriterTransformer( return callableReferenceAccess.transformCalleeReference( StoreCalleeReference, resolvedReference, - ).transformDispatchReceiver(StoreReceiver, subCandidate.dispatchReceiverExpression()) - .transformExtensionReceiver(StoreReceiver, subCandidate.chosenExtensionReceiverExpression()) + ).apply { + replaceDispatchReceiver(subCandidate.dispatchReceiverExpression()) + replaceExtensionReceiver(subCandidate.chosenExtensionReceiverExpression()) + } } private fun FirNamedReferenceWithCandidate.toErrorReference(diagnostic: ConeDiagnostic): FirNamedReference { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt index f9904d9fc39..fb7ffec100f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt @@ -100,13 +100,6 @@ internal object StoreCalleeReference : FirTransformer() { } } -internal object StoreReceiver : FirTransformer() { - override fun transformElement(element: E, data: FirExpression): E { - @Suppress("UNCHECKED_CAST") - return (data as E) - } -} - internal fun FirValueParameter.transformVarargTypeToArrayType() { if (isVararg) { this.transformTypeToArrayType() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index e417ca6d004..80911be900c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.resolve.dfa.unwrapSmartcastExpression import org.jetbrains.kotlin.fir.resolve.diagnostics.* import org.jetbrains.kotlin.fir.resolve.inference.FirStubInferenceSession import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor -import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver import org.jetbrains.kotlin.fir.resolve.transformers.replaceLambdaArgumentInvocationKinds import org.jetbrains.kotlin.fir.scopes.impl.isWrappedIntegerOperator import org.jetbrains.kotlin.fir.scopes.impl.isWrappedIntegerOperatorForUnsignedType @@ -235,7 +234,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT lastDispatchReceiver } implicitReceiver?.receiverExpression?.let { - superReferenceContainer.transformDispatchReceiver(StoreReceiver, it) + superReferenceContainer.replaceDispatchReceiver(it) } val superTypeRefs = implicitReceiver?.boundSymbol?.fir?.superTypeRefs val superTypeRef = superReference.superTypeRef