receiverForVariableAsFunctionSecondCall -> explicitExtensionReceiver
receiverFromVariable -> calleeExpressionAsThisObject
This commit is contained in:
Svetlana Isakova
2014-03-17 10:20:58 +04:00
parent 0a9dbbea79
commit 446aed5cf1
2 changed files with 14 additions and 14 deletions
@@ -119,7 +119,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
CallCandidateResolutionContext<CallableDescriptor> contextWithoutReceiver = createContextWithChainedTrace( CallCandidateResolutionContext<CallableDescriptor> contextWithoutReceiver = createContextWithChainedTrace(
candidateWithoutReceiver, variableCallWithoutReceiver, candidateTrace, task); candidateWithoutReceiver, variableCallWithoutReceiver, candidateTrace, task);
contextWithoutReceiver.receiverForVariableAsFunctionSecondCall = variableCall.getExplicitReceiver(); contextWithoutReceiver.explicitExtensionReceiverForInvoke = variableCall.getExplicitReceiver();
return Lists.newArrayList(contextWithReceiver, contextWithoutReceiver); return Lists.newArrayList(contextWithReceiver, contextWithoutReceiver);
} }
@@ -192,7 +192,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
final ResolvedCallWithTrace<VariableDescriptor> variableResolvedCall = (ResolvedCallWithTrace)context.candidateCall; final ResolvedCallWithTrace<VariableDescriptor> variableResolvedCall = (ResolvedCallWithTrace)context.candidateCall;
Call functionCall = new CallForImplicitInvoke(context.receiverForVariableAsFunctionSecondCall, task, returnType); Call functionCall = new CallForImplicitInvoke(context.explicitExtensionReceiverForInvoke, task, returnType);
DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace(); DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace();
BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create( BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create(
@@ -215,33 +215,33 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
public static class CallForImplicitInvoke extends DelegatingCall { public static class CallForImplicitInvoke extends DelegatingCall {
final Call outerCall; final Call outerCall;
final ReceiverValue receiverForVariableAsFunctionSecondCall; final ReceiverValue explicitExtensionReceiver;
final ExpressionReceiver receiverFromVariable; final ExpressionReceiver calleeExpressionAsThisObject;
final JetSimpleNameExpression invokeExpression; final JetSimpleNameExpression fakeInvokeExpression;
private CallForImplicitInvoke(ReceiverValue receiverForVariableAsFunctionSecondCall, private CallForImplicitInvoke(ReceiverValue explicitExtensionReceiver,
ResolutionTask<CallableDescriptor, FunctionDescriptor> task, JetType returnType) { ResolutionTask<CallableDescriptor, FunctionDescriptor> task, JetType returnType) {
super(task.call); super(task.call);
this.outerCall = task.call; this.outerCall = task.call;
this.receiverForVariableAsFunctionSecondCall = receiverForVariableAsFunctionSecondCall; this.explicitExtensionReceiver = explicitExtensionReceiver;
this.receiverFromVariable = new ExpressionReceiver(task.reference, returnType); this.calleeExpressionAsThisObject = new ExpressionReceiver(task.reference, returnType);
this.invokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression(task.call.getCallElement().getProject(), "invoke"); this.fakeInvokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression(task.call.getCallElement().getProject(), "invoke");
} }
@NotNull @NotNull
@Override @Override
public ReceiverValue getExplicitReceiver() { public ReceiverValue getExplicitReceiver() {
return receiverForVariableAsFunctionSecondCall; return explicitExtensionReceiver;
} }
@NotNull @NotNull
@Override @Override
public ReceiverValue getThisObject() { public ReceiverValue getThisObject() {
return receiverFromVariable; return calleeExpressionAsThisObject;
} }
@Override @Override
public JetExpression getCalleeExpression() { public JetExpression getCalleeExpression() {
return invokeExpression; return fakeInvokeExpression;
} }
@NotNull @NotNull
@@ -254,7 +254,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
return list; return list;
} }
} }
return invokeExpression; return fakeInvokeExpression;
} }
@NotNull @NotNull
@@ -34,7 +34,7 @@ import org.jetbrains.jet.lang.types.expressions.LabelResolver;
public final class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> { public final class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> {
public final ResolvedCallImpl<D> candidateCall; public final ResolvedCallImpl<D> candidateCall;
public final TracingStrategy tracing; public final TracingStrategy tracing;
public ReceiverValue receiverForVariableAsFunctionSecondCall = ReceiverValue.NO_RECEIVER; public ReceiverValue explicitExtensionReceiverForInvoke = ReceiverValue.NO_RECEIVER;
private CallCandidateResolutionContext( private CallCandidateResolutionContext(
@NotNull ResolvedCallImpl<D> candidateCall, @NotNull ResolvedCallImpl<D> candidateCall,