[FE 1.0] Eliminate resolution ambiguity with external type parameters
^KT-10926 Fixed
This commit is contained in:
committed by
teamcityserver
parent
31668ed40d
commit
a5c6d370dd
+14
-7
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.resolve.calls.components
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector
|
||||
import org.jetbrains.kotlin.resolve.calls.model.KotlinCallArgument
|
||||
@@ -57,10 +58,15 @@ class NewOverloadingConflictResolver(
|
||||
|
||||
companion object {
|
||||
private fun createFlatSignature(candidate: ResolutionCandidate): FlatSignature<ResolutionCandidate> {
|
||||
|
||||
val resolvedCall = candidate.resolvedCall
|
||||
val originalDescriptor = resolvedCall.candidateDescriptor.original
|
||||
val originalValueParameters = originalDescriptor.valueParameters
|
||||
val isEliminationAmbiguitiesWithExternalTypeParametersEnabled =
|
||||
candidate.callComponents.languageVersionSettings.supportsFeature(LanguageFeature.EliminateAmbiguitiesWithExternalTypeParameters)
|
||||
val descriptor = if (isEliminationAmbiguitiesWithExternalTypeParametersEnabled) {
|
||||
resolvedCall.candidateDescriptor
|
||||
} else {
|
||||
resolvedCall.candidateDescriptor.original
|
||||
}
|
||||
val valueParameters = descriptor.valueParameters
|
||||
|
||||
var numDefaults = 0
|
||||
val valueArgumentToParameterType = HashMap<KotlinCallArgument, KotlinType>()
|
||||
@@ -68,16 +74,17 @@ class NewOverloadingConflictResolver(
|
||||
if (resolvedValueArgument is ResolvedCallArgument.DefaultArgument) {
|
||||
numDefaults++
|
||||
} else {
|
||||
val originalValueParameter = originalValueParameters[valueParameter.index]
|
||||
val originalValueParameter = valueParameters[valueParameter.index]
|
||||
for (valueArgument in resolvedValueArgument.arguments) {
|
||||
valueArgumentToParameterType[valueArgument] = candidate.resolvedCall.argumentsWithConversion[valueArgument]?.convertedTypeByOriginParameter ?:
|
||||
valueArgument.getExpectedType(originalValueParameter, candidate.callComponents.languageVersionSettings)
|
||||
valueArgumentToParameterType[valueArgument] =
|
||||
candidate.resolvedCall.argumentsWithConversion[valueArgument]?.convertedTypeByOriginParameter
|
||||
?: valueArgument.getExpectedType(originalValueParameter, candidate.callComponents.languageVersionSettings)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FlatSignature.create(candidate,
|
||||
originalDescriptor,
|
||||
descriptor,
|
||||
numDefaults,
|
||||
resolvedCall.atom.argumentsInParenthesis.map { valueArgumentToParameterType[it] } +
|
||||
listOfNotNull(resolvedCall.atom.externalArgument?.let { valueArgumentToParameterType[it] })
|
||||
|
||||
Reference in New Issue
Block a user