KT-27565 fix
This commit is contained in:
+2
-1
@@ -63,5 +63,6 @@ fun createOverloadingConflictResolver(
|
||||
ConstraintSystemBuilderImpl.Companion::forSpecificity,
|
||||
MutableResolvedCall<*>::createFlatSignature,
|
||||
{ (it as? VariableAsFunctionResolvedCallImpl)?.variableCall },
|
||||
{ DescriptorToSourceUtils.descriptorToDeclaration(it) != null }
|
||||
{ DescriptorToSourceUtils.descriptorToDeclaration(it) != null },
|
||||
null
|
||||
)
|
||||
|
||||
+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
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,11 @@ public interface Runnable {
|
||||
// FILE: k.kt
|
||||
|
||||
fun fail() {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>({ }, { })
|
||||
foo({ }, { })
|
||||
foo(::bar, { })
|
||||
}
|
||||
|
||||
fun foo(f: Runnable, selector: () -> Unit) {}
|
||||
fun foo(func1: () -> Unit, func2: () -> Unit) {}
|
||||
|
||||
fun bar() {}
|
||||
@@ -1,5 +1,6 @@
|
||||
package
|
||||
|
||||
public fun bar(): kotlin.Unit
|
||||
public fun fail(): kotlin.Unit
|
||||
public fun foo(/*0*/ func1: () -> kotlin.Unit, /*1*/ func2: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun foo(/*0*/ f: Runnable, /*1*/ selector: () -> kotlin.Unit): kotlin.Unit
|
||||
|
||||
Reference in New Issue
Block a user