From dda3091dfbdc7283133413c8a8f967de3e31489d Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Fri, 9 Nov 2012 15:37:10 +0400 Subject: [PATCH] 'CANNOT_COMPLETE_RESOLVE' error added --- .../org/jetbrains/jet/lang/diagnostics/Errors.java | 1 + .../diagnostics/rendering/DefaultErrorMessages.java | 2 ++ .../jet/lang/resolve/calls/tasks/ResolutionTask.java | 8 ++++++++ .../jet/lang/resolve/calls/tasks/TracingStrategy.java | 11 +++++++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ .../jet/plugin/highlighter/IdeErrorMessages.java | 2 ++ 6 files changed, 29 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 2ba766ceee2..3a131b80f91 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -325,6 +325,7 @@ public interface Errors { AmbiguousDescriptorDiagnosticFactory OVERLOAD_RESOLUTION_AMBIGUITY = new AmbiguousDescriptorDiagnosticFactory(); AmbiguousDescriptorDiagnosticFactory NONE_APPLICABLE = new AmbiguousDescriptorDiagnosticFactory(); + AmbiguousDescriptorDiagnosticFactory CANNOT_COMPLETE_RESOLVE = new AmbiguousDescriptorDiagnosticFactory(); SimpleDiagnosticFactory DANGLING_FUNCTION_LITERAL_ARGUMENT_SUSPECTED = SimpleDiagnosticFactory.create(WARNING); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index e36e38e536b..93515f9567a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -400,6 +400,8 @@ public class DefaultErrorMessages { MAP.put(OVERLOAD_RESOLUTION_AMBIGUITY, "Overload resolution ambiguity: {0}", AMBIGUOUS_CALLS); MAP.put(NONE_APPLICABLE, "None of the following functions can be called with the arguments supplied: {0}", AMBIGUOUS_CALLS); + MAP.put(CANNOT_COMPLETE_RESOLVE, "Cannot choose among the following candidates without completing type inference: {0}", AMBIGUOUS_CALLS); + MAP.put(NO_VALUE_FOR_PARAMETER, "No value passed for parameter {0}", NAME); MAP.put(MISSING_RECEIVER, "A receiver of type {0} is required", RENDER_TYPE); MAP.put(NO_RECEIVER_ADMITTED, "No receiver can be passed to this function or property"); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java index 13ffd462a40..0c5bc7b2544 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java @@ -190,6 +190,14 @@ public class ResolutionTask extends R trace.report(NONE_APPLICABLE.on(reference, descriptors)); } + @Override + public void cannotCompleteResolve( + @NotNull BindingTrace trace, + @NotNull Collection> descriptors + ) { + trace.report(CANNOT_COMPLETE_RESOLVE.on(reference, descriptors)); + } + @Override public void instantiationOfAbstractClass(@NotNull BindingTrace trace) { trace.report(CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS.on(call.getCallElement())); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java index 53678359e21..cbc32b3c477 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java @@ -73,6 +73,12 @@ public interface TracingStrategy { @Override public void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection> descriptors) {} + @Override + public void cannotCompleteResolve( + @NotNull BindingTrace trace, + @NotNull Collection> descriptors + ) {} + @Override public void instantiationOfAbstractClass(@NotNull BindingTrace trace) {} @@ -118,6 +124,11 @@ public interface TracingStrategy { void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection> descriptors); + void cannotCompleteResolve( + @NotNull BindingTrace trace, + @NotNull Collection> descriptors + ); + void instantiationOfAbstractClass(@NotNull BindingTrace trace); void unsafeCall(@NotNull BindingTrace trace, @NotNull JetType type, boolean isCallForImplicitInvoke); diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 28b384569f6..d2e208c88d8 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1733,6 +1733,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/inference/arrayConstructor.kt"); } + @TestMetadata("cannotCompleteResolve.kt") + public void testCannotCompleteResolve() throws Exception { + doTest("compiler/testData/diagnostics/tests/inference/cannotCompleteResolve.kt"); + } + @TestMetadata("completeInferenceIfManyFailed.kt") public void testCompleteInferenceIfManyFailed() throws Exception { doTest("compiler/testData/diagnostics/tests/inference/completeInferenceIfManyFailed.kt"); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java index 4156094c0af..94296262f2c 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java @@ -108,6 +108,8 @@ public class IdeErrorMessages { MAP.put(OVERLOAD_RESOLUTION_AMBIGUITY, "Overload resolution ambiguity. All these functions match.
    {0}
", HTML_AMBIGUOUS_CALLS); MAP.put(NONE_APPLICABLE, "None of the following functions can be called with the arguments supplied.
    {0}
", new NoneApplicableCallsRenderer()); + MAP.put(CANNOT_COMPLETE_RESOLVE, "Cannot choose among the following candidates without completing type inference:
    {0}
", HTML_AMBIGUOUS_CALLS); + MAP.setImmutable(); }