Fix array of KClass annotation arguments in kotlinx-metadata-jvm
#KT-45594 Fixed
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user