From b43f717f6d24a6ccbc4152dba8760098a32f7ef1 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 3 Jun 2019 19:57:44 +0300 Subject: [PATCH] Optimize AbstractTypeChecker::hasNothingSupertype It doesn't make sense to go through all supertypes because Nothing is a final class --- .../org/jetbrains/kotlin/types/AbstractTypeChecker.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/type-system/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt b/core/type-system/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt index cb31e57ea16..5a6ffc07839 100644 --- a/core/type-system/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt +++ b/core/type-system/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt @@ -215,14 +215,19 @@ object AbstractTypeChecker { return null } - private fun AbstractTypeCheckerContext.hasNothingSupertype(type: SimpleTypeMarker) = // todo add tests - anySupertype(type, { it.typeConstructor().isNothingConstructor() }) { + private fun AbstractTypeCheckerContext.hasNothingSupertype(type: SimpleTypeMarker): Boolean { + val typeConstructor = type.typeConstructor() + if (typeConstructor.isClassTypeConstructor()) { + return typeConstructor.isNothingConstructor() + } + return anySupertype(type, { it.typeConstructor().isNothingConstructor() }) { if (it.isClassType()) { SupertypesPolicy.None } else { SupertypesPolicy.LowerIfFlexible } } + } private fun AbstractTypeCheckerContext.isSubtypeOfForSingleClassifierType(subType: SimpleTypeMarker, superType: SimpleTypeMarker): Boolean { if (AbstractTypeChecker.RUN_SLOW_ASSERTIONS) {