From 56c818e0a9f13b7094b6a088ea37dedec7d11fc4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 7 Dec 2022 12:02:04 +0100 Subject: [PATCH] EmptyIntersectionTypeChecker: drop redundant checks + extra cleanup --- .../checkers/EmptyIntersectionTypeChecker.kt | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/core/compiler.common/src/org/jetbrains/kotlin/resolve/checkers/EmptyIntersectionTypeChecker.kt b/core/compiler.common/src/org/jetbrains/kotlin/resolve/checkers/EmptyIntersectionTypeChecker.kt index c48615eb34b..a79160f0ec9 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/resolve/checkers/EmptyIntersectionTypeChecker.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/resolve/checkers/EmptyIntersectionTypeChecker.kt @@ -21,7 +21,7 @@ internal object EmptyIntersectionTypeChecker { val types = types.toList() var possibleEmptyIntersectionTypeInfo: EmptyIntersectionTypeInfo? = null - for (i in 0 until types.size) { + for (i in types.indices) { val firstType = types[i] if (!mayCauseEmptyIntersection(firstType)) continue @@ -75,24 +75,11 @@ internal object EmptyIntersectionTypeChecker { val secondType = expandedTypes[j].withNullability(false) val secondTypeConstructor = secondType.typeConstructor() - if (!mayCauseEmptyIntersection(secondType)) - continue - - if (areEqualTypeConstructors(firstTypeConstructor, secondTypeConstructor) && secondTypeConstructor.parametersCount() == 0) - continue - - if (AbstractTypeChecker.areRelatedBySubtyping(this, firstType, secondType)) - continue - - // If two classes aren't related by subtyping and no need to compare their type arguments, then they can't have a common subtype - if ( - firstTypeConstructor.isDefinitelyClassTypeConstructor() && secondTypeConstructor.isDefinitelyClassTypeConstructor() - && (firstTypeConstructor.parametersCount() == 0 || secondTypeConstructor.parametersCount() == 0) - ) { - return EmptyIntersectionTypeInfo(EmptyIntersectionTypeKind.MULTIPLE_CLASSES, firstType, secondType) - } - when { + !mayCauseEmptyIntersection(secondType) -> { + } + areEqualTypeConstructors(firstTypeConstructor, secondTypeConstructor) -> { + } firstType.lowerBoundIfFlexible().isSubtypeOfIgnoringArguments(typeCheckerState, secondTypeConstructor) || secondType.lowerBoundIfFlexible().isSubtypeOfIgnoringArguments(typeCheckerState, firstTypeConstructor) -> { }