Refactor: make OverloadingConflictResolver and ResolutionResultsHandler components instead of singletons
This commit is contained in:
@@ -78,15 +78,18 @@ public class CallResolver {
|
|||||||
private ArgumentTypeResolver argumentTypeResolver;
|
private ArgumentTypeResolver argumentTypeResolver;
|
||||||
private GenericCandidateResolver genericCandidateResolver;
|
private GenericCandidateResolver genericCandidateResolver;
|
||||||
private CallCompleter callCompleter;
|
private CallCompleter callCompleter;
|
||||||
@NotNull private final TaskPrioritizer taskPrioritizer;
|
private final TaskPrioritizer taskPrioritizer;
|
||||||
|
private final ResolutionResultsHandler resolutionResultsHandler;
|
||||||
|
|
||||||
private static final PerformanceCounter callResolvePerfCounter = PerformanceCounter.Companion.create("Call resolve", ExpressionTypingVisitorDispatcher.typeInfoPerfCounter);
|
private static final PerformanceCounter callResolvePerfCounter = PerformanceCounter.Companion.create("Call resolve", ExpressionTypingVisitorDispatcher.typeInfoPerfCounter);
|
||||||
private static final PerformanceCounter candidatePerfCounter = PerformanceCounter.Companion.create("Call resolve candidate analysis", true);
|
private static final PerformanceCounter candidatePerfCounter = PerformanceCounter.Companion.create("Call resolve candidate analysis", true);
|
||||||
|
|
||||||
public CallResolver(
|
public CallResolver(
|
||||||
@NotNull TaskPrioritizer taskPrioritizer
|
@NotNull TaskPrioritizer taskPrioritizer,
|
||||||
|
@NotNull ResolutionResultsHandler resolutionResultsHandler
|
||||||
) {
|
) {
|
||||||
this.taskPrioritizer = taskPrioritizer;
|
this.taskPrioritizer = taskPrioritizer;
|
||||||
|
this.resolutionResultsHandler = resolutionResultsHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// component dependency cycle
|
// component dependency cycle
|
||||||
@@ -590,7 +593,7 @@ public class CallResolver {
|
|||||||
addResolvedCall(task, callTransformer, context);
|
addResolvedCall(task, callTransformer, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
OverloadResolutionResultsImpl<F> results = ResolutionResultsHandler.INSTANCE.computeResultAndReportErrors(
|
OverloadResolutionResultsImpl<F> results = resolutionResultsHandler.computeResultAndReportErrors(
|
||||||
task, task.getResolvedCalls());
|
task, task.getResolvedCalls());
|
||||||
if (!results.isSingleResult() && !results.isIncomplete()) {
|
if (!results.isSingleResult() && !results.isIncomplete()) {
|
||||||
argumentTypeResolver.checkTypesWithNoCallee(task.toBasic());
|
argumentTypeResolver.checkTypesWithNoCallee(task.toBasic());
|
||||||
|
|||||||
+1
-3
@@ -34,9 +34,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class OverloadingConflictResolver {
|
public class OverloadingConflictResolver {
|
||||||
|
|
||||||
public static OverloadingConflictResolver INSTANCE = new OverloadingConflictResolver();
|
public OverloadingConflictResolver() {}
|
||||||
|
|
||||||
private OverloadingConflictResolver() {}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public <D extends CallableDescriptor> MutableResolvedCall<D> findMaximallySpecific(
|
public <D extends CallableDescriptor> MutableResolvedCall<D> findMaximallySpecific(
|
||||||
|
|||||||
+6
-4
@@ -34,9 +34,11 @@ import static org.jetbrains.kotlin.resolve.calls.model.ResolvedCallImpl.MAP_TO_R
|
|||||||
import static org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus.*;
|
import static org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus.*;
|
||||||
|
|
||||||
public class ResolutionResultsHandler {
|
public class ResolutionResultsHandler {
|
||||||
public static ResolutionResultsHandler INSTANCE = new ResolutionResultsHandler();
|
private final OverloadingConflictResolver overloadingConflictResolver;
|
||||||
|
|
||||||
private ResolutionResultsHandler() {}
|
public ResolutionResultsHandler(@NotNull OverloadingConflictResolver overloadingConflictResolver) {
|
||||||
|
this.overloadingConflictResolver = overloadingConflictResolver;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public <D extends CallableDescriptor> OverloadResolutionResultsImpl<D> computeResultAndReportErrors(
|
public <D extends CallableDescriptor> OverloadResolutionResultsImpl<D> computeResultAndReportErrors(
|
||||||
@@ -184,13 +186,13 @@ public class ResolutionResultsHandler {
|
|||||||
return OverloadResolutionResultsImpl.success(noOverrides.iterator().next());
|
return OverloadResolutionResultsImpl.success(noOverrides.iterator().next());
|
||||||
}
|
}
|
||||||
|
|
||||||
MutableResolvedCall<D> maximallySpecific = OverloadingConflictResolver.INSTANCE.findMaximallySpecific(noOverrides, false);
|
MutableResolvedCall<D> maximallySpecific = overloadingConflictResolver.findMaximallySpecific(noOverrides, false);
|
||||||
if (maximallySpecific != null) {
|
if (maximallySpecific != null) {
|
||||||
return OverloadResolutionResultsImpl.success(maximallySpecific);
|
return OverloadResolutionResultsImpl.success(maximallySpecific);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (discriminateGenerics) {
|
if (discriminateGenerics) {
|
||||||
MutableResolvedCall<D> maximallySpecificGenericsDiscriminated = OverloadingConflictResolver.INSTANCE.findMaximallySpecific(
|
MutableResolvedCall<D> maximallySpecificGenericsDiscriminated = overloadingConflictResolver.findMaximallySpecific(
|
||||||
noOverrides, true);
|
noOverrides, true);
|
||||||
if (maximallySpecificGenericsDiscriminated != null) {
|
if (maximallySpecificGenericsDiscriminated != null) {
|
||||||
return OverloadResolutionResultsImpl.success(maximallySpecificGenericsDiscriminated);
|
return OverloadResolutionResultsImpl.success(maximallySpecificGenericsDiscriminated);
|
||||||
|
|||||||
Reference in New Issue
Block a user