From adcb9e6e8a01005733ee6700c867d34b30271a36 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 8 Nov 2012 15:06:59 +0400 Subject: [PATCH] moved code for successful / failed candidates separation to ResolutionResultsHandler --- .../jet/lang/resolve/calls/CallResolver.java | 29 +++++-------------- .../results/ResolutionResultsHandler.java | 24 +++++++++++++++ 2 files changed, 32 insertions(+), 21 deletions(-) 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 601f03a98bb..28b9b5fcfa0 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 @@ -28,7 +28,10 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace; -import org.jetbrains.jet.lang.resolve.calls.results.*; +import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults; +import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResultsImpl; +import org.jetbrains.jet.lang.resolve.calls.results.ResolutionDebugInfo; +import org.jetbrains.jet.lang.resolve.calls.results.ResolutionResultsHandler; import org.jetbrains.jet.lang.resolve.calls.tasks.*; import org.jetbrains.jet.lang.resolve.calls.util.DelegatingCall; import org.jetbrains.jet.lang.resolve.calls.util.ExpressionAsFunctionDescriptor; @@ -36,7 +39,8 @@ import org.jetbrains.jet.lang.resolve.calls.util.JetFakeReference; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; -import org.jetbrains.jet.lang.types.*; +import org.jetbrains.jet.lang.types.ErrorUtils; +import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; @@ -50,7 +54,6 @@ import java.util.*; import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; -import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.*; import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; @@ -502,24 +505,8 @@ public class CallResolver { } } - Set> successfulCandidates = Sets.newLinkedHashSet(); - Set> failedCandidates = Sets.newLinkedHashSet(); - for (ResolvedCallWithTrace candidateCall : task.getResolvedCalls()) { - ResolutionStatus status = candidateCall.getStatus(); - if (status.isSuccess()) { - successfulCandidates.add(candidateCall); - } - else { - assert status != UNKNOWN_STATUS : "No resolution for " + candidateCall.getCandidateDescriptor(); - if (candidateCall.getStatus() != STRONG_ERROR) { - failedCandidates.add(candidateCall); - } - } - } - - OverloadResolutionResultsImpl results = resolutionResultsHandler.computeResultAndReportErrors(task.trace, task.tracing, - successfulCandidates, - failedCandidates); + OverloadResolutionResultsImpl results = resolutionResultsHandler.computeResultAndReportErrors( + task.trace, task.tracing, task.getResolvedCalls()); if (!results.isSingleResult() && !results.isIncomplete()) { candidateResolver.checkTypesWithNoCallee(task.toBasic()); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/ResolutionResultsHandler.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/ResolutionResultsHandler.java index 868a819c89f..d81e54ba753 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/ResolutionResultsHandler.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/ResolutionResultsHandler.java @@ -33,6 +33,8 @@ import java.util.Set; import static org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl.MAP_TO_CANDIDATE; import static org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl.MAP_TO_RESULT; import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.SEVERITY_LEVELS; +import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.STRONG_ERROR; +import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.UNKNOWN_STATUS; public class ResolutionResultsHandler { @NotNull @@ -43,6 +45,28 @@ public class ResolutionResultsHandler { this.overloadingConflictResolver = overloadingConflictResolver; } + @NotNull + public OverloadResolutionResultsImpl computeResultAndReportErrors( + @NotNull BindingTrace trace, + @NotNull TracingStrategy tracing, + @NotNull Set> candidates) { + Set> successfulCandidates = Sets.newLinkedHashSet(); + Set> failedCandidates = Sets.newLinkedHashSet(); + for (ResolvedCallWithTrace candidateCall : candidates) { + ResolutionStatus status = candidateCall.getStatus(); + if (status.isSuccess()) { + successfulCandidates.add(candidateCall); + } + else { + assert status != UNKNOWN_STATUS : "No resolution for " + candidateCall.getCandidateDescriptor(); + if (candidateCall.getStatus() != STRONG_ERROR) { + failedCandidates.add(candidateCall); + } + } + } + return computeResultAndReportErrors(trace, tracing, successfulCandidates, failedCandidates); + } + @NotNull public OverloadResolutionResultsImpl computeResultAndReportErrors( @NotNull BindingTrace trace,