From 631a72d14a889bdaf0e120b4faf32c540dba2cd1 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Sat, 19 Dec 2020 20:34:11 +0300 Subject: [PATCH] Support old serialization runtime versions (where exception signatures weren't changed) after f671c27f27404c08f3fe43dd2178889f21589c13 --- .../backend/js/SerializableJsTranslator.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt index d3ebe5ed418..8adb67a012e 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt @@ -40,7 +40,6 @@ class SerializableJsTranslator( val missingExceptionClassRef = serializableDescriptor.getClassFromSerializationPackage(MISSING_FIELD_EXC) .constructors.single { it.valueParameters.size == 1 } - .let { context.getInnerNameForDescriptor(it).makeRef() } val f = context.buildFunction(constructorDescriptor) { jsFun, context -> val thiz = jsFun.scope.declareName(Namer.ANOTHER_THIS_PARAMETER_NAME).makeRef() @@ -88,7 +87,19 @@ class SerializableJsTranslator( val initExpr = Translation.translateAsExpression(initializer, context) TranslationUtils.assignmentToBackingField(context, prop.descriptor, initExpr).makeStmt() } else { - JsThrow(JsInvocation(missingExceptionClassRef, listOf(JsStringLiteral(prop.name)))) + JsThrow( + if (missingExceptionClassRef.isPrimary) { + JsNew( + context.translateQualifiedReference(missingExceptionClassRef.containingDeclaration), + listOf(JsStringLiteral(prop.name)) + ) + } else { + JsInvocation( + context.getInnerNameForDescriptor(missingExceptionClassRef).makeRef(), + listOf(JsStringLiteral(prop.name)) + ) + } + ) } // (seen & 1 << i == 0) -- not seen val notSeenTest = propNotSeenTest(seenVars[bitMaskSlotAt(index)], index)