From 00df41ee250e4e96d69568369a261de741f599c9 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 5 Oct 2017 11:49:39 +0300 Subject: [PATCH] Optimize subtyping for simple cases --- .../jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt b/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt index f69af29f5c3..643e44d18a1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.types.checker.TypeCheckerContext.LowerCapturedTypePo import org.jetbrains.kotlin.types.checker.TypeCheckerContext.SeveralSupertypesWithSameConstructorPolicy.* import org.jetbrains.kotlin.types.checker.TypeCheckerContext.SupertypesPolicy import org.jetbrains.kotlin.types.typeUtil.asTypeProjection +import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny import org.jetbrains.kotlin.types.typeUtil.makeNullable import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -216,6 +217,10 @@ object NewKotlinTypeChecker : KotlinTypeChecker { if (!NullabilityChecker.isPossibleSubtype(this, subType, superType)) return false val superConstructor = superType.constructor + + if (subType.constructor == superConstructor && superConstructor.parameters.isEmpty()) return true + if (superType.isAnyOrNullableAny()) return true + val supertypesWithSameConstructor = findCorrespondingSupertypes(subType, superConstructor) when (supertypesWithSameConstructor.size) { 0 -> return hasNothingSupertype(subType) // todo Nothing & Array <: Array