From 3197a118ab17a9518304b0faa53249379e30d842 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 11 Jan 2023 23:39:26 +0100 Subject: [PATCH] Update jvm-abi-gen to kotlinx-metadata-jvm's Km* node API --- .../kotlin/jvm/abi/JvmAbiMetadataProcessor.kt | 103 +++++------------- 1 file changed, 26 insertions(+), 77 deletions(-) diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiMetadataProcessor.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiMetadataProcessor.kt index 36e998760bc..6e95df16337 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiMetadataProcessor.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiMetadataProcessor.kt @@ -3,15 +3,15 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -@file:Suppress("DEPRECATION") - package org.jetbrains.kotlin.jvm.abi -import kotlinx.metadata.* -import kotlinx.metadata.jvm.JvmClassExtensionVisitor -import kotlinx.metadata.jvm.JvmPackageExtensionVisitor -import kotlinx.metadata.jvm.KotlinClassHeader +import kotlinx.metadata.Flag +import kotlinx.metadata.Flags +import kotlinx.metadata.KmClass +import kotlinx.metadata.KmPackage import kotlinx.metadata.jvm.KotlinClassMetadata +import kotlinx.metadata.jvm.Metadata +import kotlinx.metadata.jvm.localDelegatedProperties import org.jetbrains.kotlin.load.java.JvmAnnotationNames.* import org.jetbrains.org.objectweb.asm.AnnotationVisitor import org.jetbrains.org.objectweb.asm.Opcodes @@ -32,19 +32,19 @@ fun abiMetadataProcessor(annotationVisitor: AnnotationVisitor): AnnotationVisito val newHeader = when (val metadata = KotlinClassMetadata.read(header)) { is KotlinClassMetadata.Class -> { - val writer = KotlinClassMetadata.Class.Writer() - metadata.accept(AbiKmClassVisitor(writer)) - writer.write(metadataVersion, header.extraInt).annotationData + val klass = metadata.toKmClass() + klass.removePrivateDeclarations() + KotlinClassMetadata.writeClass(klass, metadataVersion, header.extraInt).annotationData } is KotlinClassMetadata.FileFacade -> { - val writer = KotlinClassMetadata.FileFacade.Writer() - metadata.accept(AbiKmPackageVisitor(writer)) - writer.write(metadataVersion, header.extraInt).annotationData + val pkg = metadata.toKmPackage() + pkg.removePrivateDeclarations() + KotlinClassMetadata.writeFileFacade(pkg, metadataVersion, header.extraInt).annotationData } is KotlinClassMetadata.MultiFileClassPart -> { - val writer = KotlinClassMetadata.MultiFileClassPart.Writer() - metadata.accept(AbiKmPackageVisitor(writer)) - writer.write(metadata.facadeClassName, metadataVersion, header.extraInt).annotationData + val pkg = metadata.toKmPackage() + pkg.removePrivateDeclarations() + KotlinClassMetadata.writeMultiFileClassPart(pkg, metadata.facadeClassName, metadataVersion, header.extraInt).annotationData } else -> header } @@ -56,7 +56,7 @@ fun abiMetadataProcessor(annotationVisitor: AnnotationVisitor): AnnotationVisito /** * Parse a KotlinClassHeader from an existing Kotlin Metadata annotation visitor. */ -private fun kotlinClassHeaderVisitor(body: (KotlinClassHeader) -> Unit): AnnotationVisitor = +private fun kotlinClassHeaderVisitor(body: (Metadata) -> Unit): AnnotationVisitor = object : AnnotationVisitor(Opcodes.API_VERSION) { var kind: Int = 1 var metadataVersion: IntArray = intArrayOf() @@ -91,7 +91,7 @@ private fun kotlinClassHeaderVisitor(body: (KotlinClassHeader) -> Unit): Annotat override fun visitEnd() { body( - KotlinClassHeader( + Metadata( kind, metadataVersion, data1.toTypedArray(), @@ -134,70 +134,19 @@ private fun AnnotationVisitor.visitKotlinMetadata(header: Metadata) { visitEnd() } -/** - * Class metadata adapter which removes private functions, properties, type aliases, - * and local delegated properties. - */ -private class AbiKmClassVisitor(delegate: KmClassVisitor) : KmClassVisitor(delegate) { - override fun visitConstructor(flags: Flags): KmConstructorVisitor? { - if (!isPrivateDeclaration(flags)) - return super.visitConstructor(flags) - return null - } - - override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor? { - if (!isPrivateDeclaration(flags)) - return super.visitFunction(flags, name) - return null - } - - override fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor? { - if (!isPrivateDeclaration(flags)) - return super.visitProperty(flags, name, getterFlags, setterFlags) - return null - } - +private fun KmClass.removePrivateDeclarations() { + constructors.removeIf { isPrivateDeclaration(it.flags) } + functions.removeIf { isPrivateDeclaration(it.flags) } + properties.removeIf { isPrivateDeclaration(it.flags) } + localDelegatedProperties.clear() // TODO: do not serialize private type aliases once KT-17229 is fixed. - - override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor? { - val delegate = super.visitExtensions(type) - if (type != JvmClassExtensionVisitor.TYPE) return delegate - return object : JvmClassExtensionVisitor(delegate as JvmClassExtensionVisitor?) { - override fun visitLocalDelegatedProperty( - flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags - ): KmPropertyVisitor? = null - } - } } -/** - * Class metadata adapter which removes private functions, properties, type aliases, - * and local delegated properties. - */ -private class AbiKmPackageVisitor(delegate: KmPackageVisitor) : KmPackageVisitor(delegate) { - override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor? { - if (!isPrivateDeclaration(flags)) - return super.visitFunction(flags, name) - return null - } - - override fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor? { - if (!isPrivateDeclaration(flags)) - return super.visitProperty(flags, name, getterFlags, setterFlags) - return null - } - +private fun KmPackage.removePrivateDeclarations() { + functions.removeIf { isPrivateDeclaration(it.flags) } + properties.removeIf { isPrivateDeclaration(it.flags) } + localDelegatedProperties.clear() // TODO: do not serialize private type aliases once KT-17229 is fixed. - - override fun visitExtensions(type: KmExtensionType): KmPackageExtensionVisitor? { - val delegate = super.visitExtensions(type) - if (type != JvmPackageExtensionVisitor.TYPE) return delegate - return object : JvmPackageExtensionVisitor(delegate as JvmPackageExtensionVisitor?) { - override fun visitLocalDelegatedProperty( - flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags - ): KmPropertyVisitor? = null - } - } } private fun isPrivateDeclaration(flags: Flags): Boolean =