From fe78e153f760be975cb817a068f1eb65160dec7f Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 10 Jul 2019 14:06:35 +0300 Subject: [PATCH] [Misc] Introduce helper-method 'IntersectionTypeConstructor.createType()' --- .../org/jetbrains/kotlin/types/TypeIntersector.java | 11 +---------- .../kotlin/types/IntersectionTypeConstructor.kt | 8 +++++++- .../src/org/jetbrains/kotlin/types/SpecialTypes.kt | 8 +------- .../kotlin/types/checker/IntersectionType.kt | 10 +--------- .../kotlin/types/checker/NewKotlinTypeChecker.kt | 9 ++------- 5 files changed, 12 insertions(+), 34 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/TypeIntersector.java b/compiler/frontend/src/org/jetbrains/kotlin/types/TypeIntersector.java index 18616c7901d..22f8c2e6fca 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/TypeIntersector.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/TypeIntersector.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.resolve.calls.inference.CallHandle; import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystem; import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilderImpl; @@ -132,15 +131,7 @@ public class TypeIntersector { return TypeUtils.makeNullableAsSpecified(resultingTypes.get(0), allNullable); } - IntersectionTypeConstructor constructor = new IntersectionTypeConstructor(resultingTypes); - - return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope( - Annotations.Companion.getEMPTY(), - constructor, - Collections.emptyList(), - allNullable, - constructor.createScopeForKotlinType() - ); + return new IntersectionTypeConstructor(resultingTypes).createType(); } /** diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt b/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt index f0e097bd7ce..fb66f13d1fc 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.types import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.TypeIntersectionScope import java.util.* @@ -60,6 +61,11 @@ class IntersectionTypeConstructor(typesToIntersect: Collection) : Ty return intersectedTypes == other.intersectedTypes } + fun createType(): SimpleType = + KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope( + Annotations.EMPTY, this, listOf(), false, this.createScopeForKotlinType() + ) + override fun hashCode(): Int = hashCode } @@ -80,4 +86,4 @@ inline fun IntersectionTypeConstructor.transformComponents( if (!changed) return null return IntersectionTypeConstructor(newSupertypes) -} \ No newline at end of file +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/SpecialTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/types/SpecialTypes.kt index 2cafc763c2f..efd4080bb79 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/SpecialTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/SpecialTypes.kt @@ -127,13 +127,7 @@ private fun KotlinType.makeIntersectionTypeDefinitelyNotNullOrNotNull(): SimpleT val typeConstructor = constructor as? IntersectionTypeConstructor ?: return null val definitelyNotNullConstructor = typeConstructor.makeDefinitelyNotNullOrNotNull() ?: return null - return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope( - annotations, - definitelyNotNullConstructor, - listOf(), - false, - definitelyNotNullConstructor.createScopeForKotlinType() - ) + return definitelyNotNullConstructor.createType() } private fun IntersectionTypeConstructor.makeDefinitelyNotNullOrNotNull(): IntersectionTypeConstructor? { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/checker/IntersectionType.kt b/core/descriptors/src/org/jetbrains/kotlin/types/checker/IntersectionType.kt index 7852fa189e1..9a0b9cf5e31 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/checker/IntersectionType.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/checker/IntersectionType.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.types.checker -import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor import org.jetbrains.kotlin.types.* import java.util.* @@ -119,14 +118,7 @@ object TypeIntersector { if (filteredSuperAndEqualTypes.size < 2) return filteredSuperAndEqualTypes.single() - val constructor = IntersectionTypeConstructor(inputTypes) - return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope( - Annotations.EMPTY, - constructor, - listOf(), - false, - constructor.createScopeForKotlinType() - ) + return IntersectionTypeConstructor(inputTypes).createType() } private fun filterTypes( 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 30ea12d9fec..2842402b1ea 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewKotlinTypeChecker.kt @@ -111,13 +111,8 @@ class NewKotlinTypeCheckerImpl() : NewKotlinTypeChecker { is IntersectionTypeConstructor -> if (type.isMarkedNullable) { val newConstructor = constructor.transformComponents(transform = { it.makeNullable() }) ?: constructor - return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope( - type.annotations, - newConstructor, - listOf(), - false, - newConstructor.createScopeForKotlinType() - ) + return newConstructor.createType() + } }