diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt index e29b6fd343d..490afefac26 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt @@ -32,10 +32,16 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner import org.jetbrains.kotlin.types.refinement.TypeRefinement import org.jetbrains.kotlin.types.typeUtil.builtIns -class RawTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : FlexibleType(lowerBound, upperBound), RawType { +class RawTypeImpl private constructor(lowerBound: SimpleType, upperBound: SimpleType, disableAssertion: Boolean) : + FlexibleType(lowerBound, upperBound), RawType { + + constructor(lowerBound: SimpleType, upperBound: SimpleType) : this(lowerBound, upperBound, false) + init { - assert(KotlinTypeChecker.DEFAULT.isSubtypeOf(lowerBound, upperBound)) { - "Lower bound $lowerBound of a flexible type must be a subtype of the upper bound $upperBound" + if (!disableAssertion) { + assert(KotlinTypeChecker.DEFAULT.isSubtypeOf(lowerBound, upperBound)) { + "Lower bound $lowerBound of a flexible type must be a subtype of the upper bound $upperBound" + } } } @@ -87,7 +93,11 @@ class RawTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : FlexibleType @TypeRefinement @UseExperimental(TypeRefinement::class) override fun refine(kotlinTypeRefiner: KotlinTypeRefiner): FlexibleType { - return RawTypeImpl(kotlinTypeRefiner.refineType(lowerBound) as SimpleType, kotlinTypeRefiner.refineType(upperBound) as SimpleType) + return RawTypeImpl( + kotlinTypeRefiner.refineType(lowerBound) as SimpleType, + kotlinTypeRefiner.refineType(upperBound) as SimpleType, + disableAssertion = true + ) } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt index 37c2f83f3cb..358cdf9fcc2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt @@ -139,9 +139,10 @@ class FlexibleTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : Flexibl @TypeRefinement @UseExperimental(TypeRefinement::class) - override fun refine(kotlinTypeRefiner: KotlinTypeRefiner) = - KotlinTypeFactory.flexibleType( + override fun refine(kotlinTypeRefiner: KotlinTypeRefiner): FlexibleType { + return FlexibleTypeImpl( kotlinTypeRefiner.refineType(lowerBound) as SimpleType, kotlinTypeRefiner.refineType(upperBound) as SimpleType - ) as FlexibleType + ) + } }