Move KmModuleFragment to an internal.common package

because it is klib-related and can be read only with KotlinCommonMetadata.
This commit is contained in:
Leonid Startsev
2023-04-05 17:09:03 +02:00
committed by Space Team
parent c3d363d1b8
commit 0cfe2b04f5
26 changed files with 139 additions and 134 deletions
@@ -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
}
}
}
@@ -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
@@ -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)
}
}
}
}
@@ -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 <init> ()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 <init> ()V
public fun <init> (Lkotlinx/metadata/KmModuleFragmentVisitor;)V
public synthetic fun <init> (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 <init> ()V
public final fun accept (Lkotlinx/metadata/KmPackageVisitor;)V
@@ -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() {
@@ -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
@@ -6,6 +6,7 @@
package kotlinx.metadata.klib
import kotlinx.metadata.*
import kotlinx.metadata.internal.common.KmModuleFragment
class ChunkedKlibModuleFragmentWriteStrategy(
private val topLevelClassifierDeclarationsPerFile: Int = 64,
@@ -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)
classes.isEmpty() && (pkg?.let { it.functions.isEmpty() && it.properties.isEmpty() && it.typeAliases.isEmpty() } ?: true)
@@ -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)
}
}
}
@@ -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()
}
}
@@ -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<KmAnnotation>
@@ -114,4 +115,4 @@ var KmTypeAlias.uniqId: UniqId?
}
val KmValueParameter.annotations: MutableList<KmAnnotation>
get() = klibExtensions.annotations
get() = klibExtensions.annotations
@@ -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)
}
}
}
@@ -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.
*/
@@ -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<KmClass> = ArrayList()
private val extensions: List<KmModuleFragmentExtension> =
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
@@ -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.*
@@ -7,6 +7,7 @@
package kotlinx.metadata.internal.extensions
import kotlinx.metadata.*
import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor
interface KmExtension<V : KmExtensionVisitor> : KmExtensionVisitor {
fun accept(visitor: V)
@@ -30,4 +31,4 @@ interface KmTypeExtension : KmTypeExtensionVisitor, KmExtension<KmTypeExtensionV
interface KmTypeAliasExtension : KmTypeAliasExtensionVisitor, KmExtension<KmTypeAliasExtensionVisitor>
interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension<KmValueParameterExtensionVisitor>
interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension<KmValueParameterExtensionVisitor>
@@ -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
@@ -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
@@ -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<KmClass> = ArrayList()
private val extensions: List<KmModuleFragmentExtension> =
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.
*/
@@ -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.
*
@@ -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
@@ -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.*
@@ -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
@@ -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
@@ -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
@@ -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