From 19e6b02da8ab15dd6a1757cf6d20c524e88b4d26 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 24 Dec 2012 15:26:28 +0400 Subject: [PATCH] CANNOT_INFER_PARAMETER_TYPE reporting improvement --- .../ClosureExpressionsTypingVisitor.java | 5 ++++- .../cannotInferParameterTypeWithInference.kt | 16 ++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/inference/reportingImprovements/cannotInferParameterTypeWithInference.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index 84f48bc73b3..598a343eef8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.*; +import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.*; @@ -236,11 +237,13 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { } } else { + if (expectedType == null || expectedType == CallResolverUtil.DONT_CARE || expectedType == CallResolverUtil.CANT_INFER) { + context.trace.report(CANNOT_INFER_PARAMETER_TYPE.on(declaredParameter)); + } if (expectedType != null) { type = expectedType; } else { - context.trace.report(CANNOT_INFER_PARAMETER_TYPE.on(declaredParameter)); type = ErrorUtils.createErrorType("Cannot be inferred"); } } diff --git a/compiler/testData/diagnostics/tests/inference/reportingImprovements/cannotInferParameterTypeWithInference.kt b/compiler/testData/diagnostics/tests/inference/reportingImprovements/cannotInferParameterTypeWithInference.kt new file mode 100644 index 00000000000..4de6f18d421 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/reportingImprovements/cannotInferParameterTypeWithInference.kt @@ -0,0 +1,16 @@ +package aa + +fun foo(block: (T)-> R) = block + +fun test1() { + foo { + x -> // here we have 'cannot infer parameter type' error + 43 + } +} + +fun bar(f: (A)->Unit) {} + +fun test2() { + bar { a -> } // here we don't have 'cannot infer parameter type' error +} \ 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 0cd1a16b324..91b00c922d1 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2265,6 +2265,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/inference/reportingImprovements"), "kt", true); } + @TestMetadata("cannotInferParameterTypeWithInference.kt") + public void testCannotInferParameterTypeWithInference() throws Exception { + doTest("compiler/testData/diagnostics/tests/inference/reportingImprovements/cannotInferParameterTypeWithInference.kt"); + } + @TestMetadata("NoAmbiguityForDifferentFunctionTypes.kt") public void testNoAmbiguityForDifferentFunctionTypes() throws Exception { doTest("compiler/testData/diagnostics/tests/inference/reportingImprovements/NoAmbiguityForDifferentFunctionTypes.kt");