diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 0bfd3a775e7..c1467461ff4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -361,7 +361,7 @@ public class CallResolver { if (results.isSingleResult()) { Set unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments(); argumentTypeResolver.checkUnmappedArgumentTypes(context, unmappedArguments); - candidateResolver.completeNestedCallsForNotResolvedInvocation(context, unmappedArguments); + candidateResolver.completeUnmappedArguments(context, unmappedArguments); } if (!results.isSingleResult()) return results; 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 6063946a7a3..5fc68e3e5c8 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 @@ -334,6 +334,7 @@ public class CandidateResolver { completeInferenceForArgument(argument, parameterDescriptor, context); } } + completeUnmappedArguments(context, context.candidateCall.getUnmappedArguments()); recordReferenceForInvokeFunction(context); } @@ -386,7 +387,11 @@ public class CandidateResolver { completeNestedCallsForNotResolvedInvocation(context, context.call.getValueArguments()); } - public void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext context, @NotNull Collection arguments) { + public void completeUnmappedArguments(@NotNull CallResolutionContext context, @NotNull Collection unmappedArguments) { + completeNestedCallsForNotResolvedInvocation(context, unmappedArguments); + } + + private void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext context, @NotNull Collection arguments) { if (context.call.getCallType() == Call.CallType.INVOKE) return; if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return; @@ -400,7 +405,10 @@ public class CandidateResolver { context.resolutionResultsCache.getDeferredComputation(keyExpression); if (storedContextForArgument != null) { completeNestedCallsForNotResolvedInvocation(storedContextForArgument); - argumentTypeResolver.checkTypesForFunctionArgumentsWithNoCallee(storedContextForArgument.replaceBindingTrace(context.trace)); + CallCandidateResolutionContext newContext = + storedContextForArgument.replaceBindingTrace(context.trace); + completeUnmappedArguments(newContext, storedContextForArgument.candidateCall.getUnmappedArguments()); + argumentTypeResolver.checkTypesForFunctionArgumentsWithNoCallee(newContext.replaceContextDependency(INDEPENDENT)); } } } diff --git a/compiler/testData/diagnostics/tests/resolve/nestedCalls/completeUnmappedArguments.kt b/compiler/testData/diagnostics/tests/resolve/nestedCalls/completeUnmappedArguments.kt new file mode 100644 index 00000000000..8f347e71fb8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/nestedCalls/completeUnmappedArguments.kt @@ -0,0 +1,14 @@ +package c + +fun zzz(i: Int, f: (Int) -> Int) { throw Exception("$i $f")} + +fun test() { + fun foo(): Int = 42 + + fun bar(i: Int) = i + + bar(foo(xx = zzz(11) { (j: Int) -> j + 7 })) + + bar(zz = foo( + xx = zzz(12) { (i: Int) -> i + i })) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 5d6cb3ddf5b..fc091de0a8d 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -5388,6 +5388,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/resolve/nestedCalls/analyzeArgsInFreeExpressionPosition.kt"); } + @TestMetadata("completeUnmappedArguments.kt") + public void testCompleteUnmappedArguments() throws Exception { + doTest("compiler/testData/diagnostics/tests/resolve/nestedCalls/completeUnmappedArguments.kt"); + } + } @TestMetadata("compiler/testData/diagnostics/tests/resolve/specialConstructions")