[FIR] Get rid of StoreReceiver

All usages of it are replaced with `replaceXXXReceiver`
This commit is contained in:
Dmitriy Novozhilov
2022-12-15 13:12:06 +02:00
committed by Space Team
parent d45ae59d33
commit 3f8beb0b52
4 changed files with 16 additions and 20 deletions
@@ -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())
}
@@ -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 {
@@ -100,13 +100,6 @@ internal object StoreCalleeReference : FirTransformer<FirNamedReference>() {
}
}
internal object StoreReceiver : FirTransformer<FirExpression>() {
override fun <E : FirElement> transformElement(element: E, data: FirExpression): E {
@Suppress("UNCHECKED_CAST")
return (data as E)
}
}
internal fun FirValueParameter.transformVarargTypeToArrayType() {
if (isVararg) {
this.transformTypeToArrayType()
@@ -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