[FIR] Don't discriminate generics in conflict resolution for callable references

#KT-59430 Fixed
This commit is contained in:
Kirill Rakhman
2023-09-21 16:29:29 +02:00
committed by Space Team
parent 141dc96067
commit 65ff684589
2 changed files with 9 additions and 2 deletions
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.getSingleExpectForActualOrNull
import org.jetbrains.kotlin.fir.declarations.utils.isActual
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
@@ -53,7 +54,13 @@ class ConeOverloadConflictResolver(
override fun chooseMaximallySpecificCandidates(
candidates: Set<Candidate>,
discriminateAbstracts: Boolean,
): Set<Candidate> = chooseMaximallySpecificCandidates(candidates, discriminateAbstracts, discriminateGenerics = true)
): Set<Candidate> = chooseMaximallySpecificCandidates(
candidates,
discriminateAbstracts,
// We don't discriminate against generics for callable references because, other than in regular calls,
// there is no syntax for specifying generic type arguments.
discriminateGenerics = candidates.first().callInfo.callSite !is FirCallableReferenceAccess
)
/**
* Partial mirror of [org.jetbrains.kotlin.resolve.calls.results.OverloadingConflictResolver.chooseMaximallySpecificCandidates]
@@ -8,6 +8,6 @@ class A
class B
fun box(): String {
val ref1 = take(::foo) // error before 1.6.20; ok, resolved to (3) since 1.6.20
val ref1 = take(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>) // error before 1.6.20; ok, resolved to (3) since 1.6.20
return "OK"
}