Add tests for inferring self types from Java

This commit is contained in:
Victor Petukhov
2021-07-07 14:19:55 +03:00
parent 3b16865152
commit 9e48ef85ea
11 changed files with 171 additions and 10 deletions
@@ -546,13 +546,15 @@ object AbstractTypeChecker {
targetType: KotlinTypeMarker
): TypeParameterMarker? {
for (i in 0 until baseType.argumentsCount()) {
val typeArgument = baseType.getArgument(i).takeIf { !it.isStarProjection() } ?: continue
val typeArgument = baseType.getArgument(i).takeIf { !it.isStarProjection() }?.getType() ?: continue
val areBothTypesCaptured =
typeArgument.lowerBoundIfFlexible().isCapturedType() && targetType.lowerBoundIfFlexible().isCapturedType()
if (typeArgument.getType() == targetType) {
if (typeArgument == targetType || (areBothTypesCaptured && typeArgument.typeConstructor() == targetType.typeConstructor())) {
return baseType.typeConstructor().getParameter(i)
}
getTypeParameterForArgumentInBaseIfItEqualToTarget(typeArgument.getType(), targetType)?.let { return it }
getTypeParameterForArgumentInBaseIfItEqualToTarget(typeArgument, targetType)?.let { return it }
}
return null