Skip to content

Commit 6e81bc1

Browse files
udalovSpace Team
authored andcommitted
kotlin-metadata-jvm: move annotations reads/writes to extensions
To avoid reading/writing annotations to the new fields in case of klib & builtins, before it is supported in the compiler (KT-64237, KT-75010).
1 parent 864e273 commit 6e81bc1

File tree

3 files changed

+36
-34
lines changed

3 files changed

+36
-34
lines changed

libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/internal/JvmMetadataExtensions.kt

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55

66
package kotlin.metadata.jvm.internal
77

8-
import kotlin.metadata.*
9-
import kotlin.metadata.internal.*
10-
import kotlin.metadata.internal.common.*
11-
import kotlin.metadata.internal.extensions.*
12-
import kotlin.metadata.jvm.*
138
import org.jetbrains.kotlin.metadata.ProtoBuf
149
import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
1510
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
1611
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
12+
import kotlin.metadata.*
13+
import kotlin.metadata.internal.*
14+
import kotlin.metadata.internal.common.KmModuleFragment
15+
import kotlin.metadata.internal.extensions.*
1716
import kotlin.metadata.jvm.JvmMemberSignature
1817
import kotlin.metadata.jvm.JvmMethodSignature
1918
import kotlin.metadata.jvm.wrapAsPublic
@@ -22,6 +21,8 @@ internal class JvmMetadataExtensions : MetadataExtensions {
2221
override fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext) {
2322
val ext = kmClass.jvm
2423

24+
proto.annotationList.mapTo(kmClass.annotations) { it.readAnnotation(c.strings) }
25+
2526
val anonymousObjectOriginName = proto.getExtensionOrNull(JvmProtoBuf.anonymousObjectOriginName)
2627
if (anonymousObjectOriginName != null) {
2728
ext.anonymousObjectOriginName = c[anonymousObjectOriginName]
@@ -53,6 +54,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
5354

5455
override fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext) {
5556
val ext = kmFunction.jvm
57+
proto.annotationList.mapTo(kmFunction.annotations) { it.readAnnotation(c.strings) }
5658
ext.signature = JvmProtoBufUtil.getJvmMethodSignature(proto, c.strings, c.types)?.wrapAsPublic()
5759

5860
val lambdaClassOriginName = proto.getExtensionOrNull(JvmProtoBuf.lambdaClassOriginName)
@@ -63,6 +65,13 @@ internal class JvmMetadataExtensions : MetadataExtensions {
6365

6466
override fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext) {
6567
val ext = kmProperty.jvm
68+
69+
proto.annotationList.mapTo(kmProperty.annotations) { it.readAnnotation(c.strings) }
70+
proto.getterAnnotationList.mapTo(kmProperty.getter.annotations) { it.readAnnotation(c.strings) }
71+
kmProperty.setter?.let { setter ->
72+
proto.setterAnnotationList.mapTo(setter.annotations) { it.readAnnotation(c.strings) }
73+
}
74+
6675
val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, c.strings, c.types)
6776
val propertySignature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature)
6877
val getterSignature =
@@ -85,6 +94,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
8594

8695
override fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext) {
8796
val ext = kmConstructor.jvm
97+
proto.annotationList.mapTo(kmConstructor.annotations) { it.readAnnotation(c.strings) }
8898
ext.signature = JvmProtoBufUtil.getJvmConstructorSignature(proto, c.strings, c.types)?.wrapAsPublic()
8999
}
90100

@@ -105,10 +115,13 @@ internal class JvmMetadataExtensions : MetadataExtensions {
105115

106116
override fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext) {}
107117

108-
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {}
118+
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {
119+
proto.annotationList.mapTo(kmValueParameter.annotations) { it.readAnnotation(c.strings) }
120+
}
109121

110122
override fun writeClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class.Builder, c: WriteContext) =
111123
with(kmClass.jvm) {
124+
proto.addAllAnnotation(kmClass.annotations.map { it.writeAnnotation(c.strings).build() })
112125
anonymousObjectOriginName?.let {
113126
proto.setExtension(JvmProtoBuf.anonymousObjectOriginName, c[it])
114127
}
@@ -145,6 +158,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
145158
kmFunction: KmFunction, proto: ProtoBuf.Function.Builder, c: WriteContext,
146159
) {
147160
with(kmFunction.jvm) {
161+
proto.addAllAnnotation(kmFunction.annotations.map { it.writeAnnotation(c.strings).build() })
148162
signature?.let { proto.setExtension(JvmProtoBuf.methodSignature, it.toJvmMethodSignature(c)) }
149163
lambdaClassOriginName?.let { proto.setExtension(JvmProtoBuf.lambdaClassOriginName, c[it]) }
150164
}
@@ -153,6 +167,12 @@ internal class JvmMetadataExtensions : MetadataExtensions {
153167
override fun writePropertyExtensions(
154168
kmProperty: KmProperty, proto: ProtoBuf.Property.Builder, c: WriteContext,
155169
) = with(kmProperty.jvm) {
170+
proto.addAllAnnotation(kmProperty.annotations.map { it.writeAnnotation(c.strings).build() })
171+
proto.addAllGetterAnnotation(kmProperty.getter.annotations.map { it.writeAnnotation(c.strings).build() })
172+
kmProperty.setter?.let { setter ->
173+
proto.addAllSetterAnnotation(setter.annotations.map { it.writeAnnotation(c.strings).build() })
174+
}
175+
156176
val composedSignature: JvmProtoBuf.JvmPropertySignature.Builder = JvmProtoBuf.JvmPropertySignature.newBuilder()
157177
var hasSignature = false
158178

@@ -188,6 +208,7 @@ internal class JvmMetadataExtensions : MetadataExtensions {
188208
override fun writeConstructorExtensions(
189209
kmConstructor: KmConstructor, proto: ProtoBuf.Constructor.Builder, c: WriteContext,
190210
): Unit = with(kmConstructor.jvm) {
211+
proto.addAllAnnotation(kmConstructor.annotations.map { it.writeAnnotation(c.strings).build() })
191212
signature?.let { proto.setExtension(JvmProtoBuf.constructorSignature, it.toJvmMethodSignature(c)) }
192213
}
193214

@@ -217,7 +238,9 @@ internal class JvmMetadataExtensions : MetadataExtensions {
217238
valueParameter: KmValueParameter,
218239
proto: ProtoBuf.ValueParameter.Builder,
219240
c: WriteContext,
220-
) = Unit
241+
) {
242+
proto.addAllAnnotation(valueParameter.annotations.map { it.writeAnnotation(c.strings).build() })
243+
}
221244

222245
override fun createClassExtension(): KmClassExtension = JvmClassExtension()
223246

libraries/kotlinx-metadata/src/kotlin/metadata/internal/Readers.kt

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
*/
55
package kotlin.metadata.internal
66

7-
import kotlin.metadata.*
8-
import kotlin.metadata.internal.common.KmModuleFragment
9-
import kotlin.metadata.internal.extensions.MetadataExtensions
107
import org.jetbrains.kotlin.metadata.ProtoBuf
118
import org.jetbrains.kotlin.metadata.deserialization.*
129
import kotlin.contracts.ExperimentalContracts
10+
import kotlin.metadata.*
11+
import kotlin.metadata.internal.common.KmModuleFragment
12+
import kotlin.metadata.internal.extensions.MetadataExtensions
1313
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
1414

1515
/**
@@ -87,8 +87,6 @@ public fun ProtoBuf.Class.toKmClass(
8787
contextReceiverTypes(c.types).mapTo(v.contextReceiverTypes) { it.toKmType(c) }
8888
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
8989

90-
annotationList.mapTo(v.annotations) { it.readAnnotation(c.strings) }
91-
9290
c.extensions.forEach { it.readClassExtensions(v, this, c) }
9391

9492
return v
@@ -170,7 +168,6 @@ private fun ProtoBuf.Constructor.toKmConstructor(c: ReadContext): KmConstructor
170168
val v = KmConstructor(flags)
171169
valueParameterList.mapTo(v.valueParameters) { it.toKmValueParameter(c) }
172170
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
173-
annotationList.mapTo(v.annotations) { it.readAnnotation(c.strings) }
174171

175172
c.extensions.forEach { it.readConstructorExtensions(v, this, c) }
176173

@@ -195,8 +192,6 @@ private fun ProtoBuf.Function.toKmFunction(outer: ReadContext): KmFunction {
195192

196193
versionRequirementList.mapTo(v.versionRequirements) { readVersionRequirement(it, c) }
197194

198-
annotationList.mapTo(v.annotations) { it.readAnnotation(c.strings) }
199-
200195
c.extensions.forEach { it.readFunctionExtensions(v, this, c) }
201196

202197
return v
@@ -218,12 +213,6 @@ public fun ProtoBuf.Property.toKmProperty(outer: ReadContext): KmProperty {
218213

219214
c.extensions.forEach { it.readPropertyExtensions(v, this, c) }
220215

221-
annotationList.mapTo(v.annotations) { it.readAnnotation(c.strings) }
222-
getterAnnotationList.mapTo(v.getter.annotations) { it.readAnnotation(c.strings) }
223-
v.setter?.let { setter ->
224-
setterAnnotationList.mapTo(setter.annotations) { it.readAnnotation(c.strings) }
225-
}
226-
227216
return v
228217
}
229218

@@ -252,8 +241,6 @@ private fun ProtoBuf.ValueParameter.toKmValueParameter(c: ReadContext): KmValueP
252241

253242
c.extensions.forEach { it.readValueParameterExtensions(v, this, c) }
254243

255-
annotationList.mapTo(v.annotations) { it.readAnnotation(c.strings) }
256-
257244
return v
258245
}
259246

libraries/kotlinx-metadata/src/kotlin/metadata/internal/Writers.kt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
*/
55
package kotlin.metadata.internal
66

7-
import kotlin.metadata.*
8-
import kotlin.metadata.internal.common.KmModuleFragment
9-
import kotlin.metadata.internal.extensions.MetadataExtensions
107
import org.jetbrains.kotlin.metadata.ProtoBuf
118
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
129
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
1310
import org.jetbrains.kotlin.metadata.serialization.StringTable
1411
import kotlin.contracts.ExperimentalContracts
12+
import kotlin.metadata.*
13+
import kotlin.metadata.internal.common.KmModuleFragment
14+
import kotlin.metadata.internal.extensions.MetadataExtensions
1515

1616
/**
1717
* Allows to populate [WriteContext] with additional data
@@ -116,7 +116,6 @@ private fun WriteContext.writeConstructor(kmConstructor: KmConstructor): ProtoBu
116116
if (kmConstructor.flags != ProtoBuf.Constructor.getDefaultInstance().flags) {
117117
t.flags = kmConstructor.flags
118118
}
119-
t.addAllAnnotation(kmConstructor.annotations.map { it.writeAnnotation(strings).build() })
120119
return t
121120
}
122121

@@ -140,7 +139,6 @@ private fun WriteContext.writeFunction(kmFunction: KmFunction): ProtoBuf.Functio
140139
if (kmFunction.flags != ProtoBuf.Function.getDefaultInstance().flags) {
141140
t.flags = kmFunction.flags
142141
}
143-
t.addAllAnnotation(kmFunction.annotations.map { it.writeAnnotation(strings).build() })
144142
return t
145143
}
146144

@@ -168,11 +166,8 @@ public fun WriteContext.writeProperty(kmProperty: KmProperty): ProtoBuf.Property
168166
// TODO: do not write getterFlags/setterFlags if not needed
169167
t.getterFlags = kmProperty.getter.flags
170168

171-
t.addAllAnnotation(kmProperty.annotations.map { it.writeAnnotation(strings).build() })
172-
t.addAllGetterAnnotation(kmProperty.getter.annotations.map { it.writeAnnotation(strings).build() })
173169
kmProperty.setter?.let { setter ->
174170
t.setterFlags = setter.flags
175-
t.addAllSetterAnnotation(setter.annotations.map { it.writeAnnotation(strings).build() })
176171
}
177172
return t
178173
}
@@ -188,7 +183,6 @@ private fun WriteContext.writeValueParameter(
188183
t.flags = kmValueParameter.flags
189184
}
190185
t.name = this[kmValueParameter.name]
191-
t.addAllAnnotation(kmValueParameter.annotations.map { it.writeAnnotation(strings).build() })
192186
return t
193187
}
194188

@@ -340,8 +334,6 @@ public open class ClassWriter(stringTable: StringTable, contextExtensions: List<
340334

341335
t.addAllVersionRequirement(kmClass.versionRequirements.mapNotNull { c.writeVersionRequirement(it) })
342336

343-
t.addAllAnnotation(kmClass.annotations.map { it.writeAnnotation(c.strings).build() })
344-
345337
c.extensions.forEach { it.writeClassExtensions(kmClass, t, c) }
346338

347339
c.versionRequirements.serialize()?.let {

0 commit comments

Comments
 (0)