From 0bf5899bf52653b410b61158c7ab84ebc43e91b6 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 13 Mar 2013 18:44:02 +0400 Subject: [PATCH] refactoring: do not create extra anonymous class for CallForImplicitInvoke case --- .../lang/resolve/calls/CallTransformer.java | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java index 4b4e27c1c36..5053b386537 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java @@ -189,7 +189,7 @@ public class CallTransformer { final ResolvedCallWithTrace variableResolvedCall = (ResolvedCallWithTrace)context.candidateCall; - Call functionCall = createFunctionCall(context, task, returnType); + Call functionCall = new CallForImplicitInvoke(context, task, returnType); DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace(); BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create( @@ -207,51 +207,51 @@ public class CallTransformer { } }); } - - private Call createFunctionCall(final CallCandidateResolutionContext context, - final ResolutionTask task, JetType returnType) { - - final ExpressionReceiver receiverFromVariable = new ExpressionReceiver(task.reference, returnType); - final JetSimpleNameExpression invokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression( - task.call.getCallElement().getProject(), "invoke"); - - return new CallForImplicitInvoke(task.call) { - @NotNull - @Override - public ReceiverValue getExplicitReceiver() { - return context.receiverForVariableAsFunctionSecondCall; - } - - @NotNull - @Override - public ReceiverValue getThisObject() { - return receiverFromVariable; - } - - @Override - public JetExpression getCalleeExpression() { - return invokeExpression; - } - - @NotNull - @Override - public PsiElement getCallElement() { - if (task.call.getCallElement() instanceof JetCallElement) { - //to report errors properly - JetValueArgumentList list = ((JetCallElement)task.call.getCallElement()).getValueArgumentList(); - if (list != null) { - return list; - } - } - return invokeExpression; - } - }; - } }; public static class CallForImplicitInvoke extends DelegatingCall { - public CallForImplicitInvoke(@NotNull Call delegate) { - super(delegate); + final Call outerCall; + final CallCandidateResolutionContext context; + final ExpressionReceiver receiverFromVariable; + final JetSimpleNameExpression invokeExpression; + + private CallForImplicitInvoke(CallCandidateResolutionContext context, + ResolutionTask task, JetType returnType) { + super(task.call); + this.outerCall = task.call; + this.context = context; + this.receiverFromVariable = new ExpressionReceiver(task.reference, returnType); + this.invokeExpression = (JetSimpleNameExpression) JetPsiFactory.createExpression(task.call.getCallElement().getProject(), "invoke"); } + @NotNull + @Override + public ReceiverValue getExplicitReceiver() { + return context.receiverForVariableAsFunctionSecondCall; + } + + @NotNull + @Override + public ReceiverValue getThisObject() { + return receiverFromVariable; + } + + @Override + public JetExpression getCalleeExpression() { + return invokeExpression; + } + + @NotNull + @Override + public PsiElement getCallElement() { + if (outerCall.getCallElement() instanceof JetCallElement) { + //to report errors properly + JetValueArgumentList list = ((JetCallElement)outerCall.getCallElement()).getValueArgumentList(); + if (list != null) { + return list; + } + } + return invokeExpression; + } + } }