Add serializer(vararg KSerializer<*>) override from SerializerFactory when necessary

SerializerFactory is an implementation detail for Kotlin/JS and Native:
it should be added as a supertype to a companion object of certain serializable classes
and `serializer(vararg KSerializer<*>)` function from it should be implemented.
Existing implementation added the supertype, but did not add proper override to FirClass
of a companion, which led to various warnings and errors like 'Abstract function 'serializer' is not implemented in non-abstract companion object'.

Also implemented the addition of SerializerFactory supertype to user-defined companions within @Serializable and @MetaSerializable when necessary.

Also set up proper box tests for FIR+Kotlin/JS combination.

#KT-58501 Fixed
#KT-59768 Fixed
This commit is contained in:
Leonid Startsev
2023-06-28 18:18:40 +02:00
committed by Space Team
parent 351e9c7592
commit f3833fdcf8
11 changed files with 276 additions and 39 deletions
@@ -64,6 +64,10 @@ fun main(args: Array<String>) {
testClass<AbstractSerializationIrJsBoxTest> {
model("boxIr")
}
testClass<AbstractSerializationFirJsBoxTest> {
model("boxIr")
}
}
}
}
@@ -5,6 +5,8 @@
package org.jetbrains.kotlinx.serialization.runners
import org.jetbrains.kotlin.js.test.fir.AbstractFirJsBoxTest
import org.jetbrains.kotlin.js.test.fir.AbstractFirJsTest
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.codegen.AbstractFirLightTreeBlackBoxCodegenTest
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest
@@ -48,4 +50,14 @@ open class AbstractSerializationIrJsBoxTest : AbstractJsIrTest(
super.configure(builder)
builder.configureForKotlinxSerialization(target = TargetBackend.JS_IR)
}
}
}
open class AbstractSerializationFirJsBoxTest : AbstractFirJsTest(
pathToTestDir = "plugins/kotlinx-serialization/testData/boxIr/",
testGroupOutputDirPrefix = "codegen/serializationBoxFir/"
) {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.configureForKotlinxSerialization(target = TargetBackend.JS_IR)
}
}