[NI] Provide diagnostics for candidates in "allCandidates" mode

This helps for completion as it use diagnostics to clip extra
 candidates
This commit is contained in:
Mikhail Zarechenskiy
2019-04-26 10:19:20 +03:00
parent 450bfed375
commit 5b33e54f77
3 changed files with 15 additions and 7 deletions
@@ -58,8 +58,9 @@ class KotlinCallCompleter(
expectedType: UnwrappedType?,
resolutionCallbacks: KotlinResolutionCallbacks
): CallResolutionResult {
val diagnosticsHolder = KotlinDiagnosticsHolder.SimpleHolder()
for (candidate in candidates) {
val completedCandidates = candidates.map { candidate ->
val diagnosticsHolder = KotlinDiagnosticsHolder.SimpleHolder()
candidate.addExpectedTypeConstraint(
candidate.returnTypeWithSmartCastInfo(resolutionCallbacks), expectedType, resolutionCallbacks
)
@@ -72,8 +73,10 @@ class KotlinCallCompleter(
resolutionCallbacks,
collectAllCandidatesMode = true
)
CandidateWithDiagnostics(candidate, diagnosticsHolder.getDiagnostics() + candidate.diagnosticsFromResolutionParts)
}
return AllCandidatesResolutionResult(candidates)
return AllCandidatesResolutionResult(completedCandidates)
}
private fun KotlinResolutionCandidate.runCompletion(
@@ -203,9 +203,11 @@ class ErrorCallResolutionResult(
) : SingleCallResolutionResult(resultCallAtom, diagnostics, constraintSystem)
class AllCandidatesResolutionResult(
val allCandidates: Collection<KotlinResolutionCandidate>
val allCandidates: Collection<CandidateWithDiagnostics>
) : CallResolutionResult(null, emptyList(), ConstraintStorage.Empty)
data class CandidateWithDiagnostics(val candidate: KotlinResolutionCandidate, val diagnostics: List<KotlinCallDiagnostic>)
fun CallResolutionResult.resultCallAtom(): ResolvedCallAtom? =
if (this is SingleCallResolutionResult) resultCallAtom else null