diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index d870b349f9d..d224e18694d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -2676,7 +2676,7 @@ public class ExpressionCodegen extends JetVisitor { ResolvedCall resolvedCall = bindingContext.get(BindingContext.COMPONENT_RESOLVED_CALL, variableDeclaration); assert resolvedCall != null : "Resolved call is null for " + variableDeclaration.getText(); - Call call = CallMaker.makeCall(initializerAsReceiver, (JetExpression) null); + Call call = makeFakeCall(initializerAsReceiver); invokeFunction(call, StackValue.none(), resolvedCall); return null; } @@ -3419,8 +3419,14 @@ The "returned" value of try expression with no finally is either the last expres v.athrow(); } + private Call makeFakeCall(ReceiverDescriptor initializerAsReceiver) { + JetSimpleNameExpression fake = JetPsiFactory.createSimpleName(state.getInjector().getProject(), "fake"); + return CallMaker.makeCall(fake, initializerAsReceiver); + } + @Override public String toString() { return context.getContextDescriptor().toString(); } + } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java index b7774589100..b3b85d7b01e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallMaker.java @@ -76,16 +76,16 @@ public class CallMaker { private final PsiElement callElement; private final ReceiverDescriptor explicitReceiver; - private ASTNode callOperationNode; + private final ASTNode callOperationNode; private final JetExpression calleeExpression; private final List valueArguments; private final Call.CallType callType; - protected CallImpl(@Nullable PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, @Nullable JetExpression calleeExpression, @NotNull List valueArguments) { + protected CallImpl(@NotNull PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, @Nullable JetExpression calleeExpression, @NotNull List valueArguments) { this(callElement, explicitReceiver, callOperationNode, calleeExpression, valueArguments, CallType.DEFAULT); } - protected CallImpl(@Nullable PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, + protected CallImpl(@NotNull PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, @Nullable JetExpression calleeExpression, @NotNull List valueArguments, @NotNull CallType callType) { this.callElement = callElement; this.explicitReceiver = explicitReceiver; @@ -238,31 +238,37 @@ public class CallMaker { return ReceiverDescriptor.NO_RECEIVER; } + @Override @Nullable public JetExpression getCalleeExpression() { return callElement.getCalleeExpression(); } + @Override @Nullable public JetValueArgumentList getValueArgumentList() { return callElement.getValueArgumentList(); } + @Override @NotNull public List getValueArguments() { return callElement.getValueArguments(); } + @Override @NotNull public List getFunctionLiteralArguments() { return callElement.getFunctionLiteralArguments(); } + @Override @NotNull public List getTypeArguments() { return callElement.getTypeArguments(); } + @Override @Nullable public JetTypeArgumentList getTypeArgumentList() { return callElement.getTypeArgumentList(); @@ -287,7 +293,7 @@ public class CallMaker { }; } - public static Call makeCall(@NotNull ReceiverDescriptor explicitReceiver, @Nullable JetExpression calleeExpression) { - return new CallImpl(null, explicitReceiver, null, calleeExpression, Collections.emptyList()); + public static Call makeCall(@NotNull JetElement callElement, @NotNull ReceiverDescriptor explicitReceiver) { + return new CallImpl(callElement, explicitReceiver, null, null, Collections.emptyList()); } }