From c1b0405c4e16e2017929a945046ee28587823ab3 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 6 Sep 2022 11:47:06 +0200 Subject: [PATCH] [FE 1.0] Use the old type intersection for type parameter bounds This is a partial revert of commit bc1c2ada We have to use old type intersector for emptiness check because KT-53656 were found. We return to old type intersector usage also for type parameter bounds to prevent other possible problems. --- .../src/org/jetbrains/kotlin/resolve/TypeResolver.kt | 5 ++--- .../src/org/jetbrains/kotlin/types/BoundsSubstitutor.java | 3 +-- .../org/jetbrains/kotlin/types/KotlinTypeCheckerTest.java | 6 ++---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt index 9ca2b143c9e..1858d446600 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt @@ -56,7 +56,6 @@ import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.resolve.source.toSourceElement import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.Variance.* -import org.jetbrains.kotlin.types.checker.intersectWrappedTypes import org.jetbrains.kotlin.types.error.ErrorTypeKind import org.jetbrains.kotlin.types.error.ErrorUtils import org.jetbrains.kotlin.types.error.ErrorScope @@ -551,9 +550,9 @@ class TypeResolver( private fun getScopeForTypeParameter(c: TypeResolutionContext, typeParameterDescriptor: TypeParameterDescriptor): MemberScope { return when { - c.checkBounds -> intersectWrappedTypes(typeParameterDescriptor.upperBounds).memberScope + c.checkBounds -> TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope else -> LazyScopeAdapter { - intersectWrappedTypes(typeParameterDescriptor.upperBounds).memberScope + TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/BoundsSubstitutor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/BoundsSubstitutor.java index a10af9c2428..9f856bf39a6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/BoundsSubstitutor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/BoundsSubstitutor.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.CallableDescriptor; import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor; -import org.jetbrains.kotlin.types.checker.IntersectionTypeKt; import org.jetbrains.kotlin.utils.DFS; import java.util.Collections; @@ -58,7 +57,7 @@ public class BoundsSubstitutor { // todo assert: no loops for (TypeParameterDescriptor descriptor : topologicallySortTypeParameters(typeParameters)) { - KotlinType upperBoundsAsType = IntersectionTypeKt.intersectWrappedTypes(descriptor.getUpperBounds()); + KotlinType upperBoundsAsType = TypeIntersector.getUpperBoundsAsType(descriptor); KotlinType substitutedUpperBoundsAsType = substitutor.substitute(upperBoundsAsType, Variance.INVARIANT); mutableSubstitution.put(descriptor.getTypeConstructor(), new TypeProjectionImpl(substitutedUpperBoundsAsType)); } diff --git a/compiler/tests/org/jetbrains/kotlin/types/KotlinTypeCheckerTest.java b/compiler/tests/org/jetbrains/kotlin/types/KotlinTypeCheckerTest.java index b45aff4ad3e..a8483b987f6 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/KotlinTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/KotlinTypeCheckerTest.java @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.psi.KtPsiFactoryKt; import org.jetbrains.kotlin.psi.KtTypeReference; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingTraceContext; -import org.jetbrains.kotlin.resolve.TypeResolutionContext; import org.jetbrains.kotlin.resolve.TypeResolver; import org.jetbrains.kotlin.resolve.calls.components.InferenceSession; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory; @@ -46,7 +45,6 @@ import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.KotlinTestWithEnvironment; import org.jetbrains.kotlin.tests.di.ContainerForTests; import org.jetbrains.kotlin.tests.di.InjectionKt; -import org.jetbrains.kotlin.types.checker.IntersectionTypeKt; import org.jetbrains.kotlin.types.checker.KotlinTypeChecker; import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices; @@ -176,7 +174,7 @@ public class KotlinTypeCheckerTest extends KotlinTestWithEnvironment { assertCommonSupertype("Derived_T", "DDerived_T", "Derived_T"); assertCommonSupertype("Derived_T", "DDerived_T", "DDerived1_T"); - assertCommonSupertype("Comparable", "Comparable", "Comparable"); + assertCommonSupertype("Comparable<*>", "Comparable", "Comparable"); assertCommonSupertype("Base_T", "Base_T", "Base_T"); assertCommonSupertype("Base_T", "Base_T", "Base_T"); assertCommonSupertype("Base_T", "Derived_T", "Base_T"); @@ -508,7 +506,7 @@ public class KotlinTypeCheckerTest extends KotlinTestWithEnvironment { for (String type : types) { typesToIntersect.add(makeType(type)); } - KotlinType result = IntersectionTypeKt.intersectWrappedTypes(typesToIntersect); + KotlinType result = TypeIntersector.intersectTypes(typesToIntersect); // assertNotNull("Intersection is null for " + typesToIntersect, result); assertEquals(makeType(expected), result); }