Fix array of KClass annotation arguments in kotlinx-metadata-jvm

#KT-45594 Fixed
This commit is contained in:
Alexander Udalov
2021-03-14 15:38:32 +01:00
parent e2084a180b
commit 1a82158472
7 changed files with 53 additions and 11 deletions
+5 -2
View File
@@ -1,11 +1,14 @@
# kotlinx-metadata-jvm
## 0.2.1
## 0.3.0
- [KT-44783](https://youtrack.jetbrains.com/issue/KT-44783) Add Flag.IS_VALUE for value classes
- Update to Kotlin 1.5 with metadata version 1.5.
Note: metadata of version 1.5 is readable by Kotlin compiler/reflection of versions 1.4 and later.
- [`KT-44783`](https://youtrack.jetbrains.com/issue/KT-44783) Add Flag.IS_VALUE for value classes
- Breaking change: `Flag.IS_INLINE` is deprecated, use `Flag.IS_VALUE` instead
- Breaking change: deprecate `KotlinClassHeader.bytecodeVersion` and `KotlinClassHeader`'s constructor that takes a bytecode version array.
Related to ['KT-41758`](https://youtrack.jetbrains.com/issue/KT-41758).
- [`KT-45594`](https://youtrack.jetbrains.com/issue/KT-45594) KClass annotation argument containing array of classes is not read/written correctly
## 0.2.0
@@ -43,7 +43,11 @@ sealed class KmAnnotationArgument<out T : Any> {
data class ULongValue(override val value: Long) : KmAnnotationArgument<Long>()
data class StringValue(override val value: String) : KmAnnotationArgument<String>()
data class KClassValue(override val value: ClassName) : KmAnnotationArgument<ClassName>()
data class KClassValue(val className: ClassName, val arrayDimensionCount: Int) : KmAnnotationArgument<String>() {
override val value: String = className + "[]".repeat(arrayDimensionCount)
}
data class EnumValue(val enumClassName: ClassName, val enumEntryName: String) : KmAnnotationArgument<String>() {
override val value: String = "$enumClassName.$enumEntryName"
}
@@ -44,7 +44,7 @@ fun ProtoBuf.Annotation.Argument.Value.readAnnotationArgument(strings: NameResol
DOUBLE -> KmAnnotationArgument.DoubleValue(doubleValue)
BOOLEAN -> KmAnnotationArgument.BooleanValue(intValue != 0L)
STRING -> KmAnnotationArgument.StringValue(strings.getString(stringValue))
CLASS -> KmAnnotationArgument.KClassValue(strings.getClassName(classId))
CLASS -> KmAnnotationArgument.KClassValue(strings.getClassName(classId), arrayDimensionCount)
ENUM -> KmAnnotationArgument.EnumValue(strings.getClassName(classId), strings.getString(enumValueId))
ANNOTATION -> KmAnnotationArgument.AnnotationValue(annotation.readAnnotation(strings))
ARRAY -> KmAnnotationArgument.ArrayValue(arrayElementList.mapNotNull { it.readAnnotationArgument(strings) })
@@ -85,7 +85,8 @@ fun KmAnnotationArgument<*>.writeAnnotationArgument(strings: StringTable): Proto
}
is KmAnnotationArgument.KClassValue -> {
this.type = ProtoBuf.Annotation.Argument.Value.Type.CLASS
this.classId = strings.getClassNameIndex(value)
this.classId = strings.getClassNameIndex(className)
this.arrayDimensionCount = this@writeAnnotationArgument.arrayDimensionCount
}
is KmAnnotationArgument.EnumValue -> {
this.type = ProtoBuf.Annotation.Argument.Value.Type.ENUM