Skip to content

Commit f2dfcb6

Browse files
udalovSpace Team
authored andcommitted
kotlinx-metadata-klib: remove klibAnnotations
Use the common annotations fields added in KT-57919, but read and write them to the "old" place in the protobuf, i.e. the klib-based extension. #KT-75290
1 parent 6e81bc1 commit f2dfcb6

File tree

11 files changed

+161
-101
lines changed

11 files changed

+161
-101
lines changed

kotlin-native/Interop/StubGenerator/src/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ internal class ModuleMetadataEmitter(
120120
val elements = KmElements(children.mapNotNull { it.accept(this, classVisitingContext) })
121121
val kmClass = data.withMappingExtensions {
122122
KmClass().also { km ->
123-
element.annotations.mapTo(km.klibAnnotations) { it.map() }
123+
element.annotations.mapTo(km.annotations) { it.map() }
124124
km.modifiersFrom(element)
125125
km.name = element.classifier.fqNameSerialized
126126
element.superClassInit?.let { km.supertypes += it.type.map() }
@@ -165,7 +165,7 @@ internal class ModuleMetadataEmitter(
165165
km.receiverParameterType = function.receiver?.type?.map()
166166
function.typeParameters.mapTo(km.typeParameters) { it.map() }
167167
function.parameters.mapTo(km.valueParameters) { it.map() }
168-
function.annotations.mapTo(km.klibAnnotations) { it.map() }
168+
function.annotations.mapTo(km.annotations) { it.map() }
169169
km.returnType = function.returnType.map()
170170
}
171171
}
@@ -185,16 +185,16 @@ internal class ModuleMetadataEmitter(
185185
km.modifiersFrom(property)
186186
km.getter.getterModifiersFrom(property)
187187
km.setter = setterFrom(property)
188-
property.annotations.mapTo(km.klibAnnotations) { it.map() }
188+
property.annotations.mapTo(km.annotations) { it.map() }
189189
km.receiverParameterType = property.receiverType?.map()
190190
km.returnType = property.type.map()
191191
val kind = property.kind
192192
if (kind is PropertyStub.Kind.Var) {
193-
kind.setter.annotations.mapTo(km.klibSetterAnnotations) { it.map() }
193+
kind.setter.annotations.mapTo(km.setter!!.annotations) { it.map() }
194194
// TODO: Maybe it's better to explicitly add setter parameter in stub.
195195
km.setterParameter = FunctionParameterStub("value", property.type).map()
196196
}
197-
km.klibGetterAnnotations += when (kind) {
197+
km.getter.annotations += when (kind) {
198198
is PropertyStub.Kind.Val -> kind.getter.annotations.map { it.map() }
199199
is PropertyStub.Kind.Var -> kind.getter.annotations.map { it.map() }
200200
is PropertyStub.Kind.Constant -> emptyList()
@@ -210,7 +210,7 @@ internal class ModuleMetadataEmitter(
210210
KmConstructor().apply {
211211
modifiersFrom(constructorStub)
212212
constructorStub.parameters.mapTo(valueParameters, { it.map() })
213-
constructorStub.annotations.mapTo(klibAnnotations, { it.map() })
213+
constructorStub.annotations.mapTo(annotations, { it.map() })
214214
}
215215
}
216216

@@ -516,7 +516,7 @@ private class MappingExtensions(
516516
} else {
517517
km.type = kmType
518518
}
519-
annotations.mapTo(km.klibAnnotations, { it.map() })
519+
annotations.mapTo(km.annotations, { it.map() })
520520
}
521521

522522
fun TypeParameterStub.map(): KmTypeParameter =

libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibExtensionNodes.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
*/
55
package kotlinx.metadata.klib.impl
66

7-
import kotlinx.metadata.klib.*
7+
import kotlinx.metadata.klib.KlibEnumEntry
8+
import kotlinx.metadata.klib.KlibSourceFile
9+
import kotlinx.metadata.klib.UniqId
810
import kotlin.metadata.*
911
import kotlin.metadata.internal.common.KmModuleFragment
1012
import kotlin.metadata.internal.extensions.*
@@ -36,11 +38,7 @@ internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
3638
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
3739
get() = getExtension(KlibTypeAliasExtension.TYPE) as KlibTypeAliasExtension
3840

39-
internal val KmValueParameter.klibExtensions: KlibValueParameterExtension
40-
get() = getExtension(KlibValueParameterExtension.TYPE) as KlibValueParameterExtension
41-
4241
internal class KlibFunctionExtension : KmFunctionExtension {
43-
val annotations: MutableList<KmAnnotation> = mutableListOf()
4442
var uniqId: UniqId? = null
4543
var file: KlibSourceFile? = null
4644

@@ -53,7 +51,6 @@ internal class KlibFunctionExtension : KmFunctionExtension {
5351
}
5452

5553
internal class KlibClassExtension : KmClassExtension {
56-
val annotations: MutableList<KmAnnotation> = mutableListOf()
5754
val enumEntries: MutableList<KlibEnumEntry> = mutableListOf()
5855
var uniqId: UniqId? = null
5956
var file: KlibSourceFile? = null
@@ -91,9 +88,6 @@ internal class KlibTypeExtension : KmTypeExtension {
9188
}
9289

9390
internal class KlibPropertyExtension : KmPropertyExtension {
94-
val annotations: MutableList<KmAnnotation> = mutableListOf()
95-
val getterAnnotations: MutableList<KmAnnotation> = mutableListOf()
96-
val setterAnnotations: MutableList<KmAnnotation> = mutableListOf()
9791
var uniqId: UniqId? = null
9892
var file: Int? = null
9993
var compileTimeValue: KmAnnotationArgument? = null

libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibMetadataExtensions.kt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
2929
val extension = kmClass.klibExtensions
3030

3131
for (annotation in proto.getExtension(KlibMetadataProtoBuf.classAnnotation)) {
32-
extension.annotations.add(annotation.readAnnotation(c.strings))
32+
kmClass.annotations.add(annotation.readAnnotation(c.strings))
3333
}
3434
proto.getExtensionOrNull(KlibMetadataProtoBuf.classUniqId)?.let { uniqId ->
3535
extension.uniqId = uniqId.readUniqId()
@@ -72,7 +72,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
7272
val extension = kmFunction.klibExtensions
7373

7474
for (annotation in proto.getExtension(KlibMetadataProtoBuf.functionAnnotation)) {
75-
extension.annotations.add(annotation.readAnnotation(c.strings))
75+
kmFunction.annotations.add(annotation.readAnnotation(c.strings))
7676
}
7777
proto.getExtensionOrNull(KlibMetadataProtoBuf.functionUniqId)?.let { uniqId ->
7878
extension.uniqId = uniqId.readUniqId()
@@ -86,13 +86,15 @@ internal class KlibMetadataExtensions : MetadataExtensions {
8686
val extension = kmProperty.klibExtensions
8787

8888
for (annotation in proto.getExtension(KlibMetadataProtoBuf.propertyAnnotation)) {
89-
extension.annotations.add(annotation.readAnnotation(c.strings))
89+
kmProperty.annotations.add(annotation.readAnnotation(c.strings))
9090
}
9191
for (annotation in proto.getExtension(KlibMetadataProtoBuf.propertyGetterAnnotation)) {
92-
extension.getterAnnotations.add(annotation.readAnnotation(c.strings))
92+
kmProperty.getter.annotations.add(annotation.readAnnotation(c.strings))
9393
}
94-
for (annotation in proto.getExtension(KlibMetadataProtoBuf.propertySetterAnnotation)) {
95-
extension.setterAnnotations.add(annotation.readAnnotation(c.strings))
94+
kmProperty.setter?.let { setter ->
95+
for (annotation in proto.getExtension(KlibMetadataProtoBuf.propertySetterAnnotation)) {
96+
setter.annotations.add(annotation.readAnnotation(c.strings))
97+
}
9698
}
9799
proto.getExtensionOrNull(KlibMetadataProtoBuf.propertyUniqId)?.let { uniqId ->
98100
extension.uniqId = uniqId.readUniqId()
@@ -111,7 +113,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
111113
val extension = kmConstructor.klibExtensions
112114

113115
for (annotation in proto.getExtension(KlibMetadataProtoBuf.constructorAnnotation)) {
114-
extension.annotations.add(annotation.readAnnotation(c.strings))
116+
kmConstructor.annotations.add(annotation.readAnnotation(c.strings))
115117
}
116118
proto.getExtensionOrNull(KlibMetadataProtoBuf.constructorUniqId)?.let { uniqId ->
117119
extension.uniqId = uniqId.readUniqId()
@@ -122,7 +124,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
122124
val extension = kmTypeParameter.klibExtensions
123125

124126
for (annotation in proto.getExtension(KlibMetadataProtoBuf.typeParameterAnnotation)) {
125-
extension.annotations.add(annotation.readAnnotation(c.strings))
127+
kmTypeParameter.annotations.add(annotation.readAnnotation(c.strings))
126128
}
127129
proto.getExtensionOrNull(KlibMetadataProtoBuf.typeParamUniqId)?.let { uniqId ->
128130
extension.uniqId = uniqId.readUniqId()
@@ -146,15 +148,13 @@ internal class KlibMetadataExtensions : MetadataExtensions {
146148
}
147149

148150
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {
149-
val extension = kmValueParameter.klibExtensions
150-
151151
for (annotation in proto.getExtension(KlibMetadataProtoBuf.parameterAnnotation)) {
152-
extension.annotations.add(annotation.readAnnotation(c.strings))
152+
kmValueParameter.annotations.add(annotation.readAnnotation(c.strings))
153153
}
154154
}
155155

156156
override fun writeClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class.Builder, c: WriteContext) {
157-
for (annotation in kmClass.klibAnnotations) {
157+
for (annotation in kmClass.annotations) {
158158
proto.addExtension(KlibMetadataProtoBuf.classAnnotation, annotation.writeAnnotation(c.strings).build())
159159
}
160160

@@ -210,7 +210,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
210210
}
211211

212212
override fun writeFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function.Builder, c: WriteContext) {
213-
for (annotation in kmFunction.klibAnnotations) {
213+
for (annotation in kmFunction.annotations) {
214214
proto.addExtension(KlibMetadataProtoBuf.functionAnnotation, annotation.writeAnnotation(c.strings).build())
215215
}
216216

@@ -224,13 +224,13 @@ internal class KlibMetadataExtensions : MetadataExtensions {
224224
}
225225

226226
override fun writePropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property.Builder, c: WriteContext) {
227-
for (annotation in kmProperty.klibAnnotations) {
227+
for (annotation in kmProperty.annotations) {
228228
proto.addExtension(KlibMetadataProtoBuf.propertyAnnotation, annotation.writeAnnotation(c.strings).build())
229229
}
230-
for (annotation in kmProperty.klibGetterAnnotations) {
230+
for (annotation in kmProperty.getter.annotations) {
231231
proto.addExtension(KlibMetadataProtoBuf.propertyGetterAnnotation, annotation.writeAnnotation(c.strings).build())
232232
}
233-
for (annotation in kmProperty.klibSetterAnnotations) {
233+
for (annotation in kmProperty.setter?.annotations.orEmpty()) {
234234
proto.addExtension(KlibMetadataProtoBuf.propertySetterAnnotation, annotation.writeAnnotation(c.strings).build())
235235
}
236236

@@ -248,7 +248,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
248248
}
249249

250250
override fun writeConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor.Builder, c: WriteContext) {
251-
for (annotation in kmConstructor.klibAnnotations) {
251+
for (annotation in kmConstructor.annotations) {
252252
proto.addExtension(KlibMetadataProtoBuf.constructorAnnotation, annotation.writeAnnotation(c.strings).build())
253253
}
254254

@@ -280,7 +280,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
280280
}
281281

282282
override fun writeValueParameterExtensions(valueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext) {
283-
for (annotation in valueParameter.klibAnnotations) {
283+
for (annotation in valueParameter.annotations) {
284284
proto.addExtension(KlibMetadataProtoBuf.parameterAnnotation, annotation.writeAnnotation(c.strings).build())
285285
}
286286
}

libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibExtensions.kt

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55

66
package kotlinx.metadata.klib
77

8+
import kotlinx.metadata.klib.impl.klibExtensions
89
import kotlin.metadata.*
910
import kotlin.metadata.internal.common.KmModuleFragment
10-
import kotlinx.metadata.klib.impl.klibExtensions
11-
12-
val KmFunction.klibAnnotations: MutableList<KmAnnotation>
13-
get() = klibExtensions.annotations
1411

1512
var KmFunction.uniqId: UniqId?
1613
get() = klibExtensions.uniqId
@@ -24,9 +21,6 @@ var KmFunction.file: KlibSourceFile?
2421
klibExtensions.file = value
2522
}
2623

27-
val KmClass.klibAnnotations: MutableList<KmAnnotation>
28-
get() = klibExtensions.annotations
29-
3024
var KmClass.uniqId: UniqId?
3125
get() = klibExtensions.uniqId
3226
set(value) {
@@ -42,15 +36,6 @@ var KmClass.file: KlibSourceFile?
4236
val KmClass.klibEnumEntries: MutableList<KlibEnumEntry>
4337
get() = klibExtensions.enumEntries
4438

45-
val KmProperty.klibAnnotations: MutableList<KmAnnotation>
46-
get() = klibExtensions.annotations
47-
48-
val KmProperty.klibSetterAnnotations: MutableList<KmAnnotation>
49-
get() = klibExtensions.setterAnnotations
50-
51-
val KmProperty.klibGetterAnnotations: MutableList<KmAnnotation>
52-
get() = klibExtensions.getterAnnotations
53-
5439
var KmProperty.uniqId: UniqId?
5540
get() = klibExtensions.uniqId
5641
set(value) {
@@ -72,9 +57,6 @@ var KmProperty.compileTimeValue: KmAnnotationArgument?
7257
val KmType.annotations: MutableList<KmAnnotation>
7358
get() = klibExtensions.annotations
7459

75-
val KmConstructor.klibAnnotations: MutableList<KmAnnotation>
76-
get() = klibExtensions.annotations
77-
7860
var KmConstructor.uniqId: UniqId?
7961
get() = klibExtensions.uniqId
8062
set(value) {
@@ -113,6 +95,3 @@ var KmTypeAlias.uniqId: UniqId?
11395
set(value) {
11496
klibExtensions.uniqId = value
11597
}
116-
117-
val KmValueParameter.klibAnnotations: MutableList<KmAnnotation>
118-
get() = klibExtensions.annotations
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package kotlinx.metadata.klib
7+
8+
import kotlin.metadata.KmAnnotation
9+
import kotlin.metadata.KmClass
10+
import kotlin.metadata.KmClassifier
11+
import kotlin.metadata.KmConstructor
12+
import kotlin.metadata.KmFunction
13+
import kotlin.metadata.KmProperty
14+
import kotlin.metadata.KmPropertyAccessorAttributes
15+
import kotlin.metadata.KmType
16+
import kotlin.metadata.KmValueParameter
17+
import kotlin.metadata.internal.common.KmModuleFragment
18+
import kotlin.test.Test
19+
import kotlin.test.assertEquals
20+
21+
class KlibAnnotationsTest {
22+
@Test
23+
fun testKlibAnnotations() {
24+
val module1 = KmModuleFragment().apply {
25+
fqName = "klib"
26+
}
27+
val klass1 = KmClass().apply {
28+
name = "Class"
29+
annotations.add(KmAnnotation("ClassAnnotation", emptyMap()))
30+
constructors.add(KmConstructor().apply {
31+
annotations.add(KmAnnotation("ConstructorAnnotation", emptyMap()))
32+
})
33+
functions.add(KmFunction("function").apply {
34+
returnType = stringKmType()
35+
annotations.add(KmAnnotation("FunctionAnnotation", emptyMap()))
36+
valueParameters.add(KmValueParameter("parameter").apply {
37+
type = stringKmType()
38+
annotations.add(KmAnnotation("ParameterAnnotation", emptyMap()))
39+
})
40+
})
41+
properties.add(KmProperty("property").apply {
42+
returnType = stringKmType()
43+
annotations.add(KmAnnotation("PropertyAnnotation", emptyMap()))
44+
getter.annotations.add(KmAnnotation("GetterAnnotation", emptyMap()))
45+
setter = KmPropertyAccessorAttributes().apply {
46+
annotations.add(KmAnnotation("SetterAnnotation", emptyMap()))
47+
}
48+
})
49+
}
50+
module1.classes.add(klass1)
51+
52+
val module2 = readWriteModule(module1)
53+
54+
val klass2 = module2.classes.single()
55+
assertEquals(klass1.annotations, klass2.annotations)
56+
57+
assertEquals(klass1.constructors.single().annotations, klass2.constructors.single().annotations)
58+
59+
val function1 = klass1.functions.single()
60+
val function2 = klass2.functions.single()
61+
assertEquals(function1.annotations, function2.annotations)
62+
assertEquals(function1.valueParameters.single().annotations, function2.valueParameters.single().annotations)
63+
64+
val property1 = klass1.properties.single()
65+
val property2 = klass2.properties.single()
66+
assertEquals(property1.annotations, property2.annotations)
67+
assertEquals(property1.getter.annotations, property2.getter.annotations)
68+
assertEquals(property1.setter!!.annotations, property2.setter!!.annotations)
69+
}
70+
71+
private fun stringKmType(): KmType = KmType().apply {
72+
classifier = KmClassifier.Class("kotlin/String")
73+
}
74+
75+
private fun readWriteModule(module: KmModuleFragment): KmModuleFragment {
76+
val metadata = KlibModuleMetadata("klib", listOf(module), emptyList()).write()
77+
return KlibModuleMetadata.read(object : KlibModuleMetadata.MetadataLibraryProvider {
78+
override val moduleHeaderData: ByteArray get() = metadata.header
79+
override fun packageMetadataParts(fqName: String): Set<String> = metadata.fragmentNames.toSet()
80+
override fun packageMetadata(fqName: String, partName: String): ByteArray = metadata.fragments.single().single()
81+
}).fragments.single()
82+
}
83+
}

libraries/tools/kotlinp/klib/src/org/jetbrains/kotlin/kotlinp/klib/KlibKotlinp.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ class KlibKotlinp(
4444
appendLine("}")
4545
}
4646

47-
override fun getAnnotations(clazz: KmClass): List<KmAnnotation> = clazz.klibAnnotations
48-
override fun getAnnotations(constructor: KmConstructor): List<KmAnnotation> = constructor.klibAnnotations
49-
override fun getAnnotations(function: KmFunction): List<KmAnnotation> = function.klibAnnotations
50-
override fun getAnnotations(property: KmProperty): List<KmAnnotation> = property.klibAnnotations
51-
override fun getGetterAnnotations(property: KmProperty): List<KmAnnotation> = property.klibGetterAnnotations
52-
override fun getSetterAnnotations(property: KmProperty): List<KmAnnotation> = property.klibSetterAnnotations
47+
override fun getAnnotations(clazz: KmClass): List<KmAnnotation> = clazz.annotations
48+
override fun getAnnotations(constructor: KmConstructor): List<KmAnnotation> = constructor.annotations
49+
override fun getAnnotations(function: KmFunction): List<KmAnnotation> = function.annotations
50+
override fun getAnnotations(property: KmProperty): List<KmAnnotation> = property.annotations
51+
override fun getGetterAnnotations(property: KmProperty): List<KmAnnotation> = property.getter.annotations
52+
override fun getSetterAnnotations(property: KmProperty): List<KmAnnotation> = property.setter?.annotations.orEmpty()
5353
override fun getAnnotations(typeParameter: KmTypeParameter): List<KmAnnotation> = typeParameter.annotations
5454
override fun getAnnotations(type: KmType): List<KmAnnotation> = type.annotations
55-
override fun getAnnotations(valueParameter: KmValueParameter): List<KmAnnotation> = valueParameter.klibAnnotations
55+
override fun getAnnotations(valueParameter: KmValueParameter): List<KmAnnotation> = valueParameter.annotations
5656

5757
override fun Printer.appendSignatures(clazz: KmClass) = appendSignature { classSignature(clazz) }
5858
override fun Printer.appendSignatures(constructor: KmConstructor) = appendSignature { constructorSignature(constructor) }

0 commit comments

Comments
 (0)