[FE] Resolve overload conflict between contextual and non-contextual declarations

This commit is contained in:
Anastasiya Shadrina
2021-06-30 19:07:26 +07:00
committed by TeamCityServer
parent 7fd5034cd6
commit f427265739
12 changed files with 267 additions and 125 deletions
@@ -18,6 +18,7 @@ class FlatSignature<out T> constructor(
val origin: T,
val typeParameters: Collection<TypeParameterMarker>,
val hasExtensionReceiver: Boolean,
val contextReceiverCount: Int,
val hasVarargs: Boolean,
val numDefaults: Int,
val isExpect: Boolean,
@@ -31,12 +32,13 @@ class FlatSignature<out T> constructor(
typeParameters: Collection<TypeParameterMarker>,
valueParameterTypes: List<KotlinTypeMarker?>,
hasExtensionReceiver: Boolean,
contextReceiverCount: Int,
hasVarargs: Boolean,
numDefaults: Int,
isExpect: Boolean,
isSyntheticMember: Boolean,
) : this(
origin, typeParameters, hasExtensionReceiver, hasVarargs, numDefaults, isExpect,
origin, typeParameters, hasExtensionReceiver, contextReceiverCount, hasVarargs, numDefaults, isExpect,
isSyntheticMember, valueParameterTypes.map(::TypeWithConversion)
)
@@ -106,6 +108,7 @@ fun <T> SimpleConstraintSystem.isSignatureNotLessSpecific(
useOriginalSamTypes: Boolean = false
): Boolean {
if (specific.hasExtensionReceiver != general.hasExtensionReceiver) return false
if (specific.contextReceiverCount != general.contextReceiverCount) return false
if (specific.valueParameterTypes.size != general.valueParameterTypes.size) return false
if (!isValueParameterTypeNotLessSpecific(specific, general, callbacks, specificityComparator) { it?.resultType }) {