From ff7c095fb32a2e64220c44cc5ec03739b870a75f Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 13 Mar 2023 15:51:22 +0100 Subject: [PATCH] [FIR][Serialization] Use `resolvedCompilerAnnotationsWithClassIds` to avoid recursive resolve `resolvedAnnotationsWithClassIds` requires resolve to TYPES phase, which is unavailable during compiler plugins stages. Trying to resolve to that phases will cause an infinite recursive resolve loop Also, call `resolvedAnnotationsWithArguments` only when `neededArguments` is true ^KTIJ-24893 Fixed --- .../serialization/compiler/fir/SerializationFirUtils.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt index a65a1b4e835..2d6af1d79c1 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt @@ -84,7 +84,11 @@ val FirClassSymbol<*>.hasSerializableAnnotation: Boolean get() = serializableAnnotation(needArguments = false, this@FirSession) != null fun FirBasedSymbol<*>.serializableAnnotation(needArguments: Boolean, session: FirSession): FirAnnotation? { - val annotations = if (needArguments) resolvedAnnotationsWithClassIds else resolvedAnnotationsWithArguments + val annotations = if (needArguments) { + resolvedAnnotationsWithArguments + } else { + resolvedCompilerAnnotationsWithClassIds + } return annotations.serializableAnnotation(session) }