[minor] Refactor KotlinCallCompleter

Move completion mode logic to CompletionModeCalculator.
This commit is contained in:
Pavel Kirpichenkov
2020-01-24 14:20:32 +03:00
parent 96f49d8e3c
commit 9fb8579252
2 changed files with 16 additions and 22 deletions
@@ -30,6 +30,8 @@ class CompletionModeCalculator {
): ConstraintSystemCompletionMode = with(candidate) { ): ConstraintSystemCompletionMode = with(candidate) {
val csCompleterContext = getSystem().asConstraintSystemCompleterContext() val csCompleterContext = getSystem().asConstraintSystemCompleterContext()
if (candidate.isErrorCandidate()) return ConstraintSystemCompletionMode.FULL
// Presence of expected type means that we are trying to complete outermost call => completion mode should be full // Presence of expected type means that we are trying to complete outermost call => completion mode should be full
if (expectedType != null) return ConstraintSystemCompletionMode.FULL if (expectedType != null) return ConstraintSystemCompletionMode.FULL
@@ -17,14 +17,9 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage.Empt
import org.jetbrains.kotlin.resolve.calls.inference.model.ExpectedTypeConstraintPosition import org.jetbrains.kotlin.resolve.calls.inference.model.ExpectedTypeConstraintPosition
import org.jetbrains.kotlin.resolve.calls.model.* import org.jetbrains.kotlin.resolve.calls.model.*
import org.jetbrains.kotlin.resolve.calls.tower.forceResolution import org.jetbrains.kotlin.resolve.calls.tower.forceResolution
import org.jetbrains.kotlin.resolve.descriptorUtil.hasExactAnnotation
import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.ErrorUtils
import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.UnwrappedType import org.jetbrains.kotlin.types.UnwrappedType
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContext
import org.jetbrains.kotlin.types.model.isIntegerLiteralTypeConstructor
import org.jetbrains.kotlin.types.model.typeConstructor
import org.jetbrains.kotlin.types.typeUtil.contains
class KotlinCallCompleter( class KotlinCallCompleter(
private val postponedArgumentsAnalyzer: PostponedArgumentsAnalyzer, private val postponedArgumentsAnalyzer: PostponedArgumentsAnalyzer,
@@ -58,14 +53,18 @@ class KotlinCallCompleter(
ConstraintSystemCompletionMode.FULL -> { ConstraintSystemCompletionMode.FULL -> {
if (resolutionCallbacks.inferenceSession.shouldRunCompletion(candidate)) { if (resolutionCallbacks.inferenceSession.shouldRunCompletion(candidate)) {
candidate.runCompletion(completionMode, diagnosticHolder, resolutionCallbacks) candidate.runCompletion(completionMode, diagnosticHolder, resolutionCallbacks)
candidate.asCallResolutionResult(completionMode, diagnosticHolder)
} else { } else {
candidate.asCallResolutionResult( candidate.asCallResolutionResult(
ConstraintSystemCompletionMode.PARTIAL, diagnosticHolder, forwardToInferenceSession = true ConstraintSystemCompletionMode.PARTIAL, diagnosticHolder, forwardToInferenceSession = true
) )
} }
} }
ConstraintSystemCompletionMode.PARTIAL -> ConstraintSystemCompletionMode.PARTIAL -> {
candidate.runCompletion(completionMode, diagnosticHolder, resolutionCallbacks) candidate.runCompletion(completionMode, diagnosticHolder, resolutionCallbacks)
candidate.asCallResolutionResult(completionMode, diagnosticHolder)
}
} }
} }
@@ -112,18 +111,11 @@ class KotlinCallCompleter(
} }
private fun KotlinResolutionCandidate.runCompletion( private fun KotlinResolutionCandidate.runCompletion(
completionType: ConstraintSystemCompletionMode, completionMode: ConstraintSystemCompletionMode,
diagnosticHolder: KotlinDiagnosticsHolder.SimpleHolder, diagnosticHolder: KotlinDiagnosticsHolder,
resolutionCallbacks: KotlinResolutionCallbacks resolutionCallbacks: KotlinResolutionCallbacks,
): CallResolutionResult { ) {
if (isErrorCandidate()) { runCompletion(resolvedCall, completionMode, diagnosticHolder, getSystem(), resolutionCallbacks)
runCompletion(resolvedCall, ConstraintSystemCompletionMode.FULL, diagnosticHolder, getSystem(), resolutionCallbacks)
return asCallResolutionResult(completionType, diagnosticHolder)
}
runCompletion(resolvedCall, completionType, diagnosticHolder, getSystem(), resolutionCallbacks)
return asCallResolutionResult(completionType, diagnosticHolder)
} }
private fun runCompletion( private fun runCompletion(
@@ -234,8 +226,8 @@ class KotlinCallCompleter(
PartialCallResolutionResult(resolvedCall, allDiagnostics, systemStorage, forwardToInferenceSession) PartialCallResolutionResult(resolvedCall, allDiagnostics, systemStorage, forwardToInferenceSession)
} }
} }
}
private fun KotlinResolutionCandidate.isErrorCandidate(): Boolean {
return ErrorUtils.isError(resolvedCall.candidateDescriptor) || hasContradiction internal fun KotlinResolutionCandidate.isErrorCandidate(): Boolean {
} return ErrorUtils.isError(resolvedCall.candidateDescriptor) || hasContradiction
} }