[FE] Handle context receivers in NewAbstractResolvedCall
This commit is contained in:
committed by
TeamCityServer
parent
6d1e5637a7
commit
b44da21f59
+1
@@ -46,6 +46,7 @@ sealed class NewAbstractResolvedCall<D : CallableDescriptor> : ResolvedCall<D> {
|
||||
|
||||
abstract fun updateDispatchReceiverType(newType: KotlinType)
|
||||
abstract fun updateExtensionReceiverType(newType: KotlinType)
|
||||
abstract fun updateContextReceiverTypes(newTypes: List<KotlinType>)
|
||||
abstract fun containsOnlyOnlyInputTypesErrors(): Boolean
|
||||
abstract fun setResultingSubstitutor(substitutor: NewTypeSubstitutor?)
|
||||
abstract fun argumentToParameterMap(
|
||||
|
||||
+6
@@ -65,6 +65,7 @@ class NewCallableReferenceResolvedCall<D : CallableDescriptor>(
|
||||
|
||||
override fun getExtensionReceiver(): ReceiverValue? = extensionReceiver
|
||||
override fun getDispatchReceiver(): ReceiverValue? = dispatchReceiver
|
||||
override fun getContextReceivers() = emptyList<ReceiverValue>()
|
||||
|
||||
override fun updateDispatchReceiverType(newType: KotlinType) {
|
||||
if (dispatchReceiver?.type == newType) return
|
||||
@@ -76,6 +77,11 @@ class NewCallableReferenceResolvedCall<D : CallableDescriptor>(
|
||||
extensionReceiver = extensionReceiver?.replaceType(newType)
|
||||
}
|
||||
|
||||
override fun updateContextReceiverTypes(newTypes: List<KotlinType>) {
|
||||
// TODO: Update context receivers
|
||||
return
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun getCandidateDescriptor(): D = when (resolvedAtom) {
|
||||
is ResolvedCallableReferenceCallAtom -> resolvedAtom.candidateDescriptor as D
|
||||
|
||||
@@ -48,9 +48,11 @@ class NewResolvedCallImpl<D : CallableDescriptor>(
|
||||
private var argumentTypeForConstantConvertedMap: Map<KtExpression, IntegerValueTypeConstant>? = null
|
||||
private var extensionReceiver = resolvedCallAtom.extensionReceiverArgument?.receiver?.receiverValue
|
||||
private var dispatchReceiver = resolvedCallAtom.dispatchReceiverArgument?.receiver?.receiverValue
|
||||
private var contextReceivers = resolvedCallAtom.contextReceiversArguments.map { it.receiver.receiverValue }
|
||||
|
||||
override fun getExtensionReceiver(): ReceiverValue? = extensionReceiver
|
||||
override fun getDispatchReceiver(): ReceiverValue? = dispatchReceiver
|
||||
override fun getContextReceivers(): List<ReceiverValue> = contextReceivers
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun getCandidateDescriptor(): D = resolvedCallAtom.candidateDescriptor as D
|
||||
@@ -67,6 +69,11 @@ class NewResolvedCallImpl<D : CallableDescriptor>(
|
||||
extensionReceiver = extensionReceiver?.replaceType(newType)
|
||||
}
|
||||
|
||||
override fun updateContextReceiverTypes(newTypes: List<KotlinType>) {
|
||||
if (contextReceivers.size != newTypes.size) return
|
||||
contextReceivers = contextReceivers.zip(newTypes).map { (receiver, type) -> receiver.replaceType(type) }
|
||||
}
|
||||
|
||||
override fun getStatus(): ResolutionStatus = getResultApplicability(diagnostics).toResolutionStatus()
|
||||
|
||||
override fun getTypeArguments(): Map<TypeParameterDescriptor, KotlinType> {
|
||||
|
||||
+2
-1
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstituto
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCallAtom
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument
|
||||
import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeApproximator
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
@@ -34,6 +33,7 @@ class NewVariableAsFunctionResolvedCallImpl(
|
||||
override fun getCandidateDescriptor() = functionCall.candidateDescriptor
|
||||
override fun getResultingDescriptor() = functionCall.resultingDescriptor
|
||||
override fun getExtensionReceiver() = functionCall.extensionReceiver
|
||||
override fun getContextReceivers() = functionCall.contextReceivers
|
||||
override fun getDispatchReceiver() = functionCall.dispatchReceiver
|
||||
override fun getExplicitReceiverKind() = functionCall.explicitReceiverKind
|
||||
override fun getTypeArguments() = functionCall.typeArguments
|
||||
@@ -41,6 +41,7 @@ class NewVariableAsFunctionResolvedCallImpl(
|
||||
override fun containsOnlyOnlyInputTypesErrors() = functionCall.containsOnlyOnlyInputTypesErrors()
|
||||
override fun updateDispatchReceiverType(newType: KotlinType) = functionCall.updateDispatchReceiverType(newType)
|
||||
override fun updateExtensionReceiverType(newType: KotlinType) = functionCall.updateExtensionReceiverType(newType)
|
||||
override fun updateContextReceiverTypes(newTypes: List<KotlinType>) = functionCall.updateContextReceiverTypes(newTypes)
|
||||
override fun argumentToParameterMap(
|
||||
resultingDescriptor: CallableDescriptor,
|
||||
valueArguments: Map<ValueParameterDescriptor, ResolvedValueArgument>
|
||||
|
||||
Reference in New Issue
Block a user