Introduce Receiver as a common superclass of QualifierReceiver and ReceiverValue.

QualifierRecevier is no longer a subclass of ReceiverValue.
This commit is contained in:
Dmitry Petrov
2015-10-30 13:46:32 +03:00
parent 2ff0b13808
commit 16dcc0b288
42 changed files with 164 additions and 105 deletions
@@ -128,7 +128,7 @@ private fun TranslationContext.createCallInfo(resolvedCall: ResolvedCall<out Cal
return when (receiverKind) {
EXTENSION_RECEIVER -> explicitReceivers.extensionOrDispatchReceiver
BOTH_RECEIVERS -> explicitReceivers.extensionReceiver
else -> this.getDispatchReceiver(receiverValue)
else -> this.getDispatchReceiver(receiverValue as ReceiverValue)
}
}
@@ -148,7 +148,7 @@ fun computeExplicitReceiversForInvoke(
return when (Pair(dispatchReceiver.exists(), extensionReceiver.exists())) {
Pair(true, true) -> ExplicitReceivers(dispatchReceiverExpression, explicitReceivers.extensionOrDispatchReceiver)
Pair(true, false) -> ExplicitReceivers(dispatchReceiverExpression)
Pair(false, true) -> ExplicitReceivers(translateReceiverAsExpression(extensionReceiver))
Pair(false, true) -> ExplicitReceivers(translateReceiverAsExpression(extensionReceiver as ReceiverValue))
else -> throw AssertionError("'Invoke' resolved call without receivers: $callElement")
}
}
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.psi.KtQualifiedExpression;
import org.jetbrains.kotlin.psi.KtReferenceExpression;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.Receiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.kotlin.types.KotlinType;
@@ -115,7 +116,7 @@ public final class TopLevelFIF extends CompositeFIF {
@Nullable
@Override
protected ExpressionReceiver getExpressionReceiver(@NotNull ResolvedCall<?> resolvedCall) {
ReceiverValue result = resolvedCall.getExtensionReceiver();
Receiver result = resolvedCall.getExtensionReceiver();
return result instanceof ExpressionReceiver ? (ExpressionReceiver) result : null;
}