diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index abbe9b9aeb6..183d34a878c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1927,7 +1927,11 @@ public class ExpressionCodegen extends JetVisitor implem ResolvedCall resolvedCall, JavaClassDescriptor samInterface ) { - ResolvedValueArgument argument = resolvedCall.getValueArgumentsByIndex().get(0); + List arguments = resolvedCall.getValueArgumentsByIndex(); + if (arguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } + ResolvedValueArgument argument = arguments.get(0); if (!(argument instanceof ExpressionValueArgument)) { throw new IllegalStateException( "argument of SAM constructor is " + argument.getClass().getName() + " " + expression.getText()); @@ -2321,6 +2325,9 @@ public class ExpressionCodegen extends JetVisitor implem private int pushMethodArguments(@NotNull ResolvedCall resolvedCall, List valueParameterTypes, boolean skipLast, @NotNull CallGenerator callGenerator) { @SuppressWarnings("unchecked") List valueArguments = resolvedCall.getValueArgumentsByIndex(); + if (valueArguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } CallableDescriptor fd = resolvedCall.getResultingDescriptor(); List valueParameters = fd.getValueParameters(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/TailRecursionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/TailRecursionCodegen.java index afd9f0ac9df..04622c65ce3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/TailRecursionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/TailRecursionCodegen.java @@ -69,7 +69,11 @@ public class TailRecursionCodegen { assert fd instanceof FunctionDescriptor : "the resolved call is not refer to the function descriptor so why do we use generateTailRecursion for something strange?"; CallableMethod callable = (CallableMethod) codegen.resolveToCallable((FunctionDescriptor) fd, false); - assignParameterValues(fd, callable, resolvedCall.getValueArgumentsByIndex()); + List arguments = resolvedCall.getValueArgumentsByIndex(); + if (arguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } + assignParameterValues(fd, callable, arguments); if (callable.getReceiverClass() != null) { if (resolvedCall.getReceiverArgument() != fd.getReceiverParameter().getValue()) { StackValue expression = context.getReceiverExpression(codegen.typeMapper); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java index 7a8b3548f40..31de763b7a9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java @@ -421,6 +421,9 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { return; } List valueArguments = call.getValueArgumentsByIndex(); + if (valueArguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } for (ValueParameterDescriptor valueParameter : original.getValueParameters()) { JavaClassDescriptor samInterface = getInterfaceIfSamType(valueParameter.getType()); if (samInterface == null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/DelegatingResolvedCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/DelegatingResolvedCall.java index a23b1fe31df..bad8b99ff7e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/DelegatingResolvedCall.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/DelegatingResolvedCall.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.calls.model; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; @@ -70,7 +71,7 @@ public abstract class DelegatingResolvedCall imple return resolvedCall.getValueArguments(); } - @NotNull + @Nullable @Override public List getValueArgumentsByIndex() { return resolvedCall.getValueArgumentsByIndex(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCall.java index ff23b6754c7..5cd34844307 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCall.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCall.java @@ -56,7 +56,7 @@ public interface ResolvedCall { Map getValueArguments(); /** Values (arguments) for value parameters indexed by parameter index */ - @NotNull + @Nullable List getValueArgumentsByIndex(); /** What's substituted for type parameters */ diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java index 0ace0e0f2b6..26f5a62adef 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java @@ -229,7 +229,7 @@ public class ResolvedCallImpl implements ResolvedC return valueArguments; } - @NotNull + @Nullable @Override public List getValueArgumentsByIndex() { List arguments = new ArrayList(candidateDescriptor.getValueParameters().size()); @@ -242,16 +242,14 @@ public class ResolvedCallImpl implements ResolvedC ResolvedValueArgument value = entry.getValue(); ResolvedValueArgument oldValue = arguments.set(parameterDescriptor.getIndex(), value); if (oldValue != null) { - throw new IllegalStateException("Argument set twice for " + parameterDescriptor + "\n" + - "old value: " + oldValue + "\n" + - "new value: " + value); + return null; } } for (int i = 0; i < arguments.size(); i++) { Object o = arguments.get(i); if (o == null) { - throw new IllegalStateException("No argument for " + getCandidateDescriptor().getValueParameters().get(i)); + return null; } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/VariableAsFunctionResolvedCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/VariableAsFunctionResolvedCall.java index 7f526c091a7..e02017fe167 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/VariableAsFunctionResolvedCall.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/VariableAsFunctionResolvedCall.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.calls.model; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; @@ -86,7 +87,7 @@ public class VariableAsFunctionResolvedCall implements ResolvedCallWithTrace getValueArgumentsByIndex() { return functionCall.getValueArgumentsByIndex(); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java index c56bda55737..e3efc51902e 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java @@ -99,6 +99,9 @@ public class ArrayAccessTranslator extends AbstractTranslator implements AccessT BindingUtils.getResolvedCallForArrayAccess(bindingContext(), expression, /*isGetter = */ false); List arguments = resolvedCall.getValueArgumentsByIndex(); + if (arguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } ResolvedValueArgument lastArgument = arguments.get(arguments.size() - 1); assert lastArgument instanceof ExpressionValueArgument: "Last argument of array-like setter must be ExpressionValueArgument"; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallArgumentTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallArgumentTranslator.java index d4f072985a8..089bbc72e88 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallArgumentTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/CallArgumentTranslator.java @@ -159,6 +159,9 @@ public class CallArgumentTranslator extends AbstractTranslator { List result = new ArrayList(valueParameters.size()); List valueArgumentsByIndex = resolvedCall.getValueArgumentsByIndex(); + if (valueArgumentsByIndex == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } List argsBeforeVararg = null; for (ValueParameterDescriptor parameterDescriptor : valueParameters) { ResolvedValueArgument actualArgument = valueArgumentsByIndex.get(parameterDescriptor.getIndex()); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java index f23d35d2d60..99136b3a949 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/InlinedCallExpressionTranslator.java @@ -148,7 +148,11 @@ public final class InlinedCallExpressionTranslator extends AbstractCallExpressio @NotNull private TemporaryVariable createAliasForArgument(@NotNull ValueParameterDescriptor parameterDescriptor) { - ResolvedValueArgument actualArgument = resolvedCall.getValueArgumentsByIndex().get(parameterDescriptor.getIndex()); + List actualArguments = resolvedCall.getValueArgumentsByIndex(); + if (actualArguments == null) { + throw new IllegalStateException("Failed to arrange value arguments by index"); + } + ResolvedValueArgument actualArgument = actualArguments.get(parameterDescriptor.getIndex()); JsExpression translatedArgument = translateArgument(actualArgument); TemporaryVariable aliasForArgument = context().declareTemporary(translatedArgument); context().addStatementToCurrentBlock(aliasForArgument.assignmentExpression().makeStmt());