KT-27565 fix
This commit is contained in:
+2
-1
@@ -46,7 +46,8 @@ class CallableReferenceOverloadConflictResolver(
|
||||
{ SimpleConstraintSystemImpl(constraintInjector, builtIns) },
|
||||
Companion::createFlatSignature,
|
||||
{ null },
|
||||
{ statelessCallbacks.isDescriptorFromSource(it) }
|
||||
{ statelessCallbacks.isDescriptorFromSource(it) },
|
||||
null
|
||||
) {
|
||||
companion object {
|
||||
private fun createFlatSignature(candidate: CallableReferenceCandidate) =
|
||||
|
||||
+2
-1
@@ -46,7 +46,8 @@ class NewOverloadingConflictResolver(
|
||||
{ SimpleConstraintSystemImpl(constraintInjector, builtIns) },
|
||||
Companion::createFlatSignature,
|
||||
{ it.variableCandidateIfInvoke },
|
||||
{ statelessCallbacks.isDescriptorFromSource(it) }
|
||||
{ statelessCallbacks.isDescriptorFromSource(it) },
|
||||
{ it.resolvedCall.hasSamConversion }
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
||||
+3
@@ -178,6 +178,9 @@ class MutableResolvedCallAtom(
|
||||
lateinit var argumentToCandidateParameter: Map<KotlinCallArgument, ValueParameterDescriptor>
|
||||
private var samAdapterMap: HashMap<KotlinCallArgument, SamConversionDescription>? = null
|
||||
|
||||
val hasSamConversion: Boolean
|
||||
get() = samAdapterMap != null
|
||||
|
||||
override val argumentsWithConversion: Map<KotlinCallArgument, SamConversionDescription>
|
||||
get() = samAdapterMap ?: emptyMap()
|
||||
|
||||
|
||||
+13
-4
@@ -38,7 +38,8 @@ open class OverloadingConflictResolver<C : Any>(
|
||||
private val createEmptyConstraintSystem: () -> SimpleConstraintSystem,
|
||||
private val createFlatSignature: (C) -> FlatSignature<C>,
|
||||
private val getVariableCandidates: (C) -> C?, // for variable WithInvoke
|
||||
private val isFromSources: (CallableDescriptor) -> Boolean
|
||||
private val isFromSources: (CallableDescriptor) -> Boolean,
|
||||
private val hasSAMConversion: ((C) -> Boolean)?
|
||||
) {
|
||||
|
||||
private val resolvedCallHashingStrategy = object : TObjectHashingStrategy<C> {
|
||||
@@ -153,10 +154,17 @@ open class OverloadingConflictResolver<C : Any>(
|
||||
|
||||
CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS ->
|
||||
findMaximallySpecificCall(candidates, discriminateGenerics, isDebuggerContext)
|
||||
?: findMaximallySpecificCall(
|
||||
candidates.filterNotTo(mutableSetOf()) { createFlatSignature(it).isSyntheticMember },
|
||||
?: hasSAMConversion?.let { hasConversion ->
|
||||
findMaximallySpecificCall(
|
||||
candidates.filterNotTo(mutableSetOf()) { hasConversion(it) },
|
||||
discriminateGenerics, isDebuggerContext
|
||||
)
|
||||
}
|
||||
|
||||
?: findMaximallySpecificCall(
|
||||
candidates.filterNotTo(mutableSetOf()) { createFlatSignature(it).isSyntheticMember },
|
||||
discriminateGenerics, isDebuggerContext
|
||||
)
|
||||
}
|
||||
|
||||
// null means ambiguity between variables
|
||||
@@ -395,7 +403,8 @@ open class OverloadingConflictResolver<C : Any>(
|
||||
gSignature,
|
||||
SpecificityComparisonWithNumerics,
|
||||
specificityComparator
|
||||
)) {
|
||||
)
|
||||
) {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user