From 0736cb3facf3e8db8e9433069e3d133f53a28727 Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Tue, 7 Nov 2023 16:23:03 +0200 Subject: [PATCH] [LL] Fix KtDynamicType deserialization KT-63217 --- .../deserialization/StubBasedFirTypeDeserializer.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt index 5228ebddace..9a2ea9e56dc 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt @@ -175,20 +175,17 @@ internal class StubBasedFirTypeDeserializer( } private fun type(typeReference: KtTypeReference, attributes: ConeAttributes): ConeKotlinType { + if (typeReference.typeElement?.unwrapNullability() is KtDynamicType) { + return ConeDynamicType.create(moduleData.session) + } + val userType = typeReference.typeElement as? KtUserType val upperBoundType = (userType?.let { it.stub ?: loadStubByElement(it) } as? KotlinUserTypeStubImpl)?.upperBound if (upperBoundType != null) { val lowerBound = simpleType(typeReference, attributes) val upperBound = type(upperBoundType) - val isDynamic = lowerBound == moduleData.session.builtinTypes.nothingType.coneType && - upperBound == moduleData.session.builtinTypes.nullableAnyType.coneType - - return if (isDynamic) { - ConeDynamicType.create(moduleData.session) - } else { - ConeFlexibleType(lowerBound!!, upperBound as ConeSimpleKotlinType) - } + return ConeFlexibleType(lowerBound!!, upperBound as ConeSimpleKotlinType) } return simpleType(typeReference, attributes) ?: ConeErrorType(ConeSimpleDiagnostic("?!id:0", DiagnosticKind.DeserializationError))