From 19c28c55c54ec784f0cf2fdac92c085399438177 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Thu, 15 Aug 2019 16:11:18 +0300 Subject: [PATCH] Allow serialization plugin to work with inline types which are primitives (e.g. Char in JS IR) --- .../diagnostic/SerializationPluginDeclarationChecker.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt index c58b349b9b3..43a373f770d 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlinx.serialization.compiler.diagnostic import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticFactory0 import org.jetbrains.kotlin.diagnostics.reportFromPlugin @@ -190,6 +191,8 @@ open class SerializationPluginDeclarationChecker : DeclarationChecker { } } + private fun KotlinType.isUnsupportedInlineType() = isInlineClassType() && !KotlinBuiltIns.isPrimitiveTypeOrNullablePrimitiveType(this) + private fun AbstractSerialGenerator.checkType( module: ModuleDescriptor, type: KotlinType, @@ -199,7 +202,7 @@ open class SerializationPluginDeclarationChecker : DeclarationChecker { ) { if (type.genericIndex != null) return // type arguments always have serializer stored in class' field val element = ktType?.typeElement - if (type.isInlineClassType()) { + if (type.isUnsupportedInlineType()) { trace.reportFromPlugin( SerializationErrors.INLINE_CLASSES_NOT_SUPPORTED.on(element ?: fallbackElement), SerializationPluginErrorsRendering