From b00f76525500c056dc20e617a4662d040f59fb8e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 13 Jun 2018 14:51:17 +0200 Subject: [PATCH] Pass whole ReadContext/WriteContext to kotlinx-metadata extensions --- .../jvm/impl/JvmMetadataExtensions.kt | 79 +++++++++---------- .../impl/extensions/MetadataExtensions.kt | 29 ++++--- .../src/kotlinx/metadata/impl/readers.kt | 16 ++-- .../src/kotlinx/metadata/impl/writers.kt | 14 ++-- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/impl/JvmMetadataExtensions.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/impl/JvmMetadataExtensions.kt index 77f928848ea..1d654c07573 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/impl/JvmMetadataExtensions.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/impl/JvmMetadataExtensions.kt @@ -6,41 +6,40 @@ package kotlinx.metadata.jvm.impl import kotlinx.metadata.* +import kotlinx.metadata.impl.ReadContext +import kotlinx.metadata.impl.WriteContext import kotlinx.metadata.impl.extensions.MetadataExtensions import kotlinx.metadata.impl.readAnnotation import kotlinx.metadata.impl.writeAnnotation import kotlinx.metadata.jvm.* import org.jetbrains.kotlin.metadata.ProtoBuf -import org.jetbrains.kotlin.metadata.deserialization.NameResolver -import org.jetbrains.kotlin.metadata.deserialization.TypeTable import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil -import org.jetbrains.kotlin.metadata.serialization.StringTable internal class JvmMetadataExtensions : MetadataExtensions { - override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, strings: NameResolver, types: TypeTable) { + override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) { val ext = v.visitExtensions(JvmClassExtensionVisitor.TYPE) as? JvmClassExtensionVisitor ?: return val anonymousObjectOriginName = proto.getExtensionOrNull(JvmProtoBuf.anonymousObjectOriginName) if (anonymousObjectOriginName != null) { - ext.visitAnonymousObjectOriginName(strings.getString(anonymousObjectOriginName)) + ext.visitAnonymousObjectOriginName(c[anonymousObjectOriginName]) } } - override fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, strings: NameResolver, types: TypeTable) { + override fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext) { val ext = v.visitExtensions(JvmFunctionExtensionVisitor.TYPE) as? JvmFunctionExtensionVisitor ?: return - ext.visit(JvmProtoBufUtil.getJvmMethodSignature(proto, strings, types)?.wrapAsPublic()) + ext.visit(JvmProtoBufUtil.getJvmMethodSignature(proto, c.strings, c.types)?.wrapAsPublic()) val lambdaClassOriginName = proto.getExtensionOrNull(JvmProtoBuf.lambdaClassOriginName) if (lambdaClassOriginName != null) { - ext.visitLambdaClassOriginName(strings.getString(lambdaClassOriginName)) + ext.visitLambdaClassOriginName(c[lambdaClassOriginName]) } } - override fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, strings: NameResolver, types: TypeTable) { + override fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext) { val ext = v.visitExtensions(JvmPropertyExtensionVisitor.TYPE) as? JvmPropertyExtensionVisitor ?: return - val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, strings, types) + val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, c.strings, c.types) val propertySignature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature) val getterSignature = if (propertySignature != null && propertySignature.hasGetter()) propertySignature.getter else null @@ -48,69 +47,67 @@ internal class JvmMetadataExtensions : MetadataExtensions { if (propertySignature != null && propertySignature.hasSetter()) propertySignature.setter else null ext.visit( fieldSignature?.wrapAsPublic(), - getterSignature?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) }, - setterSignature?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) } + getterSignature?.run { JvmMethodSignature(c[name], c[desc]) }, + setterSignature?.run { JvmMethodSignature(c[name], c[desc]) } ) val syntheticMethod = if (propertySignature != null && propertySignature.hasSyntheticMethod()) propertySignature.syntheticMethod else null - ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMethodSignature(strings.getString(name), strings.getString(desc)) }) + ext.visitSyntheticMethodForAnnotations(syntheticMethod?.run { JvmMethodSignature(c[name], c[desc]) }) ext.visitEnd() } - override fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, strings: NameResolver, types: TypeTable) { + override fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext) { val ext = v.visitExtensions(JvmConstructorExtensionVisitor.TYPE) as? JvmConstructorExtensionVisitor ?: return - ext.visit(JvmProtoBufUtil.getJvmConstructorSignature(proto, strings, types)?.wrapAsPublic()) + ext.visit(JvmProtoBufUtil.getJvmConstructorSignature(proto, c.strings, c.types)?.wrapAsPublic()) } - override fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, strings: NameResolver) { + override fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext) { val ext = v.visitExtensions(JvmTypeParameterExtensionVisitor.TYPE) as? JvmTypeParameterExtensionVisitor ?: return for (annotation in proto.getExtension(JvmProtoBuf.typeParameterAnnotation)) { - ext.visitAnnotation(annotation.readAnnotation(strings)) + ext.visitAnnotation(annotation.readAnnotation(c.strings)) } ext.visitEnd() } - override fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, strings: NameResolver) { + override fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext) { val ext = v.visitExtensions(JvmTypeExtensionVisitor.TYPE) as? JvmTypeExtensionVisitor ?: return ext.visit(proto.getExtension(JvmProtoBuf.isRaw)) for (annotation in proto.getExtension(JvmProtoBuf.typeAnnotation)) { - ext.visitAnnotation(annotation.readAnnotation(strings)) + ext.visitAnnotation(annotation.readAnnotation(c.strings)) } ext.visitEnd() } - override fun writeClassExtensions( - type: KmExtensionType, proto: ProtoBuf.Class.Builder, strings: StringTable - ): KmClassExtensionVisitor? { + override fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor? { if (type != JvmClassExtensionVisitor.TYPE) return null return object : JvmClassExtensionVisitor() { override fun visitAnonymousObjectOriginName(internalName: String) { - proto.setExtension(JvmProtoBuf.anonymousObjectOriginName, strings.getStringIndex(internalName)) + proto.setExtension(JvmProtoBuf.anonymousObjectOriginName, c[internalName]) } } } override fun writeFunctionExtensions( - type: KmExtensionType, proto: ProtoBuf.Function.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext ): KmFunctionExtensionVisitor? { if (type != JvmFunctionExtensionVisitor.TYPE) return null return object : JvmFunctionExtensionVisitor() { override fun visit(desc: JvmMethodSignature?) { if (desc != null) { - proto.setExtension(JvmProtoBuf.methodSignature, desc.toJvmMethodSignature(strings)) + proto.setExtension(JvmProtoBuf.methodSignature, desc.toJvmMethodSignature(c)) } } override fun visitLambdaClassOriginName(internalName: String) { - proto.setExtension(JvmProtoBuf.lambdaClassOriginName, strings.getStringIndex(internalName)) + proto.setExtension(JvmProtoBuf.lambdaClassOriginName, c[internalName]) } } } override fun writePropertyExtensions( - type: KmExtensionType, proto: ProtoBuf.Property.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext ): KmPropertyExtensionVisitor? { if (type != JvmPropertyExtensionVisitor.TYPE) return null return object : JvmPropertyExtensionVisitor() { @@ -125,15 +122,15 @@ internal class JvmMetadataExtensions : MetadataExtensions { signature!!.apply { if (fieldDesc != null) { field = JvmProtoBuf.JvmFieldSignature.newBuilder().also { field -> - field.name = strings.getStringIndex(fieldDesc.name) - field.desc = strings.getStringIndex(fieldDesc.desc) + field.name = c[fieldDesc.name] + field.desc = c[fieldDesc.desc] }.build() } if (getterDesc != null) { - getter = getterDesc.toJvmMethodSignature(strings) + getter = getterDesc.toJvmMethodSignature(c) } if (setterDesc != null) { - setter = setterDesc.toJvmMethodSignature(strings) + setter = setterDesc.toJvmMethodSignature(c) } } } @@ -145,7 +142,7 @@ internal class JvmMetadataExtensions : MetadataExtensions { signature = JvmProtoBuf.JvmPropertySignature.newBuilder() } - signature!!.syntheticMethod = desc.toJvmMethodSignature(strings) + signature!!.syntheticMethod = desc.toJvmMethodSignature(c) } override fun visitEnd() { @@ -157,30 +154,30 @@ internal class JvmMetadataExtensions : MetadataExtensions { } override fun writeConstructorExtensions( - type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext ): KmConstructorExtensionVisitor? { if (type != JvmConstructorExtensionVisitor.TYPE) return null return object : JvmConstructorExtensionVisitor() { override fun visit(desc: JvmMethodSignature?) { if (desc != null) { - proto.setExtension(JvmProtoBuf.constructorSignature, desc.toJvmMethodSignature(strings)) + proto.setExtension(JvmProtoBuf.constructorSignature, desc.toJvmMethodSignature(c)) } } } } override fun writeTypeParameterExtensions( - type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext ): KmTypeParameterExtensionVisitor? { if (type != JvmTypeParameterExtensionVisitor.TYPE) return null return object : JvmTypeParameterExtensionVisitor() { override fun visitAnnotation(annotation: KmAnnotation) { - proto.addExtension(JvmProtoBuf.typeParameterAnnotation, annotation.writeAnnotation(strings).build()) + proto.addExtension(JvmProtoBuf.typeParameterAnnotation, annotation.writeAnnotation(c.strings).build()) } } } - override fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, strings: StringTable): KmTypeExtensionVisitor? { + override fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor? { if (type != JvmTypeExtensionVisitor.TYPE) return null return object : JvmTypeExtensionVisitor() { override fun visit(isRaw: Boolean) { @@ -190,14 +187,14 @@ internal class JvmMetadataExtensions : MetadataExtensions { } override fun visitAnnotation(annotation: KmAnnotation) { - proto.addExtension(JvmProtoBuf.typeAnnotation, annotation.writeAnnotation(strings).build()) + proto.addExtension(JvmProtoBuf.typeAnnotation, annotation.writeAnnotation(c.strings).build()) } } } - private fun JvmMemberSignature.toJvmMethodSignature(strings: StringTable): JvmProtoBuf.JvmMethodSignature = + private fun JvmMemberSignature.toJvmMethodSignature(c: WriteContext): JvmProtoBuf.JvmMethodSignature = JvmProtoBuf.JvmMethodSignature.newBuilder().apply { - name = strings.getStringIndex(this@toJvmMethodSignature.name) - desc = strings.getStringIndex(this@toJvmMethodSignature.desc) + name = c[this@toJvmMethodSignature.name] + desc = c[this@toJvmMethodSignature.desc] }.build() } diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt index 82020488764..a609d58b6dc 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt @@ -6,40 +6,39 @@ package kotlinx.metadata.impl.extensions import kotlinx.metadata.* +import kotlinx.metadata.impl.ReadContext +import kotlinx.metadata.impl.WriteContext import org.jetbrains.kotlin.metadata.ProtoBuf -import org.jetbrains.kotlin.metadata.deserialization.NameResolver -import org.jetbrains.kotlin.metadata.deserialization.TypeTable -import org.jetbrains.kotlin.metadata.serialization.StringTable import java.util.* interface MetadataExtensions { - fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, strings: NameResolver, types: TypeTable) + fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) - fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, strings: NameResolver, types: TypeTable) + fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext) - fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, strings: NameResolver, types: TypeTable) + fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext) - fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, strings: NameResolver, types: TypeTable) + fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext) - fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, strings: NameResolver) + fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext) - fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, strings: NameResolver) + fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext) - fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, strings: StringTable): KmClassExtensionVisitor? + fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor? - fun writeFunctionExtensions(type: KmExtensionType, proto: ProtoBuf.Function.Builder, strings: StringTable): KmFunctionExtensionVisitor? + fun writeFunctionExtensions(type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext): KmFunctionExtensionVisitor? - fun writePropertyExtensions(type: KmExtensionType, proto: ProtoBuf.Property.Builder, strings: StringTable): KmPropertyExtensionVisitor? + fun writePropertyExtensions(type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext): KmPropertyExtensionVisitor? fun writeConstructorExtensions( - type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext ): KmConstructorExtensionVisitor? fun writeTypeParameterExtensions( - type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, strings: StringTable + type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext ): KmTypeParameterExtensionVisitor? - fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, strings: StringTable): KmTypeExtensionVisitor? + fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor? companion object { val INSTANCES: List by lazy { diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt index bba90440713..d2d51481b0a 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/readers.kt @@ -13,8 +13,8 @@ import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.metadata.deserialization.Flags as F class ReadContext( - internal val strings: NameResolver, - internal val types: TypeTable, + val strings: NameResolver, + val types: TypeTable, internal val versionRequirements: VersionRequirementTable, private val parent: ReadContext? = null ) { @@ -82,7 +82,7 @@ fun ProtoBuf.Class.accept(v: KmClassVisitor, strings: NameResolver) { } for (extension in c.extensions) { - extension.readClassExtensions(v, this, c.strings, c.types) + extension.readClassExtensions(v, this, c) } v.visitEnd() @@ -142,7 +142,7 @@ private fun ProtoBuf.Constructor.accept(v: KmConstructorVisitor, c: ReadContext) } for (extension in c.extensions) { - extension.readConstructorExtensions(v, this, c.strings, c.types) + extension.readConstructorExtensions(v, this, c) } v.visitEnd() @@ -176,7 +176,7 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) { } for (extension in c.extensions) { - extension.readFunctionExtensions(v, this, c.strings, c.types) + extension.readFunctionExtensions(v, this, c) } v.visitEnd() @@ -207,7 +207,7 @@ private fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) { } for (extension in c.extensions) { - extension.readPropertyExtensions(v, this, c.strings, c.types) + extension.readPropertyExtensions(v, this, c) } v.visitEnd() @@ -270,7 +270,7 @@ private fun ProtoBuf.TypeParameter.accept(v: KmTypeParameterVisitor, c: ReadCont } for (extension in c.extensions) { - extension.readTypeParameterExtensions(v, this, c.strings) + extension.readTypeParameterExtensions(v, this, c) } v.visitEnd() @@ -324,7 +324,7 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) { } for (extension in c.extensions) { - extension.readTypeExtensions(v, this, c.strings) + extension.readTypeExtensions(v, this, c) } v.visitEnd() diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt index f4685def273..895f35db355 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/writers.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTabl import org.jetbrains.kotlin.metadata.serialization.StringTable class WriteContext(val strings: StringTable) { - internal val extensions = MetadataExtensions.INSTANCES + private val extensions = MetadataExtensions.INSTANCES val versionRequirements: MutableVersionRequirementTable = MutableVersionRequirementTable() operator fun get(string: String): Int = @@ -47,7 +47,7 @@ private fun writeTypeParameter( override fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor? = c.applySingleExtension(type) { - writeTypeParameterExtensions(type, t, c.strings) + writeTypeParameterExtensions(type, t, c) } override fun visitEnd() { @@ -116,7 +116,7 @@ private fun writeType(c: WriteContext, flags: Flags, output: (ProtoBuf.Type.Buil override fun visitExtensions(type: KmExtensionType): KmTypeExtensionVisitor? = c.applySingleExtension(type) { - writeTypeExtensions(type, t, c.strings) + writeTypeExtensions(type, t, c) } override fun visitEnd() { @@ -143,7 +143,7 @@ private fun writeConstructor(c: WriteContext, flags: Flags, output: (ProtoBuf.Co override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? = c.applySingleExtension(type) { - writeConstructorExtensions(type, t, c.strings) + writeConstructorExtensions(type, t, c) } override fun visitEnd() { @@ -178,7 +178,7 @@ private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: ( override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? = c.applySingleExtension(type) { - writeFunctionExtensions(type, t, c.strings) + writeFunctionExtensions(type, t, c) } override fun visitEnd() { @@ -212,7 +212,7 @@ private fun writeProperty( override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? = c.applySingleExtension(type) { - writePropertyExtensions(type, t, c.strings) + writePropertyExtensions(type, t, c) } override fun visitEnd() { @@ -457,7 +457,7 @@ open class ClassWriter(stringTable: StringTable) : KmClassVisitor() { override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? = c.applySingleExtension(type) { - writeClassExtensions(type, t, c.strings) + writeClassExtensions(type, t, c) } override fun visitEnd() {