diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 1a192b71c0a..085bde376f6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -78,12 +78,13 @@ public class CandidateResolver { if (ErrorUtils.isError(candidate)) { candidateCall.addStatus(SUCCESS); - argumentTypeResolver.checkTypesWithNoCallee(context.toBasic()); + markAllArgumentsAsUnmapped(context); return; } if (!checkOuterClassMemberIsAccessible(context)) { candidateCall.addStatus(OTHER_ERROR); + markAllArgumentsAsUnmapped(context); return; } @@ -93,6 +94,7 @@ public class CandidateResolver { if (invisibleMember != null) { candidateCall.addStatus(OTHER_ERROR); context.tracing.invisibleMember(context.trace, invisibleMember); + markAllArgumentsAsUnmapped(context); return; } @@ -108,12 +110,11 @@ public class CandidateResolver { else { candidateCall.addStatus(OTHER_ERROR); } + candidateCall.setUnmappedArguments(unmappedArguments); if ((argumentMappingStatus == ValueArgumentsToParametersMapper.Status.ERROR && candidate.getTypeParameters().isEmpty()) || argumentMappingStatus == ValueArgumentsToParametersMapper.Status.STRONG_ERROR) { - argumentTypeResolver.checkTypesWithNoCallee(context.toBasic()); return; } - candidateCall.setUnmappedArguments(unmappedArguments); } } @@ -171,6 +172,12 @@ public class CandidateResolver { AutoCastUtils.recordAutoCastIfNecessary(candidateCall.getThisObject(), candidateCall.getTrace()); } + private static void markAllArgumentsAsUnmapped(CallCandidateResolutionContext context) { + if (context.checkArguments == CheckValueArgumentsMode.ENABLED) { + context.candidateCall.setUnmappedArguments(context.call.getValueArguments()); + } + } + private static boolean checkOuterClassMemberIsAccessible(@NotNull CallCandidateResolutionContext context) { // In "this@Outer.foo()" the error will be reported on "this@Outer" instead if (context.call.getExplicitReceiver().exists() || context.call.getThisObject().exists()) return true; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java index 225b54e7d70..bcd10225dab 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java @@ -176,6 +176,7 @@ import static org.jetbrains.jet.lang.resolve.calls.ValueArgumentsToParametersMap ) { report(MIXING_NAMED_AND_POSITIONED_ARGUMENTS.on(argument.asElement())); setStatus(WEAK_ERROR); + unmappedArguments.add(argument); return positionedThenNamed; } 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 7682ca44d9e..35bb2b4334a 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 @@ -195,7 +195,7 @@ public class ResolvedCallImpl implements ResolvedC valueArguments.put(valueParameter, valueArgument); } - public void setUnmappedArguments(@NotNull Collection unmappedArguments) { + public void setUnmappedArguments(@NotNull Collection unmappedArguments) { this.unmappedArguments.addAll(unmappedArguments); }