KT-16438 Strange dispatch receiver for descriptors of delegated members
Provide proper dispatch receiver parameter for delegated members. Use dispatch receiver parameter for delegated members in IR generation for delegated member body (and check that the receiver has corresponding type).
This commit is contained in:
@@ -70,7 +70,14 @@ class DelegationResolver<T : CallableMemberDescriptor> private constructor(
|
||||
getDelegatableMembers(delegatedInterfaceType).map { memberDescriptor ->
|
||||
val newModality = if (memberDescriptor.modality == Modality.ABSTRACT) Modality.OPEN else memberDescriptor.modality
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(memberDescriptor.copy(ownerDescriptor, newModality, Visibilities.INHERITED, DELEGATION, false) as T)
|
||||
memberDescriptor.newCopyBuilder()
|
||||
.setOwner(ownerDescriptor)
|
||||
.setDispatchReceiverParameter(ownerDescriptor.thisAsReceiverParameter)
|
||||
.setModality(newModality)
|
||||
.setVisibility(Visibilities.INHERITED)
|
||||
.setKind(DELEGATION)
|
||||
.setCopyOverrides(false)
|
||||
.build() as T
|
||||
}
|
||||
|
||||
private fun checkClashWithOtherDelegatedMember(candidate: T, delegatedMembers: Collection<T>): Boolean {
|
||||
|
||||
Reference in New Issue
Block a user