moved code for successful / failed candidates separation
to ResolutionResultsHandler
This commit is contained in:
@@ -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.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl;
|
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.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.tasks.*;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.util.DelegatingCall;
|
import org.jetbrains.jet.lang.resolve.calls.util.DelegatingCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.util.ExpressionAsFunctionDescriptor;
|
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.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
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.checker.JetTypeChecker;
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
|
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.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER;
|
||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.*;
|
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.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER;
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
|
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
|
||||||
|
|
||||||
@@ -502,24 +505,8 @@ public class CallResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<ResolvedCallWithTrace<F>> successfulCandidates = Sets.newLinkedHashSet();
|
OverloadResolutionResultsImpl<F> results = resolutionResultsHandler.computeResultAndReportErrors(
|
||||||
Set<ResolvedCallWithTrace<F>> failedCandidates = Sets.newLinkedHashSet();
|
task.trace, task.tracing, task.getResolvedCalls());
|
||||||
for (ResolvedCallWithTrace<F> 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<F> results = resolutionResultsHandler.computeResultAndReportErrors(task.trace, task.tracing,
|
|
||||||
successfulCandidates,
|
|
||||||
failedCandidates);
|
|
||||||
if (!results.isSingleResult() && !results.isIncomplete()) {
|
if (!results.isSingleResult() && !results.isIncomplete()) {
|
||||||
candidateResolver.checkTypesWithNoCallee(task.toBasic());
|
candidateResolver.checkTypesWithNoCallee(task.toBasic());
|
||||||
}
|
}
|
||||||
|
|||||||
+24
@@ -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_CANDIDATE;
|
||||||
import static org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl.MAP_TO_RESULT;
|
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.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 {
|
public class ResolutionResultsHandler {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -43,6 +45,28 @@ public class ResolutionResultsHandler {
|
|||||||
this.overloadingConflictResolver = overloadingConflictResolver;
|
this.overloadingConflictResolver = overloadingConflictResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public <D extends CallableDescriptor> OverloadResolutionResultsImpl<D> computeResultAndReportErrors(
|
||||||
|
@NotNull BindingTrace trace,
|
||||||
|
@NotNull TracingStrategy tracing,
|
||||||
|
@NotNull Set<ResolvedCallWithTrace<D>> candidates) {
|
||||||
|
Set<ResolvedCallWithTrace<D>> successfulCandidates = Sets.newLinkedHashSet();
|
||||||
|
Set<ResolvedCallWithTrace<D>> failedCandidates = Sets.newLinkedHashSet();
|
||||||
|
for (ResolvedCallWithTrace<D> 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
|
@NotNull
|
||||||
public <D extends CallableDescriptor> OverloadResolutionResultsImpl<D> computeResultAndReportErrors(
|
public <D extends CallableDescriptor> OverloadResolutionResultsImpl<D> computeResultAndReportErrors(
|
||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
|
|||||||
Reference in New Issue
Block a user