Introduction of CastedClassReceiver and its handling in codegen #KT-6744 Fixed

ClassReceiver converted to Kotlin
Also #KT-7617 Fixed
This commit is contained in:
Mikhail Glukhikh
2015-11-10 16:27:58 +03:00
parent e1134b278c
commit 0d35033106
15 changed files with 219 additions and 58 deletions
@@ -37,6 +37,8 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
import org.jetbrains.kotlin.resolve.descriptorUtil.hasLowPriorityInOverloadResolution
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.receivers.CastClassReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER
@@ -234,9 +236,16 @@ public class TaskPrioritizer(
}
val filteredMembers = if (filter == null) membersForThisVariant else membersForThisVariant.filter(filter)
val dispatchReceiver =
if (explicitReceiver.value is ClassReceiver && type != explicitReceiver.value.type) {
CastClassReceiver(explicitReceiver.value.declarationDescriptor, type)
}
else {
explicitReceiver.value
}
convertWithReceivers(
filteredMembers,
explicitReceiver.value,
dispatchReceiver,
NO_RECEIVER,
members,
createKind(DISPATCH_RECEIVER, isExplicit),