[minor] Refactor KotlinCallCompleter
Move completion mode logic to CompletionModeCalculator.
This commit is contained in:
+2
@@ -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
|
||||||
|
|
||||||
|
|||||||
+14
-22
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user