diff --git a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt index 87ba2f386e1..6112a9105dd 100644 --- a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt +++ b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrMetadataEmitter.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.native.interop.gen import kotlinx.metadata.* import kotlinx.metadata.klib.* +import kotlinx.metadata.internal.common.* import org.jetbrains.kotlin.metadata.serialization.Interner import org.jetbrains.kotlin.utils.addIfNotNull @@ -616,4 +617,4 @@ private class MappingExtensions( } is PropertyStub.Kind.Constant -> kind } -} \ No newline at end of file +} diff --git a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/InteropLibraryCreation.kt b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/InteropLibraryCreation.kt index e92f4bcf1c5..2bfbcd9847d 100644 --- a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/InteropLibraryCreation.kt +++ b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/InteropLibraryCreation.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.native.interop.gen.jvm import kotlinx.metadata.* -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.KlibModuleFragmentWriteStrategy import kotlinx.metadata.klib.KlibModuleMetadata import kotlinx.metadata.klib.className diff --git a/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrToMetadataTests.kt b/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrToMetadataTests.kt index 0b88b267381..152e85a16aa 100644 --- a/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrToMetadataTests.kt +++ b/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrToMetadataTests.kt @@ -2,7 +2,7 @@ package org.jetbrains.kotlin.native.interop.gen import kotlinx.metadata.KmAnnotationArgument import kotlinx.metadata.KmClassifier -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.compileTimeValue import org.jetbrains.kotlin.native.interop.indexer.FunctionDecl import org.jetbrains.kotlin.native.interop.indexer.IntegerConstantDef @@ -113,4 +113,4 @@ class StubIrToMetadataTests { assertEquals(42, compileTimeValue.value) } } -} \ No newline at end of file +} diff --git a/libraries/kotlinx-metadata/jvm/api/kotlinx-metadata-jvm.api b/libraries/kotlinx-metadata/jvm/api/kotlinx-metadata-jvm.api index a7c5348df8c..bebfa302518 100644 --- a/libraries/kotlinx-metadata/jvm/api/kotlinx-metadata-jvm.api +++ b/libraries/kotlinx-metadata/jvm/api/kotlinx-metadata-jvm.api @@ -682,30 +682,6 @@ public abstract class kotlinx/metadata/KmLambdaVisitor { public fun visitFunction (ILjava/lang/String;)Lkotlinx/metadata/KmFunctionVisitor; } -public final class kotlinx/metadata/KmModuleFragment : kotlinx/metadata/KmModuleFragmentVisitor { - public fun ()V - public final fun accept (Lkotlinx/metadata/KmModuleFragmentVisitor;)V - public final fun getClasses ()Ljava/util/List; - public final fun getPkg ()Lkotlinx/metadata/KmPackage; - public final fun setPkg (Lkotlinx/metadata/KmPackage;)V - public fun visitClass ()Lkotlinx/metadata/KmClassVisitor; - public fun visitExtensions (Lkotlinx/metadata/KmExtensionType;)Lkotlinx/metadata/KmModuleFragmentExtensionVisitor; - public fun visitPackage ()Lkotlinx/metadata/KmPackageVisitor; -} - -public abstract interface class kotlinx/metadata/KmModuleFragmentExtensionVisitor : kotlinx/metadata/KmExtensionVisitor { -} - -public abstract class kotlinx/metadata/KmModuleFragmentVisitor { - public fun ()V - public fun (Lkotlinx/metadata/KmModuleFragmentVisitor;)V - public synthetic fun (Lkotlinx/metadata/KmModuleFragmentVisitor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun visitClass ()Lkotlinx/metadata/KmClassVisitor; - public fun visitEnd ()V - public fun visitExtensions (Lkotlinx/metadata/KmExtensionType;)Lkotlinx/metadata/KmModuleFragmentExtensionVisitor; - public fun visitPackage ()Lkotlinx/metadata/KmPackageVisitor; -} - public final class kotlinx/metadata/KmPackage : kotlinx/metadata/KmPackageVisitor, kotlinx/metadata/KmDeclarationContainer { public fun ()V public final fun accept (Lkotlinx/metadata/KmPackageVisitor;)V diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinModuleMetadata.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinModuleMetadata.kt index 9cd4b3337e4..3a6d126d890 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinModuleMetadata.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinModuleMetadata.kt @@ -226,7 +226,7 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) { } /** - * Represents a Kotlin JVM module file. + * Represents a Kotlin JVM module file (`.kotlin_module` extension). */ @UnstableMetadataApi class KmModule : KmModuleVisitor() { diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/internal/JvmMetadataExtensions.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/internal/JvmMetadataExtensions.kt index ad58288a9fc..584b1cf4432 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/internal/JvmMetadataExtensions.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/internal/JvmMetadataExtensions.kt @@ -7,6 +7,7 @@ package kotlinx.metadata.jvm.internal import kotlinx.metadata.* import kotlinx.metadata.internal.* +import kotlinx.metadata.internal.common.* import kotlinx.metadata.internal.extensions.* import kotlinx.metadata.jvm.* import org.jetbrains.kotlin.metadata.ProtoBuf diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/ChunkedKlibModuleFragmentWriteStrategy.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/ChunkedKlibModuleFragmentWriteStrategy.kt index 0e3196c2f50..0efa92e94ea 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/ChunkedKlibModuleFragmentWriteStrategy.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/ChunkedKlibModuleFragmentWriteStrategy.kt @@ -6,6 +6,7 @@ package kotlinx.metadata.klib import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment class ChunkedKlibModuleFragmentWriteStrategy( private val topLevelClassifierDeclarationsPerFile: Int = 64, diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/KlibModuleMetadata.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/KlibModuleMetadata.kt index 0176add630c..79fcfbc1c73 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/KlibModuleMetadata.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/KlibModuleMetadata.kt @@ -7,7 +7,7 @@ package kotlinx.metadata.klib import kotlinx.metadata.KmAnnotation -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.internal.* import kotlinx.metadata.klib.impl.* import org.jetbrains.kotlin.library.metadata.parseModuleHeader @@ -138,4 +138,4 @@ private fun KmModuleFragment.fqNameOrFail(): String = fqName ?: error("Module fragment must have a fully-qualified name.") private fun KmModuleFragment.isEmpty(): Boolean = - classes.isEmpty() && (pkg?.let { it.functions.isEmpty() && it.properties.isEmpty() && it.typeAliases.isEmpty() } ?: true) \ No newline at end of file + classes.isEmpty() && (pkg?.let { it.functions.isEmpty() && it.properties.isEmpty() && it.typeAliases.isEmpty() } ?: true) diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibExtensionNodes.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibExtensionNodes.kt index 2e754eb045a..ff46b24afbc 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibExtensionNodes.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibExtensionNodes.kt @@ -7,6 +7,8 @@ package kotlinx.metadata.klib.impl import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor import kotlinx.metadata.internal.extensions.* import kotlinx.metadata.klib.* @@ -260,4 +262,4 @@ internal class KlibValueParameterExtension : KlibValueParameterExtensionVisitor( require(visitor is KlibValueParameterExtensionVisitor) annotations.forEach(visitor::visitAnnotation) } -} \ No newline at end of file +} diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibMetadataExtensions.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibMetadataExtensions.kt index a46e7878c4c..2697f849f68 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibMetadataExtensions.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/impl/klibMetadataExtensions.kt @@ -7,6 +7,7 @@ package kotlinx.metadata.klib.impl import kotlinx.metadata.* import kotlinx.metadata.internal.* +import kotlinx.metadata.internal.common.* import kotlinx.metadata.internal.extensions.* import kotlinx.metadata.klib.* import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf @@ -428,4 +429,4 @@ internal class KlibMetadataExtensions : MetadataExtensions { override fun createValueParameterExtension(): KmValueParameterExtension = KlibValueParameterExtension() -} \ No newline at end of file +} diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibExtensions.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibExtensions.kt index f255f5855b9..8bd11133d2c 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibExtensions.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibExtensions.kt @@ -6,6 +6,7 @@ package kotlinx.metadata.klib import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.impl.klibExtensions val KmFunction.annotations: MutableList @@ -114,4 +115,4 @@ var KmTypeAlias.uniqId: UniqId? } val KmValueParameter.annotations: MutableList - get() = klibExtensions.annotations \ No newline at end of file + get() = klibExtensions.annotations diff --git a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibMetadataExtensionVisitors.kt b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibMetadataExtensionVisitors.kt index 427b6d72067..856ec20f3b2 100644 --- a/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibMetadataExtensionVisitors.kt +++ b/libraries/kotlinx-metadata/klib/src/kotlinx/metadata/klib/klibMetadataExtensionVisitors.kt @@ -7,6 +7,7 @@ package kotlinx.metadata.klib import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor abstract class KlibFunctionExtensionVisitor : KmFunctionExtensionVisitor { @@ -154,4 +155,4 @@ abstract class KlibValueParameterExtensionVisitor : KmValueParameterExtensionVis companion object { val TYPE = KmExtensionType(KlibValueParameterExtensionVisitor::class) } -} \ No newline at end of file +} diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt index bc8af0b91fe..6b403c8bcfd 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt @@ -69,12 +69,6 @@ interface KmClassExtensionVisitor : KmDeclarationContainerExtensionVisitor @Deprecated(VISITOR_API_MESSAGE) interface KmPackageExtensionVisitor : KmDeclarationContainerExtensionVisitor -/** - * A visitor to visit platform-specific extensions for a module fragment. - */ -@Deprecated(VISITOR_API_MESSAGE) -interface KmModuleFragmentExtensionVisitor : KmExtensionVisitor - /** * A visitor to visit platform-specific extensions for a function. */ diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/common/KotlinCommonMetadata.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/common/KotlinCommonMetadata.kt index c67c1c9002c..46e795cce25 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/common/KotlinCommonMetadata.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/common/KotlinCommonMetadata.kt @@ -6,15 +6,22 @@ package kotlinx.metadata.internal.common -import kotlinx.metadata.KmModuleFragment -import kotlinx.metadata.KmModuleFragmentVisitor +import kotlinx.metadata.* +import kotlinx.metadata.VISITOR_API_MESSAGE import kotlinx.metadata.internal.accept +import kotlinx.metadata.internal.extensions.KmModuleFragmentExtension +import kotlinx.metadata.internal.extensions.MetadataExtensions +import kotlinx.metadata.internal.extensions.singleOfType import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.builtins.readBuiltinsPackageFragment import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl import java.io.ByteArrayInputStream -// TODO: stabilize +/** + * Reads metadata that is not from annotation nor from `.kotlin_module` file. + * Usually such metadata comes from serialized klibs. However, special `kotlin_builtins` file from standard library + * distribution can also be read with this reader. + */ class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.PackageFragment) { fun toKmModuleFragment(): KmModuleFragment = KmModuleFragment().apply(this::accept) @@ -44,3 +51,98 @@ class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.Packa } } } + +/** + * Represents a Kotlin module fragment. + * + * Do not confuse with `KmModule`: while KmModule represents JVM-specific `.kotlin_module` file, KmModuleFragment is not platform-specific. + * It usually represents metadata serialized to klib or part of klib, + * but also may represent a special `.kotlin_builtins` file that can be encountered only in standard library. + * + * Can be read with [KotlinCommonMetadata.read]. + */ +@Suppress("DEPRECATION") +class KmModuleFragment : KmModuleFragmentVisitor() { + + /** + * Top-level functions, type aliases and properties in the module fragment. + */ + var pkg: KmPackage? = null + + /** + * Classes in the module fragment. + */ + val classes: MutableList = ArrayList() + + private val extensions: List = + MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions) + + @Deprecated(VISITOR_API_MESSAGE) + override fun visitPackage(): KmPackageVisitor? = + KmPackage().also { pkg = it } + + @Deprecated(VISITOR_API_MESSAGE) + override fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? = + extensions.singleOfType(type) + + @Deprecated(VISITOR_API_MESSAGE) + override fun visitClass(): KmClassVisitor? = + KmClass().addTo(classes) + + /** + * Populates the given visitor with data in this module fragment. + * + * @param visitor the visitor which will visit data in the module fragment. + */ + @Deprecated(VISITOR_API_MESSAGE) + fun accept(visitor: KmModuleFragmentVisitor) { + pkg?.let { visitor.visitPackage()?.let(it::accept) } + classes.forEach { visitor.visitClass()?.let(it::accept) } + extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } + visitor.visitEnd() + } +} + +/** + * A visitor to visit module fragments. The module fragment can have no more than one package, and any number of classes, + * and must have at least one declaration. + * + * When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods. + */ +@Deprecated(VISITOR_API_MESSAGE) +@Suppress("DEPRECATION") +abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) { + + /** + * Visits a package within the module fragment. + */ + open fun visitPackage(): KmPackageVisitor? = + delegate?.visitPackage() + + /** + * Visits a class within the module fragment. + */ + open fun visitClass(): KmClassVisitor? = + delegate?.visitClass() + + /** + * Visits the extensions of the given type on the module fragment. + * + * @param type the type of extension visitor to be returned. + */ + open fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? = + delegate?.visitExtensions(type) + + /** + * Visits the end of the module fragment. + */ + open fun visitEnd() { + delegate?.visitEnd() + } +} + +/** + * A visitor to visit platform-specific extensions for a module fragment. + */ +@Deprecated(VISITOR_API_MESSAGE) +interface KmModuleFragmentExtensionVisitor : KmExtensionVisitor diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/MetadataExtensions.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/MetadataExtensions.kt index f9aae3cf5c3..cf1b52ecc60 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/MetadataExtensions.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/MetadataExtensions.kt @@ -7,6 +7,7 @@ package kotlinx.metadata.internal.extensions import kotlinx.metadata.* import kotlinx.metadata.internal.* +import kotlinx.metadata.internal.common.* import org.jetbrains.kotlin.metadata.ProtoBuf import java.util.* diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/extensionNodes.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/extensionNodes.kt index c2fc525c224..ded13b1b739 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/extensionNodes.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/extensions/extensionNodes.kt @@ -7,6 +7,7 @@ package kotlinx.metadata.internal.extensions import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor interface KmExtension : KmExtensionVisitor { fun accept(visitor: V) @@ -30,4 +31,4 @@ interface KmTypeExtension : KmTypeExtensionVisitor, KmExtension -interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension \ No newline at end of file +interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/readers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/readers.kt index dd58ef27625..e283a87a930 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/readers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/readers.kt @@ -9,7 +9,7 @@ package kotlinx.metadata.internal import kotlinx.metadata.* import kotlinx.metadata.Flags // Don't remove this import. See KT-45553 import kotlinx.metadata.internal.extensions.MetadataExtensions -import kotlinx.metadata.internal.IgnoreInApiDump +import kotlinx.metadata.internal.common.KmModuleFragmentVisitor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* import kotlin.contracts.ExperimentalContracts diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/writers.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/writers.kt index 4a54209b748..c00a975e89e 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/writers.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/internal/writers.kt @@ -6,6 +6,8 @@ package kotlinx.metadata.internal import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor +import kotlinx.metadata.internal.common.KmModuleFragmentVisitor import kotlinx.metadata.internal.extensions.applySingleExtension import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/nodes.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/nodes.kt index 47fa7ecb2a1..b362ce5fd00 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/nodes.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/nodes.kt @@ -220,7 +220,9 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer { } /** - * Represents a Kotlin package fragment, including single file facades and multi-file class parts. + * Represents a Kotlin package fragment that contains top-level functions, properties and type aliases. + * Package fragments are produced from single file facades and multi-file class parts. + * Note that a package fragment does not contain any classes, as classes are not a part of file facades and have their own metadata. */ @Suppress("DEPRECATION") class KmPackage : KmPackageVisitor(), KmDeclarationContainer { @@ -273,51 +275,6 @@ class KmPackage : KmPackageVisitor(), KmDeclarationContainer { } } -/** - * Represents a Kotlin module fragment. This is used to represent metadata of a part of a module on platforms other than JVM. - */ -@Suppress("DEPRECATION") -class KmModuleFragment : KmModuleFragmentVisitor() { - - /** - * Top-level functions, type aliases and properties in the module fragment. - */ - var pkg: KmPackage? = null - - /** - * Classes in the module fragment. - */ - val classes: MutableList = ArrayList() - - private val extensions: List = - MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions) - - @Deprecated(VISITOR_API_MESSAGE) - override fun visitPackage(): KmPackageVisitor? = - KmPackage().also { pkg = it } - - @Deprecated(VISITOR_API_MESSAGE) - override fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? = - extensions.singleOfType(type) - - @Deprecated(VISITOR_API_MESSAGE) - override fun visitClass(): KmClassVisitor? = - KmClass().addTo(classes) - - /** - * Populates the given visitor with data in this module fragment. - * - * @param visitor the visitor which will visit data in the module fragment. - */ - @Deprecated(VISITOR_API_MESSAGE) - fun accept(visitor: KmModuleFragmentVisitor) { - pkg?.let { visitor.visitPackage()?.let(it::accept) } - classes.forEach { visitor.visitClass()?.let(it::accept) } - extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } - visitor.visitEnd() - } -} - /** * Represents a synthetic class generated for a Kotlin lambda. */ diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/visitors.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/visitors.kt index 72cb38ea847..3cbe1243e37 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/visitors.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/visitors.kt @@ -216,44 +216,6 @@ abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVis } } -/** - * A visitor to visit module fragments. The module fragment can have no more than one package, and any number of classes, - * and must have at least one declaration. - * - * When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods. - */ -@Deprecated(VISITOR_API_MESSAGE) -@Suppress("DEPRECATION") -abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) { - - /** - * Visits a package within the module fragment. - */ - open fun visitPackage(): KmPackageVisitor? = - delegate?.visitPackage() - - /** - * Visits a class within the module fragment. - */ - open fun visitClass(): KmClassVisitor? = - delegate?.visitClass() - - /** - * Visits the extensions of the given type on the module fragment. - * - * @param type the type of extension visitor to be returned. - */ - open fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? = - delegate?.visitExtensions(type) - - /** - * Visits the end of the module fragment. - */ - open fun visitEnd() { - delegate?.visitEnd() - } -} - /** * A visitor to visit the metadata of a synthetic class generated for a Kotlin lambda. * diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirSerializers.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirSerializers.kt index ee2adf680d5..640e8e9095c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirSerializers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirSerializers.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.commonizer.metadata import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.* -import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer import org.jetbrains.kotlin.commonizer.cir.* import org.jetbrains.kotlin.commonizer.metadata.TypeAliasExpansion.* import org.jetbrains.kotlin.commonizer.utils.DEFAULT_SETTER_VALUE_NAME diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirTreeSerializer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirTreeSerializer.kt index 0255eac8a1e..24a27e2f6d9 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirTreeSerializer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirTreeSerializer.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.commonizer.metadata import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.KlibModuleMetadata import org.jetbrains.kotlin.commonizer.cir.* import org.jetbrains.kotlin.commonizer.mergedtree.* diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/utils/MetadataDeclarationsComparator.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/utils/MetadataDeclarationsComparator.kt index d0f86eaaab1..b789580eb1a 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/utils/MetadataDeclarationsComparator.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/utils/MetadataDeclarationsComparator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.commonizer.metadata.utils import com.intellij.util.containers.FactoryMap import kotlinx.metadata.* +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.* import org.jetbrains.kotlin.commonizer.metadata.utils.MetadataDeclarationsComparator.EntityKind.* import org.jetbrains.kotlin.commonizer.metadata.utils.MetadataDeclarationsComparator.Mismatch diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeModuleDeserializer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeModuleDeserializer.kt index 44452c3f25a..d6a8b540b6f 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeModuleDeserializer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeModuleDeserializer.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.commonizer.tree.deserializer -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.KlibModuleMetadata import kotlinx.metadata.klib.fqName import org.jetbrains.kotlin.commonizer.cir.CirModule diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreePackageDeserializer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreePackageDeserializer.kt index 8d7dc32f55b..e25fc73a83a 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreePackageDeserializer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreePackageDeserializer.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.commonizer.tree.deserializer -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import org.jetbrains.kotlin.commonizer.cir.CirPackage import org.jetbrains.kotlin.commonizer.cir.CirPackageName import org.jetbrains.kotlin.commonizer.metadata.CirTypeResolver diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/ClassesToProcess.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/ClassesToProcess.kt index e9c9f57baeb..8df2a66fe67 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/ClassesToProcess.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/ClassesToProcess.kt @@ -9,7 +9,7 @@ import com.intellij.util.containers.FactoryMap import kotlinx.metadata.Flag import kotlinx.metadata.KmAnnotation import kotlinx.metadata.KmClass -import kotlinx.metadata.KmModuleFragment +import kotlinx.metadata.internal.common.KmModuleFragment import kotlinx.metadata.klib.klibEnumEntries import org.jetbrains.kotlin.commonizer.cir.CirEntityId import org.jetbrains.kotlin.commonizer.cir.CirName