Fixed: unmapped arguments should be completed as well.

This commit is contained in:
svtk
2013-11-21 19:42:06 +04:00
parent 058726a0f1
commit ae3331717e
4 changed files with 30 additions and 3 deletions
@@ -361,7 +361,7 @@ public class CallResolver {
if (results.isSingleResult()) { if (results.isSingleResult()) {
Set<ValueArgument> unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments(); Set<ValueArgument> unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments();
argumentTypeResolver.checkUnmappedArgumentTypes(context, unmappedArguments); argumentTypeResolver.checkUnmappedArgumentTypes(context, unmappedArguments);
candidateResolver.completeNestedCallsForNotResolvedInvocation(context, unmappedArguments); candidateResolver.completeUnmappedArguments(context, unmappedArguments);
} }
if (!results.isSingleResult()) return results; if (!results.isSingleResult()) return results;
@@ -334,6 +334,7 @@ public class CandidateResolver {
completeInferenceForArgument(argument, parameterDescriptor, context); completeInferenceForArgument(argument, parameterDescriptor, context);
} }
} }
completeUnmappedArguments(context, context.candidateCall.getUnmappedArguments());
recordReferenceForInvokeFunction(context); recordReferenceForInvokeFunction(context);
} }
@@ -386,7 +387,11 @@ public class CandidateResolver {
completeNestedCallsForNotResolvedInvocation(context, context.call.getValueArguments()); completeNestedCallsForNotResolvedInvocation(context, context.call.getValueArguments());
} }
public void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) { public void completeUnmappedArguments(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> unmappedArguments) {
completeNestedCallsForNotResolvedInvocation(context, unmappedArguments);
}
private void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) {
if (context.call.getCallType() == Call.CallType.INVOKE) return; if (context.call.getCallType() == Call.CallType.INVOKE) return;
if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return; if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return;
@@ -400,7 +405,10 @@ public class CandidateResolver {
context.resolutionResultsCache.getDeferredComputation(keyExpression); context.resolutionResultsCache.getDeferredComputation(keyExpression);
if (storedContextForArgument != null) { if (storedContextForArgument != null) {
completeNestedCallsForNotResolvedInvocation(storedContextForArgument); completeNestedCallsForNotResolvedInvocation(storedContextForArgument);
argumentTypeResolver.checkTypesForFunctionArgumentsWithNoCallee(storedContextForArgument.replaceBindingTrace(context.trace)); CallCandidateResolutionContext<? extends CallableDescriptor> newContext =
storedContextForArgument.replaceBindingTrace(context.trace);
completeUnmappedArguments(newContext, storedContextForArgument.candidateCall.getUnmappedArguments());
argumentTypeResolver.checkTypesForFunctionArgumentsWithNoCallee(newContext.replaceContextDependency(INDEPENDENT));
} }
} }
} }
@@ -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(<!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(11) { (j: Int) -> j + 7 }))
bar(<!NAMED_PARAMETER_NOT_FOUND!>zz<!> = foo(
<!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(12) { (i: Int) -> i + i })<!NO_VALUE_FOR_PARAMETER!>)<!>
}
@@ -5388,6 +5388,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/resolve/nestedCalls/analyzeArgsInFreeExpressionPosition.kt"); 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") @TestMetadata("compiler/testData/diagnostics/tests/resolve/specialConstructions")