50a462fed1
^KT-57024 Fixed
33 lines
1.7 KiB
Kotlin
Vendored
33 lines
1.7 KiB
Kotlin
Vendored
// TARGET_BACKEND: JVM_IR
|
|
// WITH_STDLIB
|
|
|
|
import kotlinx.serialization.*
|
|
import kotlinx.serialization.json.*
|
|
import kotlinx.serialization.encoding.*
|
|
import kotlinx.serialization.descriptors.*
|
|
|
|
@SerialInfo
|
|
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
|
|
annotation class MyId(val id: Int, val type: String = "foo")
|
|
|
|
@Serializable
|
|
@MyId(10)
|
|
class Foo(@MyId(20) val i: Int)
|
|
|
|
fun box(): String {
|
|
val desc = Foo.serializer().descriptor
|
|
val classId = desc.annotations.filterIsInstance<MyId>().single()
|
|
val propId = desc.getElementAnnotations(0).filterIsInstance<MyId>().single().id
|
|
if (classId.id != 10) return "Incorrect class annotation: ${classId}"
|
|
if (classId.type != "foo") return "Incorrect default argument: ${classId}"
|
|
if (!classId::class.java.toString().contains("annotationImpl")) return "Backend doesn't use annotation instantiation: ${classId::class}"
|
|
if (propId != 20) return "Incorrect propery annotation: $propId"
|
|
val implClassJava = Class.forName("MyId\$Impl")
|
|
if (implClassJava.toString() != "class MyId\$Impl") return "Old annotation implementations are not preserved for compatibility"
|
|
val ctorStr = implClassJava.constructors.toList().toString()
|
|
if (!ctorStr.contains("public MyId\$Impl(int,java.lang.String)")) return "Compatibility impl does not contain correct constructor: $ctorStr"
|
|
val methodsStr = implClassJava.methods.toList().toString()
|
|
if (!methodsStr.contains("public final int MyId\$Impl.id()")) return "Compatibility impl does not contain correct methods: $methodsStr"
|
|
if (!methodsStr.contains("public final java.lang.String MyId\$Impl.type()")) return "Compatibility impl does not contain correct methods: $methodsStr"
|
|
return "OK"
|
|
} |