[FIR] Don't discriminate generics in conflict resolution for callable references
#KT-59430 Fixed
This commit is contained in:
committed by
Space Team
parent
141dc96067
commit
65ff684589
+8
-1
@@ -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.isActual
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
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.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||||
@@ -53,7 +54,13 @@ class ConeOverloadConflictResolver(
|
|||||||
override fun chooseMaximallySpecificCandidates(
|
override fun chooseMaximallySpecificCandidates(
|
||||||
candidates: Set<Candidate>,
|
candidates: Set<Candidate>,
|
||||||
discriminateAbstracts: Boolean,
|
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]
|
* Partial mirror of [org.jetbrains.kotlin.resolve.calls.results.OverloadingConflictResolver.chooseMaximallySpecificCandidates]
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ class A
|
|||||||
class B
|
class B
|
||||||
|
|
||||||
fun box(): String {
|
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"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user