Activate MetaSerializable test and update serialization dependency

This commit is contained in:
Leonid Startsev
2022-07-27 20:13:14 +02:00
committed by Space
parent b0716fe725
commit c1b0ad418b
4 changed files with 101 additions and 81 deletions
+20
View File
@@ -8767,6 +8767,11 @@
<sha256 value="abc222435fa7a892eda76a4a1623ad19792bf5c965426b630c38fb7fdf8a630d" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core" version="1.4.0-RC">
<artifact name="kotlinx-serialization-core-metadata-1.4.0-RC-all.jar">
<sha256 value="87ee01517d3418721737b8f02021e917e49b7065d87b8458907bebfac1fc347c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.0.0">
<artifact name="kotlinx-serialization-core-jvm-1.0.0.jar">
<md5 value="008b4a519c55ce7534359e19f099c274" origin="Generated by Gradle"/>
@@ -8813,6 +8818,11 @@
<sha256 value="7ef62d1a0114052608d0f541c17b25f1faac17a270d5e26217ac4329ea164752" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.4.0-RC">
<artifact name="kotlinx-serialization-core-jvm-1.4.0-RC.jar">
<sha256 value="d6651a429223c906aa51faec629c42d59266666d690d67b6bc8c447ec4ea79bb" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-metadata" version="1.0.0">
<artifact name="kotlinx-serialization-core-metadata-1.0.0-all.jar">
<md5 value="3346a313a80ee63d222a5d2ba6f2b342" origin="Generated by Gradle"/>
@@ -8877,6 +8887,11 @@
<sha256 value="ec642685d370f3aff4ae3efb8e441296d90db9f28b688d9ed888b25db760b844" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json" version="1.4.0-RC">
<artifact name="kotlinx-serialization-json-metadata-1.4.0-RC-all.jar">
<sha256 value="f9f6f8a472e98252e679d999e44f07d83d02128ea1b2ca762cbb8d28776f64af" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json-jvm" version="1.0.0">
<artifact name="kotlinx-serialization-json-jvm-1.0.0.jar">
<md5 value="a7a87f36305c8bef0b5225fd3ca6bccf" origin="Generated by Gradle"/>
@@ -8909,6 +8924,11 @@
<sha256 value="2a0dd7c162c3cc6d713610b81d809bd5976a140dc9efb1eb7152caf093509965" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json-jvm" version="1.4.0-RC">
<artifact name="kotlinx-serialization-json-jvm-1.4.0-RC.jar">
<sha256 value="0d302c3de73ef8db548a5537a522a35eb599ed02a29b579092362bab9c34e1fc" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json-metadata" version="1.0.0">
<artifact name="kotlinx-serialization-json-metadata-1.0.0-all.jar">
<md5 value="5927717cf9292fde25f735dbbc18af5a" origin="Generated by Gradle"/>
@@ -41,8 +41,8 @@ dependencies {
testApi(commonDependency("junit:junit"))
testApiJUnit5(vintageEngine = true)
testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.2.2")
testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2")
testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.4.0-RC")
testImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.0-RC")
testRuntimeOnly(intellijCore())
}
@@ -563,10 +563,7 @@ interface IrBuilderExtension {
}
irAccessor.body = when (isGetter) {
true -> {
irAccessor.returnType = irAccessor.returnType.kClassToJClassIfNeeded()
generateDefaultGetterBody(descriptor as PropertyGetterDescriptor, irAccessor)
}
true -> generateDefaultGetterBody(descriptor as PropertyGetterDescriptor, irAccessor)
false -> generateDefaultSetterBody(descriptor as PropertySetterDescriptor, irAccessor)
}
@@ -597,7 +594,10 @@ interface IrBuilderExtension {
propertyIrType,
receiver
).let {
if (propertyIrType.isKClass()) kClassExprToJClassIfNeeded(startOffset, endOffset, it) else it
if (propertyIrType.isKClass()) {
irAccessor.returnType = irAccessor.returnType.kClassToJClassIfNeeded()
kClassExprToJClassIfNeeded(startOffset, endOffset, it)
} else it
}
)
)
@@ -1115,6 +1115,7 @@ interface IrBuilderExtension {
} else {
constructors.find { it.owner.lastArgumentIsAnnotationArray() } ?: run {
// not found - we are using old serialization runtime without this feature
// todo: optimize allocating an empty array when no annotations defined, maybe use old constructor?
needToCopyAnnotations = false
constructors.single { it.owner.isPrimary }
}
@@ -3,7 +3,6 @@
// WITH_STDLIB
import kotlinx.serialization.*
import kotlinx.serialization.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.descriptors.*
@@ -13,11 +12,11 @@ import kotlin.test.*
// TODO: for this test to work, runtime dependency should be updated to (yet unreleased) serialization with @MetaSerializable annotation
//@MetaSerializable
@MetaSerializable
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class MySerializable
//@MetaSerializable
@MetaSerializable
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class MySerializableWithInfo(
val value: Int,
@@ -32,7 +31,7 @@ class Project2(val name: String, val language: String)
@Serializable
class Wrapper(
// @MySerializableWithInfo(234, Int::class) val project: Project2
@MySerializableWithInfo(234, Int::class) val project: Project2
)
@Serializable
@@ -40,7 +39,7 @@ class Wrapper(
class Project3(val name: String, val language: String)
@Serializable(with = MySerializer::class)
//@MySerializableWithInfo(123, String::class)
@MySerializableWithInfo(123, String::class)
class Project4(val name: String, val language: String)
@MySerializableWithInfo(123, String::class)
@@ -79,99 +78,99 @@ object MySerializer : KSerializer<Project4> {
}
fun testMetaSerializable() {
// val string = Json.encodeToString(Project1.serializer(), Project1("name", "lang"))
// assertEquals("""{"name":"name","language":"lang"}""", string)
//
// val reconstructed = Json.decodeFromString(Project1.serializer(), string)
// assertEquals("name", reconstructed.name)
// assertEquals("lang", reconstructed.language)
val string = Json.encodeToString(Project1.serializer(), Project1("name", "lang"))
assertEquals("""{"name":"name","language":"lang"}""", string)
val reconstructed = Json.decodeFromString(Project1.serializer(), string)
assertEquals("name", reconstructed.name)
assertEquals("lang", reconstructed.language)
}
fun testMetaSerializableWithInfo() {
// val string = Json.encodeToString(Project2.serializer(), Project2("name", "lang"))
// assertEquals("""{"name":"name","language":"lang"}""", string)
//
// val reconstructed = Json.decodeFromString(Project2.serializer(), string)
// assertEquals("name", reconstructed.name)
// assertEquals("lang", reconstructed.language)
//
// val info = Project2.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, info.value)
// assertEquals(String::class, info.kclass)
val string = Json.encodeToString(Project2.serializer(), Project2("name", "lang"))
assertEquals("""{"name":"name","language":"lang"}""", string)
val reconstructed = Json.decodeFromString(Project2.serializer(), string)
assertEquals("name", reconstructed.name)
assertEquals("lang", reconstructed.language)
val info = Project2.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, info.value)
assertEquals(String::class, info.kclass)
}
fun testMetaSerializableOnProperty() {
// val info = Wrapper.serializer().descriptor.getElementAnnotations(0).filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(234, info.value)
// assertEquals(Int::class, info.kclass)
val info = Wrapper.serializer().descriptor.getElementAnnotations(0).filterIsInstance<MySerializableWithInfo>().first()
assertEquals(234, info.value)
assertEquals(Int::class, info.kclass)
}
fun testSerializableAndMetaAnnotation() {
// val string = Json.encodeToString(Project3.serializer(), Project3("name", "lang"))
// assertEquals("""{"name":"name","language":"lang"}""", string)
//
// val reconstructed = Json.decodeFromString(Project3.serializer(), string)
// assertEquals("name", reconstructed.name)
// assertEquals("lang", reconstructed.language)
//
// val info = Project3.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, info.value)
// assertEquals(String::class, info.kclass)
val string = Json.encodeToString(Project3.serializer(), Project3("name", "lang"))
assertEquals("""{"name":"name","language":"lang"}""", string)
val reconstructed = Json.decodeFromString(Project3.serializer(), string)
assertEquals("name", reconstructed.name)
assertEquals("lang", reconstructed.language)
val info = Project3.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, info.value)
assertEquals(String::class, info.kclass)
}
fun testCustomSerializerAndMetaAnnotation() {
// val string = Json.encodeToString(Project4.serializer(), Project4("name", "lang"))
// assertEquals("""name:lang""", string)
//
// val reconstructed = Json.decodeFromString(Project4.serializer(), string)
// assertEquals("name", reconstructed.name)
// assertEquals("lang", reconstructed.language)
val string = Json.encodeToString(Project4.serializer(), Project4("name", "lang"))
assertEquals("""name:lang""", string)
val reconstructed = Json.decodeFromString(Project4.serializer(), string)
assertEquals("name", reconstructed.name)
assertEquals("lang", reconstructed.language)
}
fun testSealed() {
// val serializerA = TestSealed.A.serializer()
// val serializerB = TestSealed.B.serializer()
// assertNotNull(serializerA)
// assertNotNull(serializerB)
//
// val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, infoA.value)
// assertEquals(String::class, infoA.kclass)
// assertEquals(123, infoB.value)
// assertEquals(String::class, infoB.kclass)
val serializerA = TestSealed.A.serializer()
val serializerB = TestSealed.B.serializer()
assertNotNull(serializerA)
assertNotNull(serializerB)
val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, infoA.value)
assertEquals(String::class, infoA.kclass)
assertEquals(123, infoB.value)
assertEquals(String::class, infoB.kclass)
}
fun testAbstract() {
// val serializerA = TestAbstract.A.serializer()
// val serializerB = TestAbstract.B.serializer()
// assertNotNull(serializerA)
// assertNotNull(serializerB)
//
// val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, infoA.value)
// assertEquals(String::class, infoA.kclass)
// assertEquals(123, infoB.value)
// assertEquals(String::class, infoB.kclass)
val serializerA = TestAbstract.A.serializer()
val serializerB = TestAbstract.B.serializer()
assertNotNull(serializerA)
assertNotNull(serializerB)
val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, infoA.value)
assertEquals(String::class, infoA.kclass)
assertEquals(123, infoB.value)
assertEquals(String::class, infoB.kclass)
}
fun testEnum() {
// val serializer = TestEnum.serializer()
// assertNotNull(serializer)
//
// val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, info.value)
// assertEquals(String::class, info.kclass)
val serializer = TestEnum.serializer()
assertNotNull(serializer)
val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, info.value)
assertEquals(String::class, info.kclass)
}
fun testObject() {
// val serializer = TestObject.serializer()
// assertNotNull(serializer)
//
// val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
// assertEquals(123, info.value)
// assertEquals(String::class, info.kclass)
val serializer = TestObject.serializer()
assertNotNull(serializer)
val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
assertEquals(123, info.value)
assertEquals(String::class, info.kclass)
}
fun box(): String {