From 34779029f3c14ebd62b341ebe2d2bbf596b7b601 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Tue, 20 Sep 2022 21:24:00 +0200 Subject: [PATCH] Avoid recursive type refinement Recursion happens in kotlinx.serialization project https://github.com/Kotlin/kotlinx.serialization/blob/5e8ccad1f70a9457e0ffe6ae6b10a0bd0eaaa618/formats/json-tests/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt#L37 @Serializable data class C(@Id(1) val a: Int = 31, @Id(2) val b: Int = 42) { @Serializer(forClass = C::class) companion object : KSerializer { override fun serialize(encoder: Encoder, value: C) { // } } } #KT-53157 --- .../src/org/jetbrains/kotlin/types/KotlinTypeRefinerImpl.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeRefinerImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeRefinerImpl.kt index d408f415010..5224a6785d5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeRefinerImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeRefinerImpl.kt @@ -77,6 +77,7 @@ class KotlinTypeRefinerImpl( @TypeRefinement override fun refineType(type: KotlinTypeMarker): KotlinType { require(type is KotlinType) + if (type.constructor.declarationDescriptor?.module == moduleDescriptor) return type return when { !type.needsRefinement() -> type