refactoring: extracted method doResolveCallAndRecordDebugInfo
This commit is contained in:
committed by
Andrey Breslav
parent
b05fb38dcd
commit
d2f70b772d
@@ -345,7 +345,7 @@ public class CallResolver {
|
|||||||
}
|
}
|
||||||
if (results == null) {
|
if (results == null) {
|
||||||
BasicCallResolutionContext newContext = context.replaceBindingTrace(traceToResolveCall);
|
BasicCallResolutionContext newContext = context.replaceBindingTrace(traceToResolveCall);
|
||||||
results = doResolveCall(newContext, prioritizedTasks, callTransformer, tracing);
|
results = doResolveCallAndRecordDebugInfo(newContext, prioritizedTasks, callTransformer, tracing);
|
||||||
DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace();
|
DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace();
|
||||||
if (deltasTraceForTypeInference != null) {
|
if (deltasTraceForTypeInference != null) {
|
||||||
deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall);
|
deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall);
|
||||||
@@ -459,7 +459,7 @@ public class CallResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private <D extends CallableDescriptor, F extends D> OverloadResolutionResultsImpl<F> doResolveCall(
|
private <D extends CallableDescriptor, F extends D> OverloadResolutionResultsImpl<F> doResolveCallAndRecordDebugInfo(
|
||||||
@NotNull BasicCallResolutionContext context,
|
@NotNull BasicCallResolutionContext context,
|
||||||
@NotNull List<ResolutionTask<D, F>> prioritizedTasks, // high to low priority
|
@NotNull List<ResolutionTask<D, F>> prioritizedTasks, // high to low priority
|
||||||
@NotNull CallTransformer<D, F> callTransformer,
|
@NotNull CallTransformer<D, F> callTransformer,
|
||||||
@@ -477,6 +477,20 @@ public class CallResolver {
|
|||||||
|
|
||||||
debugInfo.set(ResolutionDebugInfo.TASKS, prioritizedTasks);
|
debugInfo.set(ResolutionDebugInfo.TASKS, prioritizedTasks);
|
||||||
|
|
||||||
|
OverloadResolutionResultsImpl<F> results = doResolveCall(context, prioritizedTasks, callTransformer, tracing);
|
||||||
|
if (results.isSingleResult()) {
|
||||||
|
debugInfo.set(ResolutionDebugInfo.RESULT, results.getResultingCall());
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private <D extends CallableDescriptor, F extends D> OverloadResolutionResultsImpl<F> doResolveCall(
|
||||||
|
@NotNull BasicCallResolutionContext context,
|
||||||
|
@NotNull List<ResolutionTask<D, F>> prioritizedTasks, // high to low priority
|
||||||
|
@NotNull CallTransformer<D, F> callTransformer,
|
||||||
|
@NotNull TracingStrategy tracing
|
||||||
|
) {
|
||||||
if (context.checkArguments == CheckValueArgumentsMode.ENABLED) {
|
if (context.checkArguments == CheckValueArgumentsMode.ENABLED) {
|
||||||
argumentTypeResolver.analyzeArgumentsAndRecordTypes(context);
|
argumentTypeResolver.analyzeArgumentsAndRecordTypes(context);
|
||||||
}
|
}
|
||||||
@@ -484,15 +498,12 @@ public class CallResolver {
|
|||||||
TemporaryBindingTrace traceForFirstNonemptyCandidateSet = null;
|
TemporaryBindingTrace traceForFirstNonemptyCandidateSet = null;
|
||||||
OverloadResolutionResultsImpl<F> resultsForFirstNonemptyCandidateSet = null;
|
OverloadResolutionResultsImpl<F> resultsForFirstNonemptyCandidateSet = null;
|
||||||
for (ResolutionTask<D, F> task : prioritizedTasks) {
|
for (ResolutionTask<D, F> task : prioritizedTasks) {
|
||||||
TemporaryBindingTrace taskTrace = TemporaryBindingTrace.create(context.trace, "trace to resolve a task for", task.call.getCalleeExpression());
|
TemporaryBindingTrace taskTrace =
|
||||||
|
TemporaryBindingTrace.create(context.trace, "trace to resolve a task for", task.call.getCalleeExpression());
|
||||||
OverloadResolutionResultsImpl<F> results = performResolutionGuardedForExtraFunctionLiteralArguments(
|
OverloadResolutionResultsImpl<F> results = performResolutionGuardedForExtraFunctionLiteralArguments(
|
||||||
task.replaceBindingTrace(taskTrace), callTransformer);
|
task.replaceBindingTrace(taskTrace), callTransformer);
|
||||||
if (results.isSuccess() || results.isAmbiguity()) {
|
if (results.isSuccess() || results.isAmbiguity()) {
|
||||||
taskTrace.commit();
|
taskTrace.commit();
|
||||||
|
|
||||||
if (results.isSuccess()) {
|
|
||||||
debugInfo.set(ResolutionDebugInfo.RESULT, results.getResultingCall());
|
|
||||||
}
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) {
|
if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) {
|
||||||
@@ -500,25 +511,20 @@ public class CallResolver {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
boolean updateResults = traceForFirstNonemptyCandidateSet == null
|
boolean updateResults = traceForFirstNonemptyCandidateSet == null
|
||||||
|| (resultsForFirstNonemptyCandidateSet.getResultCode() == CANDIDATES_WITH_WRONG_RECEIVER &&
|
|| (resultsForFirstNonemptyCandidateSet.getResultCode() == CANDIDATES_WITH_WRONG_RECEIVER
|
||||||
results.getResultCode() != CANDIDATES_WITH_WRONG_RECEIVER);
|
&& results.getResultCode() != CANDIDATES_WITH_WRONG_RECEIVER);
|
||||||
if (!task.getCandidates().isEmpty() && !results.isNothing() && updateResults) {
|
if (!task.getCandidates().isEmpty() && !results.isNothing() && updateResults) {
|
||||||
traceForFirstNonemptyCandidateSet = taskTrace;
|
traceForFirstNonemptyCandidateSet = taskTrace;
|
||||||
resultsForFirstNonemptyCandidateSet = results;
|
resultsForFirstNonemptyCandidateSet = results;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (traceForFirstNonemptyCandidateSet != null) {
|
if (traceForFirstNonemptyCandidateSet == null) {
|
||||||
traceForFirstNonemptyCandidateSet.commit();
|
|
||||||
if (resultsForFirstNonemptyCandidateSet.isSingleResult()) {
|
|
||||||
|
|
||||||
debugInfo.set(ResolutionDebugInfo.RESULT, resultsForFirstNonemptyCandidateSet.getResultingCall());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tracing.unresolvedReference(context.trace);
|
tracing.unresolvedReference(context.trace);
|
||||||
argumentTypeResolver.checkTypesWithNoCallee(context, SHAPE_FUNCTION_ARGUMENTS);
|
argumentTypeResolver.checkTypesWithNoCallee(context, SHAPE_FUNCTION_ARGUMENTS);
|
||||||
|
return OverloadResolutionResultsImpl.<F>nameNotFound();
|
||||||
}
|
}
|
||||||
return resultsForFirstNonemptyCandidateSet != null ? resultsForFirstNonemptyCandidateSet : OverloadResolutionResultsImpl.<F>nameNotFound();
|
traceForFirstNonemptyCandidateSet.commit();
|
||||||
|
return resultsForFirstNonemptyCandidateSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
Reference in New Issue
Block a user