makeFakeCall() uses a fake expression

This commit is contained in:
Andrey Breslav
2012-08-23 19:02:47 +04:00
parent e13fa067cc
commit 4870b92d11
2 changed files with 18 additions and 6 deletions
@@ -2676,7 +2676,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
ResolvedCall<FunctionDescriptor> 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();
}
}
@@ -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<? extends ValueArgument> valueArguments;
private final Call.CallType callType;
protected CallImpl(@Nullable PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, @Nullable JetExpression calleeExpression, @NotNull List<? extends ValueArgument> valueArguments) {
protected CallImpl(@NotNull PsiElement callElement, @NotNull ReceiverDescriptor explicitReceiver, @Nullable ASTNode callOperationNode, @Nullable JetExpression calleeExpression, @NotNull List<? extends ValueArgument> 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<? extends ValueArgument> 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<? extends ValueArgument> getValueArguments() {
return callElement.getValueArguments();
}
@Override
@NotNull
public List<JetExpression> getFunctionLiteralArguments() {
return callElement.getFunctionLiteralArguments();
}
@Override
@NotNull
public List<JetTypeProjection> 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.<ValueArgument>emptyList());
public static Call makeCall(@NotNull JetElement callElement, @NotNull ReceiverDescriptor explicitReceiver) {
return new CallImpl(callElement, explicitReceiver, null, null, Collections.<ValueArgument>emptyList());
}
}