do not store context in CallForImplicitInvoke

This commit is contained in:
Svetlana Isakova
2013-10-28 16:38:56 +04:00
committed by svtk
parent b726b5070a
commit 381fd35e3e
@@ -191,7 +191,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, task, returnType); Call functionCall = new CallForImplicitInvoke(context.receiverForVariableAsFunctionSecondCall, task, returnType);
DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace(); DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace();
BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create( BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create(
@@ -212,22 +212,22 @@ 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 CallCandidateResolutionContext<CallableDescriptor> context; final ReceiverValue receiverForVariableAsFunctionSecondCall;
final ExpressionReceiver receiverFromVariable; final ExpressionReceiver receiverFromVariable;
final JetSimpleNameExpression invokeExpression; final JetSimpleNameExpression invokeExpression;
private CallForImplicitInvoke(CallCandidateResolutionContext<CallableDescriptor> context, private CallForImplicitInvoke(ReceiverValue receiverForVariableAsFunctionSecondCall,
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.context = context; this.receiverForVariableAsFunctionSecondCall = receiverForVariableAsFunctionSecondCall;
this.receiverFromVariable = new ExpressionReceiver(task.reference, returnType); this.receiverFromVariable = new ExpressionReceiver(task.reference, returnType);
this.invokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression(task.call.getCallElement().getProject(), "invoke"); this.invokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression(task.call.getCallElement().getProject(), "invoke");
} }
@NotNull @NotNull
@Override @Override
public ReceiverValue getExplicitReceiver() { public ReceiverValue getExplicitReceiver() {
return context.receiverForVariableAsFunctionSecondCall; return receiverForVariableAsFunctionSecondCall;
} }
@NotNull @NotNull