From 85a1d67d19f40be016de5dc0c209be0a86cf7285 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Fri, 15 Mar 2024 13:07:18 +0100 Subject: [PATCH] [FIR] Fix giant type produced by CST #KT-65704 Fixed --- ...onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.fir.txt | 2 +- .../kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/inference/onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.fir.txt b/compiler/fir/analysis-tests/testData/resolve/inference/onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.fir.txt index 91a31e758b0..022f6fdcbe6 100644 --- a/compiler/fir/analysis-tests/testData/resolve/inference/onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/inference/onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.fir.txt @@ -43,7 +43,7 @@ FILE: onlyInputTypesCapturedTypeWithRecursiveBoundsAfter.kt private final fun test(node: R|FooEnumMap<*>|): R|kotlin/Unit| { R|/node|.R|SubstitutionOverride|>|.R|kotlin/collections/get| & I), it(kotlin/Enum<*>? & I?)>|, R|kotlin/Any!|>(Q|MyEnum|.R|/MyEnum.EnumEntry|) lval map: R|java/util/EnumMap & I), kotlin/Any?>| = R|/node|.R|SubstitutionOverride|>| - R|/map|.R|kotlin/collections/get| & I), it(kotlin/Enum<*>? & I?)>> & I), it(kotlin/Enum<*>? & I?)>> & I), it(kotlin/Enum<*>? & I?)>|, R|kotlin/Any!|>(Q|MyEnum|.R|/MyEnum.EnumEntry|) + R|/map|.R|kotlin/collections/get| & I), it(kotlin/Enum<*>? & I?)>|, R|kotlin/Any!|>(Q|MyEnum|.R|/MyEnum.EnumEntry|) } public open class Foo2

: R|kotlin/Any| { public constructor

(data: R|kotlin/collections/Map|): R|Foo2

| { diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt index 62a9d178d29..94b056296d0 100644 --- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt +++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt @@ -400,8 +400,8 @@ object NewCommonSuperTypeCalculator { if (parameter.getVariance() == TypeVariance.IN) return false // arguments for contravariant parameters are intersected, recursion should not be possible - val originalTypesSet = originalTypesForCst.toSet() - val typeArgumentsTypeSet = typeArgumentsForSuperConstructorParameter.map { it.getType().lowerBoundIfFlexible().originalIfDefinitelyNotNullable() }.toSet() + val originalTypesSet = originalTypesForCst.mapTo(mutableSetOf()) { it.lowerBoundIfFlexible().originalIfDefinitelyNotNullable() } + val typeArgumentsTypeSet = typeArgumentsForSuperConstructorParameter.mapTo(mutableSetOf()) { it.getType().lowerBoundIfFlexible().originalIfDefinitelyNotNullable() } if (originalTypesSet.size != typeArgumentsTypeSet.size) return false