Introduce @DeprecatedVisitor; mark up visitor-related declarations with it.
Provide convenient JVM writing API. Get rid of ExperimentalUnsignedTypes.
This commit is contained in:
committed by
Space Team
parent
dd985d8209
commit
471882b743
@@ -1018,10 +1018,6 @@ public abstract class kotlinx/metadata/KmVersionRequirementVisitor {
|
||||
public fun visitVersion (III)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/UtilKt {
|
||||
public static final fun assignFrom (Ljava/util/List;Ljava/util/Collection;)V
|
||||
}
|
||||
|
||||
public class kotlinx/metadata/impl/ClassWriter : kotlinx/metadata/KmClassVisitor {
|
||||
public fun <init> (Lorg/jetbrains/kotlin/metadata/serialization/StringTable;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Lorg/jetbrains/kotlin/metadata/serialization/StringTable;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
|
||||
@@ -277,6 +277,18 @@ public final class kotlinx/metadata/jvm/KotlinClassMetadata$Class$Writer : kotli
|
||||
|
||||
public final class kotlinx/metadata/jvm/KotlinClassMetadata$Companion {
|
||||
public final fun read (Lkotlinx/metadata/jvm/KotlinClassHeader;)Lkotlinx/metadata/jvm/KotlinClassMetadata;
|
||||
public final fun writeClass (Lkotlinx/metadata/KmClass;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
|
||||
public static synthetic fun writeClass$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmClass;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
|
||||
public final fun writeFileFacade (Lkotlinx/metadata/KmPackage;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
|
||||
public static synthetic fun writeFileFacade$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmPackage;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
|
||||
public final fun writeLambda (Lkotlinx/metadata/KmLambda;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
|
||||
public static synthetic fun writeLambda$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmLambda;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
|
||||
public final fun writeMultiFileClassFacade (Ljava/util/List;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
|
||||
public static synthetic fun writeMultiFileClassFacade$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Ljava/util/List;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
|
||||
public final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
|
||||
public static synthetic fun writeMultiFileClassPart$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmPackage;Ljava/lang/String;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
|
||||
public final fun writeSyntheticClass ([II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
|
||||
public static synthetic fun writeSyntheticClass$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/jvm/KotlinClassMetadata$FileFacade : kotlinx/metadata/jvm/KotlinClassMetadata {
|
||||
@@ -346,6 +358,8 @@ public final class kotlinx/metadata/jvm/KotlinModuleMetadata {
|
||||
|
||||
public final class kotlinx/metadata/jvm/KotlinModuleMetadata$Companion {
|
||||
public final fun read ([B)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
|
||||
public final fun write (Lkotlinx/metadata/jvm/KmModule;[I)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
|
||||
public static synthetic fun write$default (Lkotlinx/metadata/jvm/KotlinModuleMetadata$Companion;Lkotlinx/metadata/jvm/KmModule;[IILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/jvm/KotlinModuleMetadata$Writer : kotlinx/metadata/jvm/KmModuleVisitor {
|
||||
|
||||
@@ -36,6 +36,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* Visits metadata of this class with a new [KmClass] instance and returns that instance.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun toKmClass(): KmClass =
|
||||
KmClass().apply(this::accept)
|
||||
|
||||
@@ -44,6 +45,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
*
|
||||
* @param v the visitor that must visit this class
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(v: KmClassVisitor) {
|
||||
val (strings, proto) = classData
|
||||
proto.accept(v, strings)
|
||||
@@ -52,6 +54,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* A [KmClassVisitor] that generates the metadata of a Kotlin class.
|
||||
*/
|
||||
// @Suppress("INVISIBLE_REFERENCE") FIXME: maybe make supertype internal?
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
class Writer : ClassWriter(JvmStringTable()) {
|
||||
/**
|
||||
* Returns the metadata of the class that was written with this writer.
|
||||
@@ -62,6 +70,10 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* 0 by default
|
||||
*/
|
||||
@JvmOverloads
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
fun write(
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
@@ -87,6 +99,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* Visits metadata of this file facade with a new [KmPackage] instance and returns that instance.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun toKmPackage(): KmPackage =
|
||||
KmPackage().apply(this::accept)
|
||||
|
||||
@@ -95,6 +108,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
*
|
||||
* @param v the visitor that must visit this file facade
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(v: KmPackageVisitor) {
|
||||
val (strings, proto) = packageData
|
||||
proto.accept(v, strings)
|
||||
@@ -103,6 +117,11 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* A [KmPackageVisitor] that generates the metadata of a Kotlin file facade.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
class Writer : PackageWriter(JvmStringTable()) {
|
||||
/**
|
||||
* Returns the metadata of the file facade that was written with this writer.
|
||||
@@ -113,6 +132,10 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* 0 by default
|
||||
*/
|
||||
@JvmOverloads
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
fun write(
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
@@ -141,6 +164,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
*
|
||||
* Returns `null` if this synthetic class does not represent a lambda.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun toKmLambda(): KmLambda? =
|
||||
if (isLambda) KmLambda().apply(this::accept) else null
|
||||
|
||||
@@ -158,6 +182,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
*
|
||||
* @param v the visitor that must visit this lambda
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(v: KmLambdaVisitor) {
|
||||
if (!isLambda) throw IllegalStateException(
|
||||
"accept(KmLambdaVisitor) is only possible for synthetic classes which are lambdas (isLambda = true)"
|
||||
@@ -172,6 +197,12 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* call [Writer.visitFunction] and [Writer.visitEnd] on a newly created instance of this writer. If these methods are not called,
|
||||
* the resulting metadata will represent a _non-lambda_ synthetic class.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " +
|
||||
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
class Writer : LambdaWriter(JvmStringTable()) {
|
||||
/**
|
||||
* Returns the metadata of the synthetic class that was written with this writer.
|
||||
@@ -181,6 +212,11 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [KotlinClassHeader.extraInt]),
|
||||
* 0 by default
|
||||
*/
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " +
|
||||
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
@JvmOverloads
|
||||
fun write(
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
@@ -211,6 +247,10 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* A writer that generates the metadata of a multi-file class facade.
|
||||
*/
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
class Writer {
|
||||
/**
|
||||
* Returns the metadata of the multi-file class facade that was written with this writer.
|
||||
@@ -221,6 +261,11 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [KotlinClassHeader.extraInt]),
|
||||
* 0 by default
|
||||
*/
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
|
||||
ReplaceWith("KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)"),
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
@JvmOverloads
|
||||
fun write(
|
||||
partClassNames: List<String>,
|
||||
@@ -259,6 +304,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* Visits metadata of this multi-file class part with a new [KmPackage] instance and returns that instance.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun toKmPackage(): KmPackage =
|
||||
KmPackage().apply(this::accept)
|
||||
|
||||
@@ -267,6 +313,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
*
|
||||
* @param v the visitor that must visit this multi-file class part
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(v: KmPackageVisitor) {
|
||||
val (strings, proto) = packageData
|
||||
proto.accept(v, strings)
|
||||
@@ -275,6 +322,11 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
/**
|
||||
* A [KmPackageVisitor] that generates the metadata of a multi-file class part.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
class Writer : PackageWriter(JvmStringTable()) {
|
||||
/**
|
||||
* Returns the metadata of the multi-file class part that was written with this writer.
|
||||
@@ -285,6 +337,10 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [KotlinClassHeader.extraInt]),
|
||||
* 0 by default
|
||||
*/
|
||||
@Deprecated(
|
||||
"Writer API is deprecated. Please use KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
@JvmOverloads
|
||||
fun write(
|
||||
facadeClassName: String,
|
||||
@@ -308,6 +364,55 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
class Unknown internal constructor(header: KotlinClassHeader) : KotlinClassMetadata(header)
|
||||
|
||||
companion object {
|
||||
// TODO: docs
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeClass(
|
||||
kmClass: KmClass,
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): Class = KotlinClassMetadata.Class.Writer().also { kmClass.accept(it) }.write(metadataVersion, extraInt)
|
||||
|
||||
// TODO: docs
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeFileFacade(
|
||||
kmPackage: KmPackage,
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): FileFacade = FileFacade.Writer().also { kmPackage.accept(it) }.write(metadataVersion, extraInt)
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeLambda(
|
||||
kmLambda: KmLambda,
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): SyntheticClass = SyntheticClass.Writer().also { kmLambda.accept(it) }.write(metadataVersion, extraInt)
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeSyntheticClass(
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): SyntheticClass = SyntheticClass.Writer().write(metadataVersion, extraInt)
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeMultiFileClassFacade(
|
||||
partClassNames: List<String>, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): MultiFileClassFacade = MultiFileClassFacade.Writer().write(partClassNames, metadataVersion, extraInt)
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun writeMultiFileClassPart(
|
||||
kmPackage: KmPackage,
|
||||
facadeClassName: String,
|
||||
metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION,
|
||||
extraInt: Int = 0
|
||||
): MultiFileClassPart = MultiFileClassPart.Writer().also { kmPackage.accept(it) }.write(facadeClassName, metadataVersion, extraInt)
|
||||
|
||||
|
||||
/**
|
||||
* Reads and parses the given header of a Kotlin JVM class file and returns the correct type of [KotlinClassMetadata] encoded by
|
||||
* this header, or `null` if this header encodes an unsupported kind of Kotlin classes or has an unsupported metadata version.
|
||||
|
||||
@@ -7,10 +7,7 @@
|
||||
|
||||
package kotlinx.metadata.jvm
|
||||
|
||||
import kotlinx.metadata.InconsistentKotlinMetadataException
|
||||
import kotlinx.metadata.KmAnnotation
|
||||
import kotlinx.metadata.KmClass
|
||||
import kotlinx.metadata.KmClassVisitor
|
||||
import kotlinx.metadata.*
|
||||
import kotlinx.metadata.impl.accept
|
||||
import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
@@ -25,6 +22,8 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.serializeToByteArray
|
||||
* and call [KotlinModuleMetadata.read].
|
||||
*
|
||||
* @property bytes the byte array representing the contents of a `.kotlin_module` file
|
||||
*
|
||||
* TODO: since it is not completed, may be we should just delete it?
|
||||
*/
|
||||
class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePrivate") val bytes: ByteArray) {
|
||||
internal val data: ModuleMapping = ModuleMapping.loadModuleMapping(
|
||||
@@ -36,12 +35,15 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
|
||||
/**
|
||||
* Visits metadata of this module with a new [KmModule] instance and returns that instance.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun toKmModule(): KmModule =
|
||||
KmModule().apply(this::accept)
|
||||
|
||||
/**
|
||||
* A [KmModuleVisitor] that generates the metadata of a Kotlin JVM module file.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Deprecated("Writer class API is deprecated. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)", level = DeprecationLevel.ERROR)
|
||||
class Writer : KmModuleVisitor() {
|
||||
private val b = JvmModuleProtoBuf.Module.newBuilder()
|
||||
|
||||
@@ -84,6 +86,7 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
|
||||
* @param metadataVersion metadata version to be written to the metadata (see [KotlinClassHeader.metadataVersion]),
|
||||
* [KotlinClassHeader.COMPATIBLE_METADATA_VERSION] by default
|
||||
*/
|
||||
@Deprecated("Writer class API is deprecated. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)", level = DeprecationLevel.ERROR)
|
||||
fun write(metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION): KotlinModuleMetadata =
|
||||
KotlinModuleMetadata(b.build().serializeToByteArray(JvmMetadataVersion(*metadataVersion), 0))
|
||||
}
|
||||
@@ -93,6 +96,7 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
|
||||
*
|
||||
* @param v the visitor that must visit this module file
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(v: KmModuleVisitor) {
|
||||
for ((fqName, parts) in data.packageFqName2Parts) {
|
||||
val (fileFacades, multiFileClassParts) = parts.parts.partition { parts.getMultifileFacadeName(it) == null }
|
||||
@@ -137,6 +141,10 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
|
||||
throw InconsistentKotlinMetadataException("Exception occurred when reading Kotlin metadata", e)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun write(kmModule: KmModule, metadataVersion: IntArray = KotlinClassHeader.COMPATIBLE_METADATA_VERSION): KotlinModuleMetadata = Writer().also { kmModule.accept(it) }.write(metadataVersion)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,6 +153,7 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
|
||||
*
|
||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
|
||||
/**
|
||||
* Visits the table of all single- and multi-file facades declared in some package of this module.
|
||||
@@ -193,6 +202,7 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
|
||||
/**
|
||||
* Represents a Kotlin JVM module file.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmModule : KmModuleVisitor() {
|
||||
/**
|
||||
* Table of all single- and multi-file facades declared in some package of this module, where keys are '.'-separated package names.
|
||||
@@ -214,14 +224,17 @@ class KmModule : KmModuleVisitor() {
|
||||
*/
|
||||
val optionalAnnotationClasses: MutableList<KmClass> = ArrayList(0)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
|
||||
packageParts[fqName] = KmPackageParts(fileFacades.toMutableList(), multiFileClassParts.toMutableMap())
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
annotations.add(annotation)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitOptionalAnnotationClass(): KmClass =
|
||||
KmClass().also(optionalAnnotationClasses::add)
|
||||
|
||||
@@ -230,6 +243,7 @@ class KmModule : KmModuleVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this module.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmModuleVisitor) {
|
||||
for ((fqName, parts) in packageParts) {
|
||||
visitor.visitPackageParts(fqName, parts.fileFacades, parts.multiFileClassParts)
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal class JvmMetadataExtensions : MetadataExtensions {
|
||||
override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val ext = v.visitExtensions(JvmClassExtensionVisitor.TYPE) as? JvmClassExtensionVisitor ?: return
|
||||
|
||||
@@ -9,24 +9,31 @@ import kotlinx.metadata.*
|
||||
import kotlinx.metadata.impl.extensions.*
|
||||
import kotlinx.metadata.jvm.*
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // internal so OK
|
||||
internal val KmClass.jvm: JvmClassExtension
|
||||
get() = visitExtensions(JvmClassExtensionVisitor.TYPE) as JvmClassExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // internal so OK
|
||||
internal val KmPackage.jvm: JvmPackageExtension
|
||||
get() = visitExtensions(JvmPackageExtensionVisitor.TYPE) as JvmPackageExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmFunction.jvm: JvmFunctionExtension
|
||||
get() = visitExtensions(JvmFunctionExtensionVisitor.TYPE) as JvmFunctionExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmProperty.jvm: JvmPropertyExtension
|
||||
get() = visitExtensions(JvmPropertyExtensionVisitor.TYPE) as JvmPropertyExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmConstructor.jvm: JvmConstructorExtension
|
||||
get() = visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmTypeParameter.jvm: JvmTypeParameterExtension
|
||||
get() = visitExtensions(JvmTypeParameterExtensionVisitor.TYPE) as JvmTypeParameterExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmType.jvm: JvmTypeExtension
|
||||
get() = visitExtensions(JvmTypeExtensionVisitor.TYPE) as JvmTypeExtension
|
||||
|
||||
@@ -37,6 +44,7 @@ internal class JvmClassExtension : JvmClassExtensionVisitor(), KmClassExtension
|
||||
var anonymousObjectOriginName: String? = null
|
||||
var jvmFlags: Flags = 0
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
override fun visitLocalDelegatedProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor =
|
||||
KmProperty(flags, name, getterFlags, setterFlags).also { localDelegatedProperties.add(it) }
|
||||
|
||||
@@ -55,6 +63,7 @@ internal class JvmClassExtension : JvmClassExtensionVisitor(), KmClassExtension
|
||||
override fun accept(visitor: KmClassExtensionVisitor) {
|
||||
require(visitor is JvmClassExtensionVisitor)
|
||||
localDelegatedProperties.forEach {
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
visitor.visitLocalDelegatedProperty(it.flags, it.name, it.getterFlags, it.setterFlags)?.let(it::accept)
|
||||
}
|
||||
moduleName?.let(visitor::visitModuleName)
|
||||
@@ -64,6 +73,7 @@ internal class JvmClassExtension : JvmClassExtensionVisitor(), KmClassExtension
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
internal class JvmPackageExtension : JvmPackageExtensionVisitor(), KmPackageExtension {
|
||||
val localDelegatedProperties: MutableList<KmProperty> = ArrayList(0)
|
||||
var moduleName: String? = null
|
||||
|
||||
@@ -30,6 +30,7 @@ abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor
|
||||
* @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
||||
* and [Flag.PropertyAccessor] flags
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
open fun visitLocalDelegatedProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor? =
|
||||
delegate?.visitLocalDelegatedProperty(flags, name, getterFlags, setterFlags)
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.reflect.full.primaryConstructor
|
||||
import kotlin.test.*
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class MetadataSmokeTest {
|
||||
private fun Class<*>.readMetadata(): KotlinClassHeader {
|
||||
return getAnnotation(Metadata::class.java).run {
|
||||
@@ -64,7 +65,7 @@ class MetadataSmokeTest {
|
||||
}
|
||||
}
|
||||
|
||||
val header = KotlinClassMetadata.Class.Writer().apply(klass::accept).write().header
|
||||
val header = KotlinClassMetadata.writeClass(klass).header
|
||||
|
||||
// Then, produce the bytecode of a .class file with ASM
|
||||
|
||||
@@ -181,7 +182,7 @@ class MetadataSmokeTest {
|
||||
classWithStableParameterNames.constructors.forEach { assertFalse(Flag.Constructor.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
||||
classWithStableParameterNames.functions.forEach { assertFalse(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
||||
|
||||
val newMetadata = KotlinClassMetadata.Class.Writer().let { writer ->
|
||||
val newMetadata = KotlinClassMetadata.writeClass(
|
||||
KmClass().apply {
|
||||
classWithStableParameterNames.accept(
|
||||
object : KmClassVisitor(this) {
|
||||
@@ -192,9 +193,8 @@ class MetadataSmokeTest {
|
||||
super.visitFunction(flags + flagsOf(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES), name)
|
||||
}
|
||||
)
|
||||
}.accept(writer)
|
||||
writer.write()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
val classWithUnstableParameterNames = newMetadata.toKmClass()
|
||||
|
||||
@@ -203,15 +203,17 @@ class MetadataSmokeTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
fun metadataVersionEarlierThan1_4() {
|
||||
val dummy = (KotlinClassMetadata.read(MetadataSmokeTest::class.java.readMetadata()) as KotlinClassMetadata.Class).toKmClass()
|
||||
val mv = intArrayOf(1, 3)
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.Class.Writer().write(mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.FileFacade.Writer().write(mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.MultiFileClassFacade.Writer().write(listOf("A"), mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.MultiFileClassPart.Writer().write("A", mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.SyntheticClass.Writer().write(mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.writeClass(dummy, mv) } // We can't write empty KmClass()
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.writeFileFacade(KmPackage(), mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.writeMultiFileClassFacade(listOf("A"), mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.writeMultiFileClassPart(KmPackage(), "A", mv) }
|
||||
assertFailsWith<IllegalArgumentException> { KotlinClassMetadata.writeSyntheticClass(mv) }
|
||||
|
||||
KotlinModuleMetadata.Writer().write(mv)
|
||||
KotlinModuleMetadata.write(KmModule(), mv)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -229,9 +231,8 @@ class MetadataSmokeTest {
|
||||
val kmClass = (KotlinClassMetadata.read(metadata) as KotlinClassMetadata.Class).toKmClass()
|
||||
kmClass.jvmFlags = jvmClassFlags
|
||||
|
||||
val kmClassCopy = KotlinClassMetadata.Class.Writer()
|
||||
.also { kmClass.accept(it) }
|
||||
.write(metadata.metadataVersion, metadata.extraInt)
|
||||
val kmClassCopy = KotlinClassMetadata
|
||||
.writeClass(kmClass, metadata.metadataVersion, metadata.extraInt)
|
||||
.toKmClass()
|
||||
assertEquals(kmClassCopy.jvmFlags, jvmClassFlags)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,264 @@
|
||||
public final class kotlinx/metadata/klib/ChunkedKlibModuleFragmentWriteStrategy : kotlinx/metadata/klib/KlibModuleFragmentWriteStrategy {
|
||||
public fun <init> ()V
|
||||
public fun <init> (II)V
|
||||
public synthetic fun <init> (IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public fun processPackageParts (Ljava/util/List;)Ljava/util/List;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibClassExtensionVisitor : kotlinx/metadata/KmClassExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibClassExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitEnumEntry (Lkotlinx/metadata/klib/KlibEnumEntry;)V
|
||||
public abstract fun visitFile (Lkotlinx/metadata/klib/KlibSourceFile;)V
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibClassExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibConstructorExtensionVisitor : kotlinx/metadata/KmConstructorExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibConstructorExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibConstructorExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibEnumEntry {
|
||||
public fun <init> (Ljava/lang/String;Lkotlinx/metadata/klib/UniqId;Ljava/lang/Integer;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/metadata/klib/UniqId;Ljava/lang/Integer;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun getAnnotations ()Ljava/util/List;
|
||||
public final fun getName ()Ljava/lang/String;
|
||||
public final fun getOrdinal ()Ljava/lang/Integer;
|
||||
public final fun getUniqId ()Lkotlinx/metadata/klib/UniqId;
|
||||
public final fun setOrdinal (Ljava/lang/Integer;)V
|
||||
public final fun setUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibExtensionsKt {
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmClass;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmConstructor;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmFunction;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmProperty;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmType;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmTypeParameter;)Ljava/util/List;
|
||||
public static final fun getAnnotations (Lkotlinx/metadata/KmValueParameter;)Ljava/util/List;
|
||||
public static final fun getClassName (Lkotlinx/metadata/KmModuleFragment;)Ljava/util/List;
|
||||
public static final fun getCompileTimeValue (Lkotlinx/metadata/KmProperty;)Lkotlinx/metadata/KmAnnotationArgument;
|
||||
public static final fun getFile (Lkotlinx/metadata/KmClass;)Lkotlinx/metadata/klib/KlibSourceFile;
|
||||
public static final fun getFile (Lkotlinx/metadata/KmFunction;)Lkotlinx/metadata/klib/KlibSourceFile;
|
||||
public static final fun getFile (Lkotlinx/metadata/KmProperty;)Ljava/lang/Integer;
|
||||
public static final fun getFqName (Lkotlinx/metadata/KmModuleFragment;)Ljava/lang/String;
|
||||
public static final fun getFqName (Lkotlinx/metadata/KmPackage;)Ljava/lang/String;
|
||||
public static final fun getGetterAnnotations (Lkotlinx/metadata/KmProperty;)Ljava/util/List;
|
||||
public static final fun getKlibEnumEntries (Lkotlinx/metadata/KmClass;)Ljava/util/List;
|
||||
public static final fun getModuleFragmentFiles (Lkotlinx/metadata/KmModuleFragment;)Ljava/util/List;
|
||||
public static final fun getSetterAnnotations (Lkotlinx/metadata/KmProperty;)Ljava/util/List;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmClass;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmConstructor;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmFunction;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmProperty;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmTypeAlias;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun getUniqId (Lkotlinx/metadata/KmTypeParameter;)Lkotlinx/metadata/klib/UniqId;
|
||||
public static final fun setCompileTimeValue (Lkotlinx/metadata/KmProperty;Lkotlinx/metadata/KmAnnotationArgument;)V
|
||||
public static final fun setFile (Lkotlinx/metadata/KmClass;Lkotlinx/metadata/klib/KlibSourceFile;)V
|
||||
public static final fun setFile (Lkotlinx/metadata/KmFunction;Lkotlinx/metadata/klib/KlibSourceFile;)V
|
||||
public static final fun setFile (Lkotlinx/metadata/KmProperty;Ljava/lang/Integer;)V
|
||||
public static final fun setFqName (Lkotlinx/metadata/KmModuleFragment;Ljava/lang/String;)V
|
||||
public static final fun setFqName (Lkotlinx/metadata/KmPackage;Ljava/lang/String;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmClass;Lkotlinx/metadata/klib/UniqId;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmConstructor;Lkotlinx/metadata/klib/UniqId;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmFunction;Lkotlinx/metadata/klib/UniqId;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmProperty;Lkotlinx/metadata/klib/UniqId;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmTypeAlias;Lkotlinx/metadata/klib/UniqId;)V
|
||||
public static final fun setUniqId (Lkotlinx/metadata/KmTypeParameter;Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibFunctionExtensionVisitor : kotlinx/metadata/KmFunctionExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibFunctionExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitFile (Lkotlinx/metadata/klib/KlibSourceFile;)V
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibFunctionExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibHeader {
|
||||
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
|
||||
public final fun getAnnotation ()Ljava/util/List;
|
||||
public final fun getEmptyPackage ()Ljava/util/List;
|
||||
public final fun getFile ()Ljava/util/List;
|
||||
public final fun getModuleName ()Ljava/lang/String;
|
||||
public final fun getPackageFragmentName ()Ljava/util/List;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibModuleFragmentExtensionVisitor : kotlinx/metadata/KmModuleFragmentExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibModuleFragmentExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitClassName (Ljava/lang/String;)V
|
||||
public abstract fun visitFile (Lkotlinx/metadata/klib/KlibSourceFile;)V
|
||||
public abstract fun visitFqName (Ljava/lang/String;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleFragmentExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract interface class kotlinx/metadata/klib/KlibModuleFragmentReadStrategy {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibModuleFragmentReadStrategy$Companion;
|
||||
public abstract fun processModuleParts (Ljava/util/List;)Ljava/util/List;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleFragmentReadStrategy$Companion {
|
||||
public final fun getDEFAULT ()Lkotlinx/metadata/klib/KlibModuleFragmentReadStrategy;
|
||||
}
|
||||
|
||||
public abstract interface class kotlinx/metadata/klib/KlibModuleFragmentWriteStrategy {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibModuleFragmentWriteStrategy$Companion;
|
||||
public abstract fun processPackageParts (Ljava/util/List;)Ljava/util/List;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleFragmentWriteStrategy$Companion {
|
||||
public final fun getDEFAULT ()Lkotlinx/metadata/klib/KlibModuleFragmentWriteStrategy;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleMetadata {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibModuleMetadata$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
|
||||
public final fun getAnnotations ()Ljava/util/List;
|
||||
public final fun getFragments ()Ljava/util/List;
|
||||
public final fun getName ()Ljava/lang/String;
|
||||
public final fun write (Lkotlinx/metadata/klib/KlibModuleFragmentWriteStrategy;)Lkotlinx/metadata/klib/KlibModuleMetadata$SerializedKlibMetadata;
|
||||
public static synthetic fun write$default (Lkotlinx/metadata/klib/KlibModuleMetadata;Lkotlinx/metadata/klib/KlibModuleFragmentWriteStrategy;ILjava/lang/Object;)Lkotlinx/metadata/klib/KlibModuleMetadata$SerializedKlibMetadata;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleMetadata$Companion {
|
||||
public final fun read (Lkotlinx/metadata/klib/KlibModuleMetadata$MetadataLibraryProvider;Lkotlinx/metadata/klib/KlibModuleFragmentReadStrategy;)Lkotlinx/metadata/klib/KlibModuleMetadata;
|
||||
public static synthetic fun read$default (Lkotlinx/metadata/klib/KlibModuleMetadata$Companion;Lkotlinx/metadata/klib/KlibModuleMetadata$MetadataLibraryProvider;Lkotlinx/metadata/klib/KlibModuleFragmentReadStrategy;ILjava/lang/Object;)Lkotlinx/metadata/klib/KlibModuleMetadata;
|
||||
}
|
||||
|
||||
public abstract interface class kotlinx/metadata/klib/KlibModuleMetadata$MetadataLibraryProvider {
|
||||
public abstract fun getModuleHeaderData ()[B
|
||||
public abstract fun packageMetadata (Ljava/lang/String;Ljava/lang/String;)[B
|
||||
public abstract fun packageMetadataParts (Ljava/lang/String;)Ljava/util/Set;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibModuleMetadata$SerializedKlibMetadata {
|
||||
public fun <init> ([BLjava/util/List;Ljava/util/List;)V
|
||||
public final fun getFragmentNames ()Ljava/util/List;
|
||||
public final fun getFragments ()Ljava/util/List;
|
||||
public final fun getHeader ()[B
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibPackageExtensionVisitor : kotlinx/metadata/KmPackageExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibPackageExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitFqName (Ljava/lang/String;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibPackageExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibPropertyExtensionVisitor : kotlinx/metadata/KmPropertyExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibPropertyExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitCompileTimeValue (Lkotlinx/metadata/KmAnnotationArgument;)V
|
||||
public abstract fun visitFile (I)V
|
||||
public abstract fun visitGetterAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitSetterAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibPropertyExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibSourceFile {
|
||||
public fun <init> (Ljava/lang/String;)V
|
||||
public final fun getName ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibTypeAliasExtensionVisitor : kotlinx/metadata/KmTypeAliasExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibTypeAliasExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibTypeAliasExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibTypeExtensionVisitor : kotlinx/metadata/KmTypeExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibTypeExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibTypeExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibTypeParameterExtensionVisitor : kotlinx/metadata/KmTypeParameterExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibTypeParameterExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
public abstract fun visitUniqId (Lkotlinx/metadata/klib/UniqId;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibTypeParameterExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public abstract class kotlinx/metadata/klib/KlibValueParameterExtensionVisitor : kotlinx/metadata/KmValueParameterExtensionVisitor {
|
||||
public static final field Companion Lkotlinx/metadata/klib/KlibValueParameterExtensionVisitor$Companion;
|
||||
public fun <init> ()V
|
||||
public fun getType ()Lkotlinx/metadata/KmExtensionType;
|
||||
public abstract fun visitAnnotation (Lkotlinx/metadata/KmAnnotation;)V
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/KlibValueParameterExtensionVisitor$Companion {
|
||||
public final fun getTYPE ()Lkotlinx/metadata/KmExtensionType;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/UniqId {
|
||||
public fun <init> (J)V
|
||||
public final fun getIndex ()J
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/impl/KlibModuleFragmentWriter : kotlinx/metadata/impl/ModuleFragmentWriter {
|
||||
public fun <init> (Lorg/jetbrains/kotlin/serialization/ApproximatingStringTable;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Lorg/jetbrains/kotlin/serialization/ApproximatingStringTable;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public fun visitEnd ()V
|
||||
public final fun write ()Lorg/jetbrains/kotlin/metadata/ProtoBuf$PackageFragment;
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/impl/ReverseSourceFileIndexWriteExtension : kotlinx/metadata/impl/WriteContextExtension {
|
||||
public fun <init> ()V
|
||||
public final fun getFileIndex ()Ljava/util/List;
|
||||
public final fun getIndexOf (Lkotlinx/metadata/klib/KlibSourceFile;)I
|
||||
}
|
||||
|
||||
public final class kotlinx/metadata/klib/impl/SourceFileIndexReadExtension : kotlinx/metadata/impl/ReadContextExtension {
|
||||
public fun <init> (Ljava/util/List;)V
|
||||
public final fun getSourceFile (I)Lkotlinx/metadata/klib/KlibSourceFile;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package kotlinx.metadata.klib
|
||||
|
||||
import kotlinx.metadata.DeprecatedVisitor
|
||||
import kotlinx.metadata.KmAnnotation
|
||||
import kotlinx.metadata.KmModuleFragment
|
||||
import kotlinx.metadata.impl.WriteContext
|
||||
@@ -78,6 +79,7 @@ class KlibModuleMetadata(
|
||||
* Deserializes metadata from the given [library].
|
||||
* @param readStrategy specifies the way module fragments of a single package are modified (e.g. merged) after deserialization.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun read(
|
||||
library: MetadataLibraryProvider,
|
||||
readStrategy: KlibModuleFragmentReadStrategy = KlibModuleFragmentReadStrategy.DEFAULT
|
||||
@@ -101,6 +103,7 @@ class KlibModuleMetadata(
|
||||
* Writes metadata back to serialized representation.
|
||||
* @param writeStrategy specifies the way module fragments are modified (e.g. split) before serialization.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun write(
|
||||
writeStrategy: KlibModuleFragmentWriteStrategy = KlibModuleFragmentWriteStrategy.DEFAULT
|
||||
): SerializedKlibMetadata {
|
||||
|
||||
@@ -9,33 +9,43 @@ import kotlinx.metadata.*
|
||||
import kotlinx.metadata.impl.extensions.*
|
||||
import kotlinx.metadata.klib.*
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmFunction.klibExtensions: KlibFunctionExtension
|
||||
get() = visitExtensions(KlibFunctionExtensionVisitor.TYPE) as KlibFunctionExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmClass.klibExtensions: KlibClassExtension
|
||||
get() = visitExtensions(KlibClassExtensionVisitor.TYPE) as KlibClassExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmType.klibExtensions: KlibTypeExtension
|
||||
get() = visitExtensions(KlibTypeExtensionVisitor.TYPE) as KlibTypeExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmProperty.klibExtensions: KlibPropertyExtension
|
||||
get() = visitExtensions(KlibPropertyExtensionVisitor.TYPE) as KlibPropertyExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmConstructor.klibExtensions: KlibConstructorExtension
|
||||
get() = visitExtensions(KlibConstructorExtensionVisitor.TYPE) as KlibConstructorExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmTypeParameter.klibExtensions: KlibTypeParameterExtension
|
||||
get() = visitExtensions(KlibTypeParameterExtensionVisitor.TYPE) as KlibTypeParameterExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmPackage.klibExtensions: KlibPackageExtension
|
||||
get() = visitExtensions(KlibPackageExtensionVisitor.TYPE) as KlibPackageExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
|
||||
get() = visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as KlibModuleFragmentExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
|
||||
get() = visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as KlibTypeAliasExtension
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
internal val KmValueParameter.klibExtensions: KlibValueParameterExtension
|
||||
get() = visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as KlibValueParameterExtension
|
||||
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.serialization.StringTableImpl
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
|
||||
private fun ReadContext.getSourceFile(index: Int) =
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package kotlinx.metadata.klib.impl
|
||||
|
||||
import kotlinx.metadata.DeprecatedVisitor
|
||||
import kotlinx.metadata.impl.*
|
||||
import kotlinx.metadata.klib.KlibSourceFile
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||
@@ -25,6 +26,7 @@ class ReverseSourceFileIndexWriteExtension : WriteContextExtension {
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class KlibModuleFragmentWriter(
|
||||
stringTable: ApproximatingStringTable,
|
||||
contextExtensions: List<WriteContextExtension> = emptyList()
|
||||
|
||||
@@ -16,8 +16,7 @@ package kotlinx.metadata
|
||||
* If this name starts with '.', it represents a local class or an anonymous object. This is used by the Kotlin compiler
|
||||
* to prevent lookup of this name in the resolution.
|
||||
*/
|
||||
// TODO: use inline class in 1.3
|
||||
typealias ClassName = String
|
||||
typealias ClassName = String // Not a value class because of Java usages
|
||||
|
||||
val ClassName.isLocal: Boolean
|
||||
get() = this.startsWith(".")
|
||||
|
||||
@@ -43,17 +43,12 @@ sealed class KmAnnotationArgument {
|
||||
data class DoubleValue(override val value: Double) : LiteralValue<Double>()
|
||||
data class BooleanValue(override val value: Boolean) : LiteralValue<Boolean>()
|
||||
|
||||
// TODO: remove @ExperimentalUnsignedTypes once bootstrap stdlib has stable unsigned types.
|
||||
@ExperimentalUnsignedTypes
|
||||
data class UByteValue(override val value: UByte) : LiteralValue<UByte>()
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
data class UShortValue(override val value: UShort) : LiteralValue<UShort>()
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
data class UIntValue(override val value: UInt) : LiteralValue<UInt>()
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
data class ULongValue(override val value: ULong) : LiteralValue<ULong>()
|
||||
|
||||
data class StringValue(override val value: String) : LiteralValue<String>()
|
||||
|
||||
@@ -11,6 +11,7 @@ import kotlinx.metadata.impl.WriteContext
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import java.util.*
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO: all this should be refactored to entities, not visitors
|
||||
interface MetadataExtensions {
|
||||
fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext)
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ fun ProtoBuf.Annotation.readAnnotation(strings: NameResolver): KmAnnotation =
|
||||
}.toMap()
|
||||
)
|
||||
|
||||
@OptIn(ExperimentalUnsignedTypes::class)
|
||||
fun ProtoBuf.Annotation.Argument.Value.readAnnotationArgument(strings: NameResolver): KmAnnotationArgument? {
|
||||
if (Flags.IS_UNSIGNED[flags]) {
|
||||
return when (type) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import kotlinx.metadata.Flags // Don't remove this import. See KT-45553
|
||||
import kotlinx.metadata.impl.extensions.MetadataExtensions
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.*
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
|
||||
|
||||
/**
|
||||
@@ -46,7 +47,7 @@ class ReadContext(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
@OptIn(DeprecatedVisitor::class, ExperimentalContextReceivers::class) // TODO
|
||||
fun ProtoBuf.Class.accept(
|
||||
v: KmClassVisitor,
|
||||
strings: NameResolver,
|
||||
@@ -128,6 +129,7 @@ private fun ProtoBuf.Class.loadInlineClassUnderlyingType(c: ReadContext): ProtoB
|
||||
?.returnType(c.types)
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
fun ProtoBuf.Package.accept(
|
||||
v: KmPackageVisitor,
|
||||
strings: NameResolver,
|
||||
@@ -149,6 +151,7 @@ fun ProtoBuf.Package.accept(
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
fun ProtoBuf.PackageFragment.accept(
|
||||
v: KmModuleFragmentVisitor,
|
||||
strings: NameResolver,
|
||||
@@ -174,6 +177,7 @@ fun ProtoBuf.PackageFragment.accept(
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
private fun KmDeclarationContainerVisitor.visitDeclarations(
|
||||
functions: List<ProtoBuf.Function>,
|
||||
properties: List<ProtoBuf.Property>,
|
||||
@@ -195,6 +199,7 @@ private fun KmDeclarationContainerVisitor.visitDeclarations(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun ProtoBuf.Function.accept(v: KmLambdaVisitor, strings: NameResolver) {
|
||||
val c = ReadContext(strings, TypeTable(typeTable), VersionRequirementTable.EMPTY)
|
||||
|
||||
@@ -203,6 +208,7 @@ fun ProtoBuf.Function.accept(v: KmLambdaVisitor, strings: NameResolver) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun ProtoBuf.Constructor.accept(v: KmConstructorVisitor, c: ReadContext) {
|
||||
for (parameter in valueParameterList) {
|
||||
v.visitValueParameter(parameter.flags, c[parameter.name])?.let { parameter.accept(it, c) }
|
||||
@@ -219,7 +225,7 @@ private fun ProtoBuf.Constructor.accept(v: KmConstructorVisitor, c: ReadContext)
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
@OptIn(DeprecatedVisitor::class, ExperimentalContextReceivers::class)
|
||||
private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) {
|
||||
val c = outer.withTypeParameters(typeParameterList)
|
||||
|
||||
@@ -244,7 +250,7 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) {
|
||||
}
|
||||
|
||||
if (hasContract()) {
|
||||
v.visitContract()?.let { contract.accept(it, c) }
|
||||
@OptIn(ExperimentalContracts::class) v.visitContract()?.let { contract.accept(it, c) }
|
||||
}
|
||||
|
||||
for (versionRequirement in versionRequirementList) {
|
||||
@@ -259,6 +265,7 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) {
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
@DeprecatedVisitor
|
||||
fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) {
|
||||
val c = outer.withTypeParameters(typeParameterList)
|
||||
|
||||
@@ -294,6 +301,7 @@ fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun ProtoBuf.TypeAlias.accept(v: KmTypeAliasVisitor, outer: ReadContext) {
|
||||
val c = outer.withTypeParameters(typeParameterList)
|
||||
|
||||
@@ -324,6 +332,7 @@ private fun ProtoBuf.TypeAlias.accept(v: KmTypeAliasVisitor, outer: ReadContext)
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun ProtoBuf.ValueParameter.accept(v: KmValueParameterVisitor, c: ReadContext) {
|
||||
type(c.types).let { type ->
|
||||
v.visitType(type.typeFlags)?.let { type.accept(it, c) }
|
||||
@@ -339,7 +348,7 @@ private fun ProtoBuf.ValueParameter.accept(v: KmValueParameterVisitor, c: ReadCo
|
||||
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private inline fun ProtoBuf.TypeParameter.accept(
|
||||
visit: (flags: Flags, name: String, id: Int, variance: KmVariance) -> KmTypeParameterVisitor?,
|
||||
c: ReadContext
|
||||
@@ -353,6 +362,7 @@ private inline fun ProtoBuf.TypeParameter.accept(
|
||||
visit(typeParameterFlags, c[name], id, variance)?.let { accept(it, c) }
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun ProtoBuf.TypeParameter.accept(v: KmTypeParameterVisitor, c: ReadContext) {
|
||||
for (upperBound in upperBounds(c.types)) {
|
||||
v.visitUpperBound(upperBound.typeFlags)?.let { upperBound.accept(it, c) }
|
||||
@@ -365,6 +375,7 @@ private fun ProtoBuf.TypeParameter.accept(v: KmTypeParameterVisitor, c: ReadCont
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) {
|
||||
when {
|
||||
hasClassName() -> v.visitClass(c.className(className))
|
||||
@@ -419,6 +430,7 @@ private fun ProtoBuf.Type.accept(v: KmTypeVisitor, c: ReadContext) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun acceptVersionRequirementVisitor(id: Int, v: KmVersionRequirementVisitor, c: ReadContext) {
|
||||
val message = VersionRequirement.create(id, c.strings, c.versionRequirements)
|
||||
?: throw InconsistentKotlinMetadataException("No VersionRequirement with the given id in the table")
|
||||
@@ -443,6 +455,8 @@ private fun acceptVersionRequirementVisitor(id: Int, v: KmVersionRequirementVisi
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun ProtoBuf.Contract.accept(v: KmContractVisitor, c: ReadContext) {
|
||||
for (effect in effectList) {
|
||||
if (!effect.hasEffectType()) continue
|
||||
@@ -465,6 +479,8 @@ private fun ProtoBuf.Contract.accept(v: KmContractVisitor, c: ReadContext) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun ProtoBuf.Effect.accept(v: KmEffectVisitor, c: ReadContext) {
|
||||
for (constructorArgument in effectConstructorArgumentList) {
|
||||
v.visitConstructorArgument()?.let { constructorArgument.accept(it, c) }
|
||||
@@ -477,6 +493,8 @@ private fun ProtoBuf.Effect.accept(v: KmEffectVisitor, c: ReadContext) {
|
||||
v.visitEnd()
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun ProtoBuf.Expression.accept(v: KmEffectExpressionVisitor, c: ReadContext) {
|
||||
v.visit(
|
||||
flags,
|
||||
|
||||
@@ -24,7 +24,6 @@ fun KmAnnotation.writeAnnotation(strings: StringTable): ProtoBuf.Annotation.Buil
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalUnsignedTypes::class)
|
||||
fun KmAnnotationArgument.writeAnnotationArgument(strings: StringTable): ProtoBuf.Annotation.Argument.Value.Builder =
|
||||
ProtoBuf.Annotation.Argument.Value.newBuilder().apply {
|
||||
when (this@writeAnnotationArgument) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
|
||||
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
||||
import org.jetbrains.kotlin.metadata.serialization.StringTable
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/**
|
||||
* Allows to populate [WriteContext] with additional data
|
||||
@@ -29,6 +30,7 @@ open class WriteContext(val strings: StringTable, val contextExtensions: List<Wr
|
||||
strings.getClassNameIndex(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeTypeParameter(
|
||||
c: WriteContext, flags: Flags, name: String, id: Int, variance: KmVariance,
|
||||
output: (ProtoBuf.TypeParameter.Builder) -> Unit
|
||||
@@ -60,6 +62,7 @@ private fun writeTypeParameter(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeType(c: WriteContext, flags: Flags, output: (ProtoBuf.Type.Builder) -> Unit): KmTypeVisitor =
|
||||
object : KmTypeVisitor() {
|
||||
private val t = ProtoBuf.Type.newBuilder()
|
||||
@@ -125,6 +128,7 @@ private fun writeType(c: WriteContext, flags: Flags, output: (ProtoBuf.Type.Buil
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeConstructor(c: WriteContext, flags: Flags, output: (ProtoBuf.Constructor.Builder) -> Unit): KmConstructorVisitor =
|
||||
object : KmConstructorVisitor() {
|
||||
val t = ProtoBuf.Constructor.newBuilder()
|
||||
@@ -148,6 +152,7 @@ private fun writeConstructor(c: WriteContext, flags: Flags, output: (ProtoBuf.Co
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: (ProtoBuf.Function.Builder) -> Unit): KmFunctionVisitor =
|
||||
object : KmFunctionVisitor() {
|
||||
val t = ProtoBuf.Function.newBuilder()
|
||||
@@ -171,6 +176,7 @@ private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: (
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor? =
|
||||
writeVersionRequirement(c) { t.addVersionRequirement(it) }
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
override fun visitContract(): KmContractVisitor? =
|
||||
writeContract(c) { t.contract = it.build() }
|
||||
|
||||
@@ -188,6 +194,7 @@ private fun writeFunction(c: WriteContext, flags: Flags, name: String, output: (
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
fun writeProperty(
|
||||
c: WriteContext, flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags, output: (ProtoBuf.Property.Builder) -> Unit
|
||||
): KmPropertyVisitor = object : KmPropertyVisitor() {
|
||||
@@ -229,6 +236,7 @@ fun writeProperty(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeValueParameter(
|
||||
c: WriteContext, flags: Flags, name: String,
|
||||
output: (ProtoBuf.ValueParameter.Builder) -> Unit
|
||||
@@ -255,6 +263,7 @@ private fun writeValueParameter(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeTypeAlias(
|
||||
c: WriteContext, flags: Flags, name: String,
|
||||
output: (ProtoBuf.TypeAlias.Builder) -> Unit
|
||||
@@ -291,6 +300,7 @@ private fun writeTypeAlias(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
private fun writeVersionRequirement(
|
||||
c: WriteContext, output: (Int) -> Unit
|
||||
): KmVersionRequirementVisitor = object : KmVersionRequirementVisitor() {
|
||||
@@ -341,6 +351,8 @@ private fun writeVersionRequirement(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun writeContract(c: WriteContext, output: (ProtoBuf.Contract.Builder) -> Unit): KmContractVisitor =
|
||||
object : KmContractVisitor() {
|
||||
val t = ProtoBuf.Contract.newBuilder()
|
||||
@@ -353,6 +365,8 @@ private fun writeContract(c: WriteContext, output: (ProtoBuf.Contract.Builder) -
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun writeEffect(
|
||||
c: WriteContext, type: KmEffectType, invocationKind: KmEffectInvocationKind?,
|
||||
output: (ProtoBuf.Effect.Builder) -> Unit
|
||||
@@ -382,6 +396,8 @@ private fun writeEffect(
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
private fun writeEffectExpression(c: WriteContext, output: (ProtoBuf.Expression.Builder) -> Unit): KmEffectExpressionVisitor =
|
||||
object : KmEffectExpressionVisitor() {
|
||||
val t = ProtoBuf.Expression.newBuilder()
|
||||
@@ -418,6 +434,7 @@ private fun writeEffectExpression(c: WriteContext, output: (ProtoBuf.Expression.
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor // TODO: this likely need to be rewritten directly or deprecated completely
|
||||
open class ClassWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmClassVisitor() {
|
||||
protected val t = ProtoBuf.Class.newBuilder()!!
|
||||
protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
|
||||
@@ -491,6 +508,7 @@ open class ClassWriter(stringTable: StringTable, contextExtensions: List<WriteCo
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor // TODO: this likely need to be rewritten directly
|
||||
open class PackageWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmPackageVisitor() {
|
||||
protected val t = ProtoBuf.Package.newBuilder()!!
|
||||
protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
|
||||
@@ -516,6 +534,7 @@ open class PackageWriter(stringTable: StringTable, contextExtensions: List<Write
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor // TODO: this likely need to be rewritten directly
|
||||
open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) :
|
||||
KmModuleFragmentVisitor() {
|
||||
protected val t = ProtoBuf.PackageFragment.newBuilder()!!
|
||||
@@ -541,6 +560,7 @@ open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: Lis
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
open class LambdaWriter(stringTable: StringTable) : KmLambdaVisitor() {
|
||||
protected var t: ProtoBuf.Function.Builder? = null
|
||||
protected val c = WriteContext(stringTable)
|
||||
|
||||
+2
@@ -5,6 +5,7 @@
|
||||
|
||||
package kotlinx.metadata.internal.common
|
||||
|
||||
import kotlinx.metadata.DeprecatedVisitor
|
||||
import kotlinx.metadata.KmModuleFragment
|
||||
import kotlinx.metadata.KmModuleFragmentVisitor
|
||||
import kotlinx.metadata.impl.accept
|
||||
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.metadata.builtins.readBuiltinsPackageFragment
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import java.io.ByteArrayInputStream
|
||||
|
||||
@DeprecatedVisitor
|
||||
class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.PackageFragment) {
|
||||
fun toKmModuleFragment(): KmModuleFragment =
|
||||
KmModuleFragment().apply(this::accept)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package kotlinx.metadata
|
||||
|
||||
import kotlinx.metadata.impl.extensions.*
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/**
|
||||
* Represents a Kotlin declaration container, such as a class or a package fragment.
|
||||
@@ -32,6 +33,7 @@ interface KmDeclarationContainer {
|
||||
/**
|
||||
* Represents a Kotlin class.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
||||
/**
|
||||
* Class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags.
|
||||
@@ -117,59 +119,75 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
||||
private val extensions: List<KmClassExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createClassExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visit(flags: Flags, name: ClassName) {
|
||||
this.flags = flags
|
||||
this.name = name
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitSupertype(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).addTo(supertypes)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor =
|
||||
KmFunction(flags, name).addTo(functions)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor =
|
||||
KmProperty(flags, name, getterFlags, setterFlags).addTo(properties)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeAlias(flags: Flags, name: String): KmTypeAliasVisitor =
|
||||
KmTypeAlias(flags, name).addTo(typeAliases)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitConstructor(flags: Flags): KmConstructorVisitor =
|
||||
KmConstructor(flags).addTo(constructors)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitCompanionObject(name: String) {
|
||||
this.companionObject = name
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitNestedClass(name: String) {
|
||||
nestedClasses.add(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitEnumEntry(name: String) {
|
||||
enumEntries.add(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitSealedSubclass(name: ClassName) {
|
||||
sealedSubclasses.add(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitInlineClassUnderlyingPropertyName(name: String) {
|
||||
inlineClassUnderlyingPropertyName = name
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitInlineClassUnderlyingType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { inlineClassUnderlyingType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContextReceivers
|
||||
override fun visitContextReceiverType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).addTo(contextReceiverTypes)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
||||
KmVersionRequirement().addTo(versionRequirements)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -178,6 +196,7 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this class
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
fun accept(visitor: KmClassVisitor) {
|
||||
visitor.visit(flags, name)
|
||||
@@ -203,6 +222,7 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
||||
/**
|
||||
* Represents a Kotlin package fragment, including single file facades and multi-file class parts.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
|
||||
/**
|
||||
* Functions in the package fragment.
|
||||
@@ -222,15 +242,19 @@ class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
|
||||
private val extensions: List<KmPackageExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPackageExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor =
|
||||
KmFunction(flags, name).addTo(functions)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor =
|
||||
KmProperty(flags, name, getterFlags, setterFlags).addTo(properties)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeAlias(flags: Flags, name: String): KmTypeAliasVisitor =
|
||||
KmTypeAlias(flags, name).addTo(typeAliases)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmPackageExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -239,6 +263,7 @@ class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this package fragment
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmPackageVisitor) {
|
||||
functions.forEach { visitor.visitFunction(it.flags, it.name)?.let(it::accept) }
|
||||
properties.forEach { visitor.visitProperty(it.flags, it.name, it.getterFlags, it.setterFlags)?.let(it::accept) }
|
||||
@@ -251,6 +276,7 @@ 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.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class) // TODO
|
||||
class KmModuleFragment : KmModuleFragmentVisitor() {
|
||||
|
||||
/**
|
||||
@@ -266,12 +292,15 @@ class KmModuleFragment : KmModuleFragmentVisitor() {
|
||||
private val extensions: List<KmModuleFragmentExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitPackage(): KmPackageVisitor? =
|
||||
KmPackage().also { pkg = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitClass(): KmClassVisitor? =
|
||||
KmClass().addTo(classes)
|
||||
|
||||
@@ -280,6 +309,7 @@ class KmModuleFragment : KmModuleFragmentVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in the module fragment.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmModuleFragmentVisitor) {
|
||||
pkg?.let { visitor.visitPackage()?.let(it::accept) }
|
||||
classes.forEach { visitor.visitClass()?.let(it::accept) }
|
||||
@@ -291,12 +321,14 @@ class KmModuleFragment : KmModuleFragmentVisitor() {
|
||||
/**
|
||||
* Represents a synthetic class generated for a Kotlin lambda.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmLambda : KmLambdaVisitor() {
|
||||
/**
|
||||
* Signature of the synthetic anonymous function, representing the lambda.
|
||||
*/
|
||||
lateinit var function: KmFunction
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor =
|
||||
KmFunction(flags, name).also { function = it }
|
||||
|
||||
@@ -305,6 +337,7 @@ class KmLambda : KmLambdaVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this lambda
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmLambdaVisitor) {
|
||||
visitor.visitFunction(function.flags, function.name)?.let(function::accept)
|
||||
visitor.visitEnd()
|
||||
@@ -316,6 +349,7 @@ class KmLambda : KmLambdaVisitor() {
|
||||
*
|
||||
* @property flags constructor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag and [Flag.Constructor] flags
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmConstructor(var flags: Flags) : KmConstructorVisitor() {
|
||||
/**
|
||||
* Value parameters of the constructor.
|
||||
@@ -330,12 +364,15 @@ class KmConstructor(var flags: Flags) : KmConstructorVisitor() {
|
||||
private val extensions: List<KmConstructorExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createConstructorExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor =
|
||||
KmValueParameter(flags, name).addTo(valueParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
||||
KmVersionRequirement().addTo(versionRequirements)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -344,6 +381,7 @@ class KmConstructor(var flags: Flags) : KmConstructorVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this class
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmConstructorVisitor) {
|
||||
valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) }
|
||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
||||
@@ -358,6 +396,7 @@ class KmConstructor(var flags: Flags) : KmConstructorVisitor() {
|
||||
* @property flags function flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Function] flags
|
||||
* @property name the name of the function
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmFunction(
|
||||
var flags: Flags,
|
||||
var name: String
|
||||
@@ -396,33 +435,43 @@ class KmFunction(
|
||||
/**
|
||||
* Contract of the function.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
var contract: KmContract? = null
|
||||
|
||||
private val extensions: List<KmFunctionExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createFunctionExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitReceiverParameterType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { receiverParameterType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContextReceivers
|
||||
override fun visitContextReceiverType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).addTo(contextReceiverTypes)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor =
|
||||
KmValueParameter(flags, name).addTo(valueParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitReturnType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { returnType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
||||
KmVersionRequirement().addTo(versionRequirements)
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
override fun visitContract(): KmContractVisitor =
|
||||
KmContract().also { contract = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -432,6 +481,7 @@ class KmFunction(
|
||||
* @param visitor the visitor which will visit data in this function
|
||||
*/
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmFunctionVisitor) {
|
||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
||||
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
|
||||
@@ -439,7 +489,7 @@ class KmFunction(
|
||||
valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) }
|
||||
visitor.visitReturnType(returnType.flags)?.let(returnType::accept)
|
||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
||||
contract?.let { visitor.visitContract()?.let(it::accept) }
|
||||
@OptIn(ExperimentalContracts::class) contract?.let { visitor.visitContract()?.let(it::accept) }
|
||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
||||
visitor.visitEnd()
|
||||
}
|
||||
@@ -455,6 +505,7 @@ class KmFunction(
|
||||
* @property setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
||||
* and [Flag.PropertyAccessor] flags
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmProperty(
|
||||
var flags: Flags,
|
||||
var name: String,
|
||||
@@ -495,25 +546,32 @@ class KmProperty(
|
||||
private val extensions: List<KmPropertyExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPropertyExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitReceiverParameterType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { receiverParameterType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContextReceivers
|
||||
override fun visitContextReceiverType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).addTo(contextReceiverTypes)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitSetterParameter(flags: Flags, name: String): KmValueParameterVisitor =
|
||||
KmValueParameter(flags, name).also { setterParameter = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitReturnType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { returnType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
||||
KmVersionRequirement().addTo(versionRequirements)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -523,6 +581,7 @@ class KmProperty(
|
||||
* @param visitor the visitor which will visit data in this property
|
||||
*/
|
||||
@OptIn(ExperimentalContextReceivers::class)
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmPropertyVisitor) {
|
||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
||||
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
|
||||
@@ -541,6 +600,7 @@ class KmProperty(
|
||||
* @property flags type alias flags, consisting of [Flag.HAS_ANNOTATIONS] and visibility flag
|
||||
* @property name the name of the type alias
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmTypeAlias(
|
||||
var flags: Flags,
|
||||
var name: String
|
||||
@@ -574,22 +634,28 @@ class KmTypeAlias(
|
||||
private val extensions: List<KmTypeAliasExtension> =
|
||||
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createTypeAliasExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitUnderlyingType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { underlyingType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExpandedType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { expandedType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
annotations.add(annotation)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmTypeAliasExtensionVisitor? =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
||||
KmVersionRequirement().addTo(versionRequirements)
|
||||
|
||||
@@ -598,6 +664,7 @@ class KmTypeAlias(
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this type alias
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmTypeAliasVisitor) {
|
||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
||||
visitor.visitUnderlyingType(underlyingType.flags)?.let(underlyingType::accept)
|
||||
@@ -615,6 +682,7 @@ class KmTypeAlias(
|
||||
* @property flags value parameter flags, consisting of [Flag.ValueParameter] flags
|
||||
* @property name the name of the value parameter
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmValueParameter(
|
||||
var flags: Flags,
|
||||
var name: String
|
||||
@@ -633,12 +701,15 @@ class KmValueParameter(
|
||||
private val extensions: List<KmValueParameterExtension> =
|
||||
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createValueParameterExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { type = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVarargElementType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { varargElementType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmValueParameterExtensionVisitor? =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -647,6 +718,7 @@ class KmValueParameter(
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this value parameter
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmValueParameterVisitor) {
|
||||
visitor.visitType(type.flags)?.let(type::accept)
|
||||
varargElementType?.let { visitor.visitVarargElementType(it.flags)?.let(it::accept) }
|
||||
@@ -664,6 +736,7 @@ class KmValueParameter(
|
||||
* the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
|
||||
* @property variance the declaration-site variance of the type parameter
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmTypeParameter(
|
||||
var flags: Flags,
|
||||
var name: String,
|
||||
@@ -678,9 +751,11 @@ class KmTypeParameter(
|
||||
private val extensions: List<KmTypeParameterExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeParameterExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitUpperBound(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).addTo(upperBounds)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor? =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -689,6 +764,7 @@ class KmTypeParameter(
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this type parameter
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmTypeParameterVisitor) {
|
||||
upperBounds.forEach { visitor.visitUpperBound(it.flags)?.let(it::accept) }
|
||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
||||
@@ -701,6 +777,7 @@ class KmTypeParameter(
|
||||
*
|
||||
* @property flags type flags, consisting of [Flag.Type] flags
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmType(var flags: Flags) : KmTypeVisitor() {
|
||||
/**
|
||||
* Classifier of the type.
|
||||
@@ -745,34 +822,43 @@ class KmType(var flags: Flags) : KmTypeVisitor() {
|
||||
private val extensions: List<KmTypeExtension> =
|
||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeExtension)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitClass(name: ClassName) {
|
||||
classifier = KmClassifier.Class(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeAlias(name: ClassName) {
|
||||
classifier = KmClassifier.TypeAlias(name)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitTypeParameter(id: Int) {
|
||||
classifier = KmClassifier.TypeParameter(id)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitArgument(flags: Flags, variance: KmVariance): KmTypeVisitor =
|
||||
KmType(flags).also { arguments.add(KmTypeProjection(variance, it)) }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitStarProjection() {
|
||||
arguments.add(KmTypeProjection.STAR)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitAbbreviatedType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { abbreviatedType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitOuterType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { outerType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitFlexibleTypeUpperBound(flags: Flags, typeFlexibilityId: String?): KmTypeVisitor =
|
||||
KmType(flags).also { flexibleTypeUpperBound = KmFlexibleTypeUpperBound(it, typeFlexibilityId) }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitExtensions(type: KmExtensionType): KmTypeExtension =
|
||||
extensions.singleOfType(type)
|
||||
|
||||
@@ -781,6 +867,7 @@ class KmType(var flags: Flags) : KmTypeVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this type
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmTypeVisitor) {
|
||||
when (val classifier = classifier) {
|
||||
is KmClassifier.Class -> visitor.visitClass(classifier.name)
|
||||
@@ -810,6 +897,7 @@ class KmType(var flags: Flags) : KmTypeVisitor() {
|
||||
* Version requirement is an internal feature of the Kotlin compiler and the standard Kotlin library,
|
||||
* enabled for example with the internal [kotlin.internal.RequireKotlin] annotation.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmVersionRequirement : KmVersionRequirementVisitor() {
|
||||
/**
|
||||
* Kind of the version that this declaration requires.
|
||||
@@ -836,6 +924,7 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
|
||||
*/
|
||||
lateinit var version: KmVersion
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) {
|
||||
this.kind = kind
|
||||
this.level = level
|
||||
@@ -843,6 +932,7 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
|
||||
this.message = message
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitVersion(major: Int, minor: Int, patch: Int) {
|
||||
this.version = KmVersion(major, minor, patch)
|
||||
}
|
||||
@@ -852,6 +942,7 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this version requirement
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmVersionRequirementVisitor) {
|
||||
visitor.visit(kind, level, errorCode, message)
|
||||
visitor.visitVersion(version.major, version.minor, version.patch)
|
||||
@@ -865,12 +956,15 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
|
||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||
* may change in a subsequent release.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmContract : KmContractVisitor() {
|
||||
/**
|
||||
* Effects of this contract.
|
||||
*/
|
||||
val effects: MutableList<KmEffect> = ArrayList(1)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor =
|
||||
KmEffect(type, invocationKind).addTo(effects)
|
||||
|
||||
@@ -879,6 +973,7 @@ class KmContract : KmContractVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this contract
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmContractVisitor) {
|
||||
effects.forEach { visitor.visitEffect(it.type, it.invocationKind)?.let(it::accept) }
|
||||
visitor.visitEnd()
|
||||
@@ -895,6 +990,8 @@ class KmContract : KmContractVisitor() {
|
||||
* @property invocationKind optional number of invocations of the lambda parameter of this function,
|
||||
* specified further in the effect expression
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmEffect(
|
||||
var type: KmEffectType,
|
||||
var invocationKind: KmEffectInvocationKind?
|
||||
@@ -910,9 +1007,11 @@ class KmEffect(
|
||||
*/
|
||||
var conclusion: KmEffectExpression? = null
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitConstructorArgument(): KmEffectExpressionVisitor =
|
||||
KmEffectExpression().addTo(constructorArguments)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitConclusionOfConditionalEffect(): KmEffectExpressionVisitor =
|
||||
KmEffectExpression().also { conclusion = it }
|
||||
|
||||
@@ -921,6 +1020,7 @@ class KmEffect(
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this effect
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmEffectVisitor) {
|
||||
constructorArguments.forEach { visitor.visitConstructorArgument()?.let(it::accept) }
|
||||
conclusion?.let { visitor.visitConclusionOfConditionalEffect()?.let(it::accept) }
|
||||
@@ -934,6 +1034,8 @@ class KmEffect(
|
||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||
* may change in a subsequent release.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class KmEffectExpression : KmEffectExpressionVisitor() {
|
||||
/**
|
||||
* Effect expression flags, consisting of [Flag.EffectExpression] flags.
|
||||
@@ -968,21 +1070,26 @@ class KmEffectExpression : KmEffectExpressionVisitor() {
|
||||
*/
|
||||
val orArguments: MutableList<KmEffectExpression> = ArrayList(0)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visit(flags: Flags, parameterIndex: Int?) {
|
||||
this.flags = flags
|
||||
this.parameterIndex = parameterIndex
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitConstantValue(value: Any?) {
|
||||
constantValue = KmConstantValue(value)
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitIsInstanceType(flags: Flags): KmTypeVisitor =
|
||||
KmType(flags).also { isInstanceType = it }
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitAndArgument(): KmEffectExpressionVisitor =
|
||||
KmEffectExpression().addTo(andArguments)
|
||||
|
||||
@DeprecatedVisitor
|
||||
override fun visitOrArgument(): KmEffectExpressionVisitor =
|
||||
KmEffectExpression().addTo(orArguments)
|
||||
|
||||
@@ -991,6 +1098,7 @@ class KmEffectExpression : KmEffectExpressionVisitor() {
|
||||
*
|
||||
* @param visitor the visitor which will visit data in this effect expression
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
fun accept(visitor: KmEffectExpressionVisitor) {
|
||||
visitor.visit(flags, parameterIndex)
|
||||
constantValue?.let { visitor.visitConstantValue(it.value) }
|
||||
|
||||
@@ -17,7 +17,7 @@ package kotlinx.metadata
|
||||
* klass.functions.assignFrom(...)
|
||||
*
|
||||
*/
|
||||
fun <T> MutableList<T>.assignFrom(collection: Collection<T>) {
|
||||
internal fun <T> MutableList<T>.assignFrom(collection: Collection<T>) {
|
||||
clear()
|
||||
addAll(collection)
|
||||
}
|
||||
|
||||
@@ -5,9 +5,15 @@
|
||||
|
||||
package kotlinx.metadata
|
||||
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
|
||||
@RequiresOptIn("Visitor API is deprecated. Please do not use", RequiresOptIn.Level.ERROR)
|
||||
annotation class DeprecatedVisitor
|
||||
|
||||
/**
|
||||
* A visitor containing the common code to visit Kotlin declaration containers, such as classes and package fragments.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected open val delegate: KmDeclarationContainerVisitor? = null) {
|
||||
/**
|
||||
* Visits a function in the container.
|
||||
@@ -54,6 +60,7 @@ abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected
|
||||
* When using this class, [visit] must be called first, followed by zero or more [visitTypeParameter] calls, followed by zero or more calls
|
||||
* to other visit* methods, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor? = null) : KmDeclarationContainerVisitor(delegate) {
|
||||
override val delegate: KmClassVisitor?
|
||||
get() = super.delegate as KmClassVisitor?
|
||||
@@ -185,6 +192,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
|
||||
*
|
||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVisitor? = null) : KmDeclarationContainerVisitor(delegate) {
|
||||
override val delegate: KmPackageVisitor?
|
||||
get() = super.delegate as KmPackageVisitor?
|
||||
@@ -211,6 +219,7 @@ abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVis
|
||||
*
|
||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) {
|
||||
|
||||
/**
|
||||
@@ -246,6 +255,7 @@ abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val del
|
||||
*
|
||||
* When using this class, [visitFunction] must be called first, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmLambdaVisitor @JvmOverloads constructor(private val delegate: KmLambdaVisitor? = null) {
|
||||
/**
|
||||
* Visits the signature of a synthetic anonymous function, representing the lambda.
|
||||
@@ -269,6 +279,7 @@ abstract class KmLambdaVisitor @JvmOverloads constructor(private val delegate: K
|
||||
*
|
||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmConstructorVisitor @JvmOverloads constructor(private val delegate: KmConstructorVisitor? = null) {
|
||||
/**
|
||||
* Visits a value parameter of the constructor.
|
||||
@@ -307,6 +318,7 @@ abstract class KmConstructorVisitor @JvmOverloads constructor(private val delega
|
||||
* When using this class, zero or more calls to [visitTypeParameter] must be done first, followed by zero or more calls
|
||||
* to other visit* methods, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate: KmFunctionVisitor? = null) {
|
||||
/**
|
||||
* Visits a type parameter of the function.
|
||||
@@ -363,6 +375,7 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
|
||||
/**
|
||||
* Visits the contract of the function.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
open fun visitContract(): KmContractVisitor? =
|
||||
delegate?.visitContract()
|
||||
|
||||
@@ -388,6 +401,7 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
|
||||
* When using this class, zero or more calls to [visitTypeParameter] must be done first, followed by zero or more calls
|
||||
* to other visit* methods, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate: KmPropertyVisitor? = null) {
|
||||
/**
|
||||
* Visits a type parameter of the property.
|
||||
@@ -463,6 +477,7 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
|
||||
* When using this class, zero or more calls to [visitTypeParameter] must be done first, followed by zero or more calls
|
||||
* to other visit* methods, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate: KmTypeAliasVisitor? = null) {
|
||||
/**
|
||||
* Visits a type parameter of the type alias.
|
||||
@@ -530,6 +545,7 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
|
||||
* When using this class, either [visitType] or [visitVarargElementType] must be called first (depending on whether the value parameter
|
||||
* is `vararg` or not), followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmValueParameterVisitor @JvmOverloads constructor(private val delegate: KmValueParameterVisitor? = null) {
|
||||
/**
|
||||
* Visits the type of the value parameter, if this is **not** a `vararg` parameter.
|
||||
@@ -568,6 +584,7 @@ abstract class KmValueParameterVisitor @JvmOverloads constructor(private val del
|
||||
*
|
||||
* When using this class, zero or more [visitUpperBound] calls must be done first, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val delegate: KmTypeParameterVisitor? = null) {
|
||||
/**
|
||||
* Visits the upper bound of the type parameter.
|
||||
@@ -604,6 +621,7 @@ abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val dele
|
||||
*
|
||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmTypeVisitor? = null) {
|
||||
/**
|
||||
* Visits the name of the class, if this type's classifier is a class.
|
||||
@@ -715,6 +733,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
|
||||
*
|
||||
* When using this class, [visit] must be called first, followed by [visitVersion], followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
abstract class KmVersionRequirementVisitor @JvmOverloads constructor(private val delegate: KmVersionRequirementVisitor? = null) {
|
||||
/**
|
||||
* Visits the description of this version requirement.
|
||||
@@ -756,6 +775,8 @@ abstract class KmVersionRequirementVisitor @JvmOverloads constructor(private val
|
||||
*
|
||||
* When using this class, zero or more calls to [visitEffect] must be done first, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
abstract class KmContractVisitor @JvmOverloads constructor(private val delegate: KmContractVisitor? = null) {
|
||||
/**
|
||||
* Visits an effect of this contract.
|
||||
@@ -784,6 +805,8 @@ abstract class KmContractVisitor @JvmOverloads constructor(private val delegate:
|
||||
* When using this class, zero or more calls to [visitConstructorArgument] or [visitConclusionOfConditionalEffect] must be done first,
|
||||
* followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
abstract class KmEffectVisitor @JvmOverloads constructor(private val delegate: KmEffectVisitor? = null) {
|
||||
/**
|
||||
* Visits the optional argument of the effect constructor, i.e. the constant value for the [KmEffectType.RETURNS_CONSTANT] effect,
|
||||
@@ -815,6 +838,8 @@ abstract class KmEffectVisitor @JvmOverloads constructor(private val delegate: K
|
||||
*
|
||||
* When using this class, [visit] must be called first, followed by zero or more calls to other visit* methods, followed by [visitEnd].
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
@ExperimentalContracts
|
||||
abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val delegate: KmEffectExpressionVisitor? = null) {
|
||||
/**
|
||||
* Visits the basic information of the effect expression.
|
||||
@@ -893,6 +918,7 @@ enum class KmVariance {
|
||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||
* may change in a subsequent release.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
enum class KmEffectType {
|
||||
RETURNS_CONSTANT,
|
||||
CALLS,
|
||||
@@ -905,6 +931,7 @@ enum class KmEffectType {
|
||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||
* may change in a subsequent release.
|
||||
*/
|
||||
@ExperimentalContracts
|
||||
enum class KmEffectInvocationKind {
|
||||
AT_MOST_ONCE,
|
||||
EXACTLY_ONCE,
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.kotlinp
|
||||
|
||||
import kotlinx.metadata.DeprecatedVisitor
|
||||
import kotlinx.metadata.InconsistentKotlinMetadataException
|
||||
import kotlinx.metadata.jvm.KotlinClassMetadata
|
||||
import kotlinx.metadata.jvm.KotlinModuleMetadata
|
||||
import java.io.File
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
class Kotlinp(private val settings: KotlinpSettings) {
|
||||
internal fun renderClassFile(classFile: KotlinClassMetadata?): String =
|
||||
when (classFile) {
|
||||
|
||||
@@ -718,6 +718,7 @@ interface AbstractPrinter<in T : KotlinClassMetadata> {
|
||||
fun print(klass: T): String
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), AbstractPrinter<KotlinClassMetadata.Class> {
|
||||
private val sb = StringBuilder()
|
||||
internal val result = StringBuilder()
|
||||
@@ -863,6 +864,7 @@ class ClassPrinter(private val settings: KotlinpSettings) : KmClassVisitor(), Ab
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
abstract class PackagePrinter(private val settings: KotlinpSettings) : KmPackageVisitor() {
|
||||
internal val sb = StringBuilder().apply {
|
||||
appendLine("package {")
|
||||
@@ -899,7 +901,7 @@ abstract class PackagePrinter(private val settings: KotlinpSettings) : KmPackage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class FileFacadePrinter(settings: KotlinpSettings) : PackagePrinter(settings), AbstractPrinter<KotlinClassMetadata.FileFacade> {
|
||||
override fun print(klass: KotlinClassMetadata.FileFacade): String {
|
||||
klass.accept(this)
|
||||
@@ -907,6 +909,7 @@ class FileFacadePrinter(settings: KotlinpSettings) : PackagePrinter(settings), A
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class LambdaPrinter(private val settings: KotlinpSettings) : KmLambdaVisitor(), AbstractPrinter<KotlinClassMetadata.SyntheticClass> {
|
||||
private val sb = StringBuilder().apply {
|
||||
appendLine("lambda {")
|
||||
@@ -925,6 +928,7 @@ class LambdaPrinter(private val settings: KotlinpSettings) : KmLambdaVisitor(),
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class MultiFileClassPartPrinter(
|
||||
settings: KotlinpSettings
|
||||
) : PackagePrinter(settings), AbstractPrinter<KotlinClassMetadata.MultiFileClassPart> {
|
||||
@@ -946,6 +950,7 @@ class MultiFileClassFacadePrinter : AbstractPrinter<KotlinClassMetadata.MultiFil
|
||||
}
|
||||
}
|
||||
|
||||
@DeprecatedVisitor
|
||||
class ModuleFilePrinter(private val settings: KotlinpSettings) : KmModuleVisitor() {
|
||||
private val optionalAnnotations = mutableListOf<ClassPrinter>()
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.kotlinp.test
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import junit.framework.TestCase.assertEquals
|
||||
import kotlinx.metadata.DeprecatedVisitor
|
||||
import kotlinx.metadata.jvm.KotlinClassMetadata
|
||||
import kotlinx.metadata.jvm.KotlinModuleMetadata
|
||||
import org.jetbrains.kotlin.checkers.setupLanguageVersionSettingsForCompilerTests
|
||||
@@ -25,6 +26,7 @@ import org.jetbrains.kotlin.test.util.KtTestUtil
|
||||
import java.io.File
|
||||
import kotlin.test.fail
|
||||
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun compileAndPrintAllFiles(file: File, disposable: Disposable, tmpdir: File, compareWithTxt: Boolean, readWriteAndCompare: Boolean) {
|
||||
val main = StringBuilder()
|
||||
val afterVisitors = StringBuilder()
|
||||
@@ -97,6 +99,8 @@ private fun StringBuilder.appendFileName(file: File) {
|
||||
// Reads the class file and writes it back with *Writer visitors.
|
||||
// The resulting class file should be the same from the point of view of any metadata reader, including kotlinp
|
||||
// (the exact bytes may differ though, because there are multiple ways to encode the same metadata)
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
@DeprecatedVisitor // TODO: not sure this test is needed at all now
|
||||
private fun transformClassFileWithReadWriteVisitors(classFile: KotlinClassMetadata): KotlinClassMetadata =
|
||||
when (classFile) {
|
||||
is KotlinClassMetadata.Class -> KotlinClassMetadata.Class.Writer().apply(classFile::accept).write()
|
||||
@@ -118,18 +122,20 @@ private fun transformClassFileWithReadWriteVisitors(classFile: KotlinClassMetada
|
||||
private fun transformClassFileWithNodes(classFile: KotlinClassMetadata): KotlinClassMetadata =
|
||||
when (classFile) {
|
||||
is KotlinClassMetadata.Class ->
|
||||
KotlinClassMetadata.Class.Writer().apply(classFile.toKmClass()::accept).write()
|
||||
KotlinClassMetadata.writeClass(classFile.toKmClass())
|
||||
is KotlinClassMetadata.FileFacade ->
|
||||
KotlinClassMetadata.FileFacade.Writer().apply(classFile.toKmPackage()::accept).write()
|
||||
KotlinClassMetadata.writeFileFacade(classFile.toKmPackage())
|
||||
is KotlinClassMetadata.SyntheticClass ->
|
||||
KotlinClassMetadata.SyntheticClass.Writer().apply { classFile.toKmLambda()?.accept(this) }.write()
|
||||
classFile.toKmLambda()?.let { KotlinClassMetadata.writeLambda(it) } ?: KotlinClassMetadata.writeSyntheticClass()
|
||||
is KotlinClassMetadata.MultiFileClassPart ->
|
||||
KotlinClassMetadata.MultiFileClassPart.Writer().apply(classFile.toKmPackage()::accept).write(classFile.facadeClassName)
|
||||
KotlinClassMetadata.writeMultiFileClassPart(classFile.toKmPackage(), classFile.facadeClassName)
|
||||
else -> classFile
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
@DeprecatedVisitor
|
||||
private fun transformModuleFileWithReadWriteVisitors(moduleFile: KotlinModuleMetadata): KotlinModuleMetadata =
|
||||
KotlinModuleMetadata.Writer().apply(moduleFile::accept).write()
|
||||
|
||||
private fun transformModuleFileWithNodes(moduleFile: KotlinModuleMetadata): KotlinModuleMetadata =
|
||||
KotlinModuleMetadata.Writer().apply(moduleFile.toKmModule()::accept).write()
|
||||
KotlinModuleMetadata.write(moduleFile.toKmModule())
|
||||
|
||||
+4
@@ -23,6 +23,7 @@ import kotlin.Unit
|
||||
import kotlin.apply
|
||||
import kotlin.arrayOf
|
||||
import kotlin.check
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.error
|
||||
import kotlin.let
|
||||
import kotlin.reflect.KProperty
|
||||
@@ -493,6 +494,7 @@ class MetadataDeclarationsComparator private constructor(private val config: Con
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
private fun compareEffectExpressionLists(
|
||||
containerContext: Context,
|
||||
effectExpressionListA: List<KmEffectExpression>,
|
||||
@@ -611,6 +613,7 @@ class MetadataDeclarationsComparator private constructor(private val config: Con
|
||||
compareNullableValues(propertyContext, propertyA.compileTimeValue, propertyB.compileTimeValue, EntityKind.CompileTimeValue)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
@Suppress("DuplicatedCode")
|
||||
private fun compareFunctions(
|
||||
functionContext: Context,
|
||||
@@ -791,6 +794,7 @@ class MetadataDeclarationsComparator private constructor(private val config: Con
|
||||
compareTypeLists(typeParameterContext, typeParameterA.upperBounds, typeParameterB.upperBounds, TypeKind.UPPER_BOUND)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
private fun compareEffectExpressions(
|
||||
effectExpressionContext: Context,
|
||||
effectExpressionA: KmEffectExpression,
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
* Wrap the visitor for a Kotlin Metadata annotation to strip out private and local
|
||||
* functions, properties, and type aliases as well as local delegated properties.
|
||||
*/
|
||||
@OptIn(DeprecatedVisitor::class)
|
||||
fun abiMetadataProcessor(annotationVisitor: AnnotationVisitor): AnnotationVisitor =
|
||||
kotlinClassHeaderVisitor { header ->
|
||||
// kotlinx-metadata only supports writing Kotlin metadata of version >= 1.4, so we need to
|
||||
@@ -136,6 +137,7 @@ private fun AnnotationVisitor.visitKotlinMetadata(header: KotlinClassHeader) {
|
||||
* Class metadata adapter which removes private functions, properties, type aliases,
|
||||
* and local delegated properties.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
private class AbiKmClassVisitor(delegate: KmClassVisitor) : KmClassVisitor(delegate) {
|
||||
override fun visitConstructor(flags: Flags): KmConstructorVisitor? {
|
||||
if (!isPrivateDeclaration(flags))
|
||||
@@ -172,6 +174,7 @@ private class AbiKmClassVisitor(delegate: KmClassVisitor) : KmClassVisitor(deleg
|
||||
* Class metadata adapter which removes private functions, properties, type aliases,
|
||||
* and local delegated properties.
|
||||
*/
|
||||
@DeprecatedVisitor
|
||||
private class AbiKmPackageVisitor(delegate: KmPackageVisitor) : KmPackageVisitor(delegate) {
|
||||
override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor? {
|
||||
if (!isPrivateDeclaration(flags))
|
||||
|
||||
Reference in New Issue
Block a user