AbstractTypeChecker: fix special case with CapturedType as self type argument

#KT-53908 Fixed
May fix also KT-53271
This commit is contained in:
Mikhail Glukhikh
2022-09-19 10:38:19 +02:00
committed by Space
parent ed21011183
commit a4b2a8c4ea
5 changed files with 7 additions and 18 deletions
@@ -596,8 +596,8 @@ object AbstractTypeChecker {
): TypeParameterMarker? {
for (i in 0 until baseType.argumentsCount()) {
val typeArgument = baseType.getArgument(i).takeIf { !it.isStarProjection() }?.getType() ?: continue
val areBothTypesCaptured =
typeArgument.lowerBoundIfFlexible().isCapturedType() && targetType.lowerBoundIfFlexible().isCapturedType()
val areBothTypesCaptured = typeArgument.lowerBoundIfFlexible().originalIfDefinitelyNotNullable().isCapturedType() &&
targetType.lowerBoundIfFlexible().originalIfDefinitelyNotNullable().isCapturedType()
if (typeArgument == targetType || (areBothTypesCaptured && typeArgument.typeConstructor() == targetType.typeConstructor())) {
return baseType.typeConstructor().getParameter(i)