[NI] Check for maximally specific candidate chosen with factory resolution
This commit is contained in:
@@ -144,11 +144,17 @@ class KotlinCallResolver(
|
||||
candidates.all { resolutionCallbacks.inferenceSession.shouldRunCompletion(it) }
|
||||
) {
|
||||
val candidatesWithAnnotation =
|
||||
candidates.filter { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION) }
|
||||
candidates.filterTo(mutableSetOf()) { it.resolvedCall.candidateDescriptor.annotations.hasAnnotation(OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION) }
|
||||
if (candidatesWithAnnotation.isNotEmpty()) {
|
||||
maximallySpecificCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks)
|
||||
val newCandidates = kotlinCallCompleter.chooseCandidateRegardingFactoryPatternResolution(maximallySpecificCandidates, resolutionCallbacks)
|
||||
maximallySpecificCandidates = overloadingConflictResolver.chooseMaximallySpecificCandidates(
|
||||
newCandidates,
|
||||
CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
||||
discriminateGenerics = true
|
||||
)
|
||||
|
||||
if (maximallySpecificCandidates.size > 1) {
|
||||
maximallySpecificCandidates = candidatesWithAnnotation.toSet() // or revert to original list?
|
||||
maximallySpecificCandidates = candidatesWithAnnotation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -118,9 +118,11 @@ class KotlinCallCompleter(
|
||||
diagnosticHolderForLambda,
|
||||
shouldRunInIndependentContext = true
|
||||
)
|
||||
lambdas.getValue(firstCandidate).setAnalyzedResults(results.returnArgumentsInfo, listOf(firstAtom))
|
||||
|
||||
val lambdaReturnType = results.lambdaReturnType ?: return candidates
|
||||
lambdas.getValue(firstCandidate).setAnalyzedResults(results.returnArgumentsInfo, listOf(firstAtom))
|
||||
firstCandidate.csBuilder.addSubtypeConstraint(lambdaReturnType, firstAtom.returnType, LambdaArgumentConstraintPosition(firstAtom))
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
val (candidate, atom) = iterator.next()
|
||||
atom.setAnalyzedResults(results.returnArgumentsInfo, firstAtom.subResolvedAtoms!!)
|
||||
|
||||
Reference in New Issue
Block a user