Activate MetaSerializable test and update serialization dependency
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
||||
+6
-5
@@ -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 }
|
||||
}
|
||||
|
||||
Vendored
+73
-74
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user