diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java index 0bd0f687f07..8f2421009fa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java @@ -145,29 +145,6 @@ public class ArgumentTypeResolver { updateResultArgumentTypeIfNotDenotable(context, argumentExpression); } - public void checkTypesForFunctionArguments(CallResolutionContext context, ResolvedCallImpl resolvedCall) { - Map arguments = resolvedCall.getValueArguments(); - for (Map.Entry entry : arguments.entrySet()) { - ValueParameterDescriptor valueParameterDescriptor = entry.getKey(); - JetType varargElementType = valueParameterDescriptor.getVarargElementType(); - JetType functionType; - if (varargElementType != null) { - functionType = varargElementType; - } - else { - functionType = valueParameterDescriptor.getType(); - } - ResolvedValueArgument valueArgument = entry.getValue(); - List valueArguments = valueArgument.getArguments(); - for (ValueArgument argument : valueArguments) { - JetExpression expression = argument.getArgumentExpression(); - if (expression instanceof JetFunctionLiteralExpression) { - expressionTypingServices.getType(context.scope, expression, functionType, context.dataFlowInfo, context.trace); - } - } - } - } - public static boolean isFunctionLiteralArgument(@NotNull JetExpression expression) { return getFunctionLiteralArgumentIfAny(expression) != null; } 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 fec19e6c37b..0bfd3a775e7 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 @@ -451,8 +451,6 @@ public class CallResolver { if (results.isSuccess()) { debugInfo.set(ResolutionDebugInfo.RESULT, results.getResultingCall()); } - - resolveFunctionArguments(context, results); return results; } if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) { @@ -473,7 +471,6 @@ public class CallResolver { debugInfo.set(ResolutionDebugInfo.RESULT, resultsForFirstNonemptyCandidateSet.getResultingCall()); } - resolveFunctionArguments(context, resultsForFirstNonemptyCandidateSet); } else { context.trace.report(UNRESOLVED_REFERENCE.on(reference, reference)); @@ -482,20 +479,7 @@ public class CallResolver { return resultsForFirstNonemptyCandidateSet != null ? resultsForFirstNonemptyCandidateSet : OverloadResolutionResultsImpl.nameNotFound(); } - private OverloadResolutionResults resolveFunctionArguments( - @NotNull BasicCallResolutionContext context, - @NotNull OverloadResolutionResultsImpl results - ) { - if (results.isSingleResult()) { - argumentTypeResolver.checkTypesForFunctionArguments(context, results.getResultingCall().getCallToCompleteTypeArgumentInference()); - } - else { - argumentTypeResolver.checkTypesForFunctionArgumentsWithNoCallee(context); - } - return results; - } - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @NotNull private OverloadResolutionResultsImpl performResolutionGuardedForExtraFunctionLiteralArguments( diff --git a/compiler/testData/diagnostics/tests/inference/constraints/constraintOnFunctionLiteral.kt b/compiler/testData/diagnostics/tests/inference/constraints/constraintOnFunctionLiteral.kt new file mode 100644 index 00000000000..a87baa5505d --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/constraints/constraintOnFunctionLiteral.kt @@ -0,0 +1,11 @@ +package c + +import java.util.ArrayList + +fun Array.toIntArray(): IntArray = this.mapTo(IntArray(size), {it}) + +fun Array.toArrayList(): ArrayList = this.mapTo(ArrayList(size), {it}) + +public inline fun > Array.mapTo(result: C, transform : (T) -> R) : C = + throw Exception("$result $transform") + diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 077cf295db1..2cda468f7c8 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -3312,6 +3312,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/inference/constraints"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("constraintOnFunctionLiteral.kt") + public void testConstraintOnFunctionLiteral() throws Exception { + doTest("compiler/testData/diagnostics/tests/inference/constraints/constraintOnFunctionLiteral.kt"); + } + @TestMetadata("equalityConstraintOnNullableType.kt") public void testEqualityConstraintOnNullableType() throws Exception { doTest("compiler/testData/diagnostics/tests/inference/constraints/equalityConstraintOnNullableType.kt");