Enable explicit API mode for kotlinx-metadata(-jvm)

Most of the declarations are made public as-is, except for some reader implementation details
and MetadataExtensions.INSTANCES.

Also added missing delegation in KmDeclarationContainerVisitor.visitExtensions

#KT-59182 Fixed
This commit is contained in:
Leonid Startsev
2023-07-04 14:33:02 +02:00
committed by Space Team
parent 6da3ecceab
commit 20368a9e40
30 changed files with 669 additions and 659 deletions
@@ -15,3 +15,7 @@ dependencies {
compileOnly(project(":core:metadata")) compileOnly(project(":core:metadata"))
compileOnly(protobufLite()) compileOnly(protobufLite())
} }
kotlin {
explicitApi()
}
@@ -50,6 +50,10 @@ dependencies {
testImplementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } testImplementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
} }
kotlin {
explicitApi()
}
if (deployVersion != null) { if (deployVersion != null) {
publish() publish()
} }
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags as JF
* *
* Returns `false` if the property is not declared in a companion object of some interface. * Returns `false` if the property is not declared in a companion object of some interface.
*/ */
var KmProperty.isMovedFromInterfaceCompanion by BooleanFlagDelegate(KmProperty::jvmFlags, booleanFlag(JF.IS_MOVED_FROM_INTERFACE_COMPANION)) public var KmProperty.isMovedFromInterfaceCompanion: Boolean by BooleanFlagDelegate(KmProperty::jvmFlags, booleanFlag(JF.IS_MOVED_FROM_INTERFACE_COMPANION))
/** /**
* Applicable to an interface compiled with -Xjvm-default=all or all-compatibility. * Applicable to an interface compiled with -Xjvm-default=all or all-compatibility.
@@ -37,7 +37,7 @@ var KmProperty.isMovedFromInterfaceCompanion by BooleanFlagDelegate(KmProperty::
* @see JvmDefaultWithCompatibility * @see JvmDefaultWithCompatibility
* @see JvmDefaultWithoutCompatibility * @see JvmDefaultWithoutCompatibility
*/ */
var KmClass.hasMethodBodiesInInterface by BooleanFlagDelegate(KmClass::jvmFlags, booleanFlag(JF.IS_COMPILED_IN_JVM_DEFAULT_MODE)) public var KmClass.hasMethodBodiesInInterface: Boolean by BooleanFlagDelegate(KmClass::jvmFlags, booleanFlag(JF.IS_COMPILED_IN_JVM_DEFAULT_MODE))
/** /**
* Indicates if an interface was compiled with -Xjvm-default=all-compatibility. * Indicates if an interface was compiled with -Xjvm-default=all-compatibility.
@@ -53,7 +53,7 @@ var KmClass.hasMethodBodiesInInterface by BooleanFlagDelegate(KmClass::jvmFlags,
* @see JvmDefaultWithCompatibility * @see JvmDefaultWithCompatibility
* @see JvmDefaultWithoutCompatibility * @see JvmDefaultWithoutCompatibility
*/ */
var KmClass.isCompiledInCompatibilityMode by BooleanFlagDelegate(KmClass::jvmFlags, booleanFlag(JF.IS_COMPILED_IN_COMPATIBILITY_MODE)) public var KmClass.isCompiledInCompatibilityMode: Boolean by BooleanFlagDelegate(KmClass::jvmFlags, booleanFlag(JF.IS_COMPILED_IN_COMPATIBILITY_MODE))
private fun booleanFlag(f: Flags.BooleanFlagField): FlagImpl = private fun booleanFlag(f: Flags.BooleanFlagField): FlagImpl =
FlagImpl(f.offset, f.bitWidth, 1) FlagImpl(f.offset, f.bitWidth, 1)
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
* A visitor containing the common code to visit JVM extensions for Kotlin declaration containers, such as classes and package fragments. * A visitor containing the common code to visit JVM extensions for Kotlin declaration containers, such as classes and package fragments.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor( public abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor(
protected open val delegate: JvmDeclarationContainerExtensionVisitor? = null protected open val delegate: JvmDeclarationContainerExtensionVisitor? = null
) : KmDeclarationContainerExtensionVisitor { ) : KmDeclarationContainerExtensionVisitor {
/** /**
@@ -32,13 +32,13 @@ abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor
* @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag * @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
* and [Flag.PropertyAccessor] flags * and [Flag.PropertyAccessor] flags
*/ */
open fun visitLocalDelegatedProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor? = public open fun visitLocalDelegatedProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor? =
delegate?.visitLocalDelegatedProperty(flags, name, getterFlags, setterFlags) delegate?.visitLocalDelegatedProperty(flags, name, getterFlags, setterFlags)
/** /**
* Visits the name of the module where this container is declared. * Visits the name of the module where this container is declared.
*/ */
open fun visitModuleName(name: String) { public open fun visitModuleName(name: String) {
delegate?.visitModuleName(name) delegate?.visitModuleName(name)
} }
} }
@@ -47,7 +47,7 @@ abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor
* A visitor to visit JVM extensions for a class. * A visitor to visit JVM extensions for a class.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmClassExtensionVisitor @JvmOverloads constructor( public open class JvmClassExtensionVisitor @JvmOverloads constructor(
delegate: JvmClassExtensionVisitor? = null delegate: JvmClassExtensionVisitor? = null
) : KmClassExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) { ) : KmClassExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) {
override val delegate: JvmClassExtensionVisitor? override val delegate: JvmClassExtensionVisitor?
@@ -60,32 +60,32 @@ open class JvmClassExtensionVisitor @JvmOverloads constructor(
* Visits the JVM internal name of the original class this anonymous object is copied from. This method is called for * Visits the JVM internal name of the original class this anonymous object is copied from. This method is called for
* anonymous objects copied from bodies of inline functions to the use site by the Kotlin compiler. * anonymous objects copied from bodies of inline functions to the use site by the Kotlin compiler.
*/ */
open fun visitAnonymousObjectOriginName(internalName: String) { public open fun visitAnonymousObjectOriginName(internalName: String) {
delegate?.visitAnonymousObjectOriginName(internalName) delegate?.visitAnonymousObjectOriginName(internalName)
} }
/** /**
* Visits the JVM-specific flags of the class, consisting of [JvmFlag.Class] flags. * Visits the JVM-specific flags of the class, consisting of [JvmFlag.Class] flags.
*/ */
open fun visitJvmFlags(flags: Int) { public open fun visitJvmFlags(flags: Int) {
delegate?.visitJvmFlags(flags) delegate?.visitJvmFlags(flags)
} }
/** /**
* Visits the end of JVM extensions for the class. * Visits the end of JVM extensions for the class.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmClassExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmClassExtensionVisitor::class)
} }
} }
@@ -93,7 +93,7 @@ open class JvmClassExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a package fragment. * A visitor to visit JVM extensions for a package fragment.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmPackageExtensionVisitor @JvmOverloads constructor( public open class JvmPackageExtensionVisitor @JvmOverloads constructor(
delegate: JvmPackageExtensionVisitor? = null delegate: JvmPackageExtensionVisitor? = null
) : KmPackageExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) { ) : KmPackageExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) {
override val delegate: JvmPackageExtensionVisitor? override val delegate: JvmPackageExtensionVisitor?
@@ -105,18 +105,18 @@ open class JvmPackageExtensionVisitor @JvmOverloads constructor(
/** /**
* Visits the end of JVM extensions for the package fragment. * Visits the end of JVM extensions for the package fragment.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmPackageExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmPackageExtensionVisitor::class)
} }
} }
@@ -124,7 +124,7 @@ open class JvmPackageExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a function. * A visitor to visit JVM extensions for a function.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmFunctionExtensionVisitor @JvmOverloads constructor( public open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
private val delegate: JvmFunctionExtensionVisitor? = null private val delegate: JvmFunctionExtensionVisitor? = null
) : KmFunctionExtensionVisitor { ) : KmFunctionExtensionVisitor {
final override val type: KmExtensionType final override val type: KmExtensionType
@@ -137,7 +137,7 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
* *
* @param signature the signature of the function * @param signature the signature of the function
*/ */
open fun visit(signature: JvmMethodSignature?) { public open fun visit(signature: JvmMethodSignature?) {
delegate?.visit(signature) delegate?.visit(signature)
} }
@@ -145,25 +145,25 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
* Visits the JVM internal name of the original class the lambda class for this function is copied from. * Visits the JVM internal name of the original class the lambda class for this function is copied from.
* This information is present for lambdas copied from bodies of inline functions to the use site by the Kotlin compiler. * This information is present for lambdas copied from bodies of inline functions to the use site by the Kotlin compiler.
*/ */
open fun visitLambdaClassOriginName(internalName: String) { public open fun visitLambdaClassOriginName(internalName: String) {
delegate?.visitLambdaClassOriginName(internalName) delegate?.visitLambdaClassOriginName(internalName)
} }
/** /**
* Visits the end of JVM extensions for the function. * Visits the end of JVM extensions for the function.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmFunctionExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmFunctionExtensionVisitor::class)
} }
} }
@@ -171,7 +171,7 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a property. * A visitor to visit JVM extensions for a property.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmPropertyExtensionVisitor @JvmOverloads constructor( public open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
private val delegate: JvmPropertyExtensionVisitor? = null private val delegate: JvmPropertyExtensionVisitor? = null
) : KmPropertyExtensionVisitor { ) : KmPropertyExtensionVisitor {
final override val type: KmExtensionType final override val type: KmExtensionType
@@ -188,7 +188,7 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
* @param setterSignature the signature of the property setter, or `null` if this property has no setter or its signature is unknown. * @param setterSignature the signature of the property setter, or `null` if this property has no setter or its signature is unknown.
* Example: `JvmMethodSignature("setX", "(Ljava/lang/Object;)V")` * Example: `JvmMethodSignature("setX", "(Ljava/lang/Object;)V")`
*/ */
open fun visit( public open fun visit(
jvmFlags: Int, jvmFlags: Int,
fieldSignature: JvmFieldSignature?, fieldSignature: JvmFieldSignature?,
getterSignature: JvmMethodSignature?, getterSignature: JvmMethodSignature?,
@@ -205,7 +205,7 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
level = DeprecationLevel.ERROR, level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("visit(flagsOf(), fieldSignature, getterSignature, setterSignature)", "kotlinx.metadata.flagsOf") replaceWith = ReplaceWith("visit(flagsOf(), fieldSignature, getterSignature, setterSignature)", "kotlinx.metadata.flagsOf")
) )
open fun visit( public open fun visit(
fieldSignature: JvmFieldSignature?, fieldSignature: JvmFieldSignature?,
getterSignature: JvmMethodSignature?, getterSignature: JvmMethodSignature?,
setterSignature: JvmMethodSignature? setterSignature: JvmMethodSignature?
@@ -221,7 +221,7 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
* *
* @param signature the signature of the synthetic method * @param signature the signature of the synthetic method
*/ */
open fun visitSyntheticMethodForAnnotations(signature: JvmMethodSignature?) { public open fun visitSyntheticMethodForAnnotations(signature: JvmMethodSignature?) {
delegate?.visitSyntheticMethodForAnnotations(signature) delegate?.visitSyntheticMethodForAnnotations(signature)
} }
@@ -234,25 +234,25 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
* *
* @param signature the signature of the synthetic method * @param signature the signature of the synthetic method
*/ */
open fun visitSyntheticMethodForDelegate(signature: JvmMethodSignature?) { public open fun visitSyntheticMethodForDelegate(signature: JvmMethodSignature?) {
delegate?.visitSyntheticMethodForDelegate(signature) delegate?.visitSyntheticMethodForDelegate(signature)
} }
/** /**
* Visits the end of JVM extensions for the property. * Visits the end of JVM extensions for the property.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmPropertyExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmPropertyExtensionVisitor::class)
} }
} }
@@ -260,7 +260,7 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a constructor. * A visitor to visit JVM extensions for a constructor.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmConstructorExtensionVisitor @JvmOverloads constructor( public open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
private val delegate: JvmConstructorExtensionVisitor? = null private val delegate: JvmConstructorExtensionVisitor? = null
) : KmConstructorExtensionVisitor { ) : KmConstructorExtensionVisitor {
final override val type: KmExtensionType final override val type: KmExtensionType
@@ -273,18 +273,18 @@ open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
* *
* @param signature the signature of the constructor * @param signature the signature of the constructor
*/ */
open fun visit(signature: JvmMethodSignature?) { public open fun visit(signature: JvmMethodSignature?) {
delegate?.visit(signature) delegate?.visit(signature)
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmConstructorExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmConstructorExtensionVisitor::class)
} }
} }
@@ -292,7 +292,7 @@ open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a type parameter. * A visitor to visit JVM extensions for a type parameter.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor( public open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor(
private val delegate: JvmTypeParameterExtensionVisitor? = null private val delegate: JvmTypeParameterExtensionVisitor? = null
) : KmTypeParameterExtensionVisitor { ) : KmTypeParameterExtensionVisitor {
final override val type: KmExtensionType final override val type: KmExtensionType
@@ -303,25 +303,25 @@ open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor(
* *
* @param annotation the annotation on the type parameter * @param annotation the annotation on the type parameter
*/ */
open fun visitAnnotation(annotation: KmAnnotation) { public open fun visitAnnotation(annotation: KmAnnotation) {
delegate?.visitAnnotation(annotation) delegate?.visitAnnotation(annotation)
} }
/** /**
* Visits the end of JVM extensions for the type parameter. * Visits the end of JVM extensions for the type parameter.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmTypeParameterExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmTypeParameterExtensionVisitor::class)
} }
} }
@@ -329,7 +329,7 @@ open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor(
* A visitor to visit JVM extensions for a type. * A visitor to visit JVM extensions for a type.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
open class JvmTypeExtensionVisitor @JvmOverloads constructor( public open class JvmTypeExtensionVisitor @JvmOverloads constructor(
private val delegate: JvmTypeExtensionVisitor? = null private val delegate: JvmTypeExtensionVisitor? = null
) : KmTypeExtensionVisitor { ) : KmTypeExtensionVisitor {
final override val type: KmExtensionType final override val type: KmExtensionType
@@ -340,7 +340,7 @@ open class JvmTypeExtensionVisitor @JvmOverloads constructor(
* *
* @param isRaw whether the type is seen as a raw type in Java * @param isRaw whether the type is seen as a raw type in Java
*/ */
open fun visit(isRaw: Boolean) { public open fun visit(isRaw: Boolean) {
delegate?.visit(isRaw) delegate?.visit(isRaw)
} }
@@ -349,31 +349,31 @@ open class JvmTypeExtensionVisitor @JvmOverloads constructor(
* *
* @param annotation the annotation on the type * @param annotation the annotation on the type
*/ */
open fun visitAnnotation(annotation: KmAnnotation) { public open fun visitAnnotation(annotation: KmAnnotation) {
delegate?.visitAnnotation(annotation) delegate?.visitAnnotation(annotation)
} }
/** /**
* Visits the end of JVM extensions for the type parameter. * Visits the end of JVM extensions for the type parameter.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
companion object { public companion object {
/** /**
* The type of this extension visitor. * The type of this extension visitor.
* *
* @see KmExtensionType * @see KmExtensionType
*/ */
@JvmField @JvmField
val TYPE: KmExtensionType = KmExtensionType(JvmTypeExtensionVisitor::class) public val TYPE: KmExtensionType = KmExtensionType(JvmTypeExtensionVisitor::class)
/** /**
* The type flexibility id, signifying that the visited type is a JVM platform type. * The type flexibility id, signifying that the visited type is a JVM platform type.
* *
* @see KmTypeVisitor.visitFlexibleTypeUpperBound * @see KmTypeVisitor.visitFlexibleTypeUpperBound
*/ */
const val PLATFORM_TYPE_ID = JvmProtoBufUtil.PLATFORM_TYPE_ID // TODO: move out of deprecated visitor public const val PLATFORM_TYPE_ID: String = JvmProtoBufUtil.PLATFORM_TYPE_ID // TODO: move out of deprecated visitor
} }
} }
@@ -20,13 +20,13 @@ import kotlinx.metadata.jvm.internal.jvm
* If an incorrect index is used, either the `KProperty<*>` object passed to delegate methods will point to the wrong property * If an incorrect index is used, either the `KProperty<*>` object passed to delegate methods will point to the wrong property
* at runtime, or an exception will be thrown. * at runtime, or an exception will be thrown.
*/ */
val KmClass.localDelegatedProperties: MutableList<KmProperty> public val KmClass.localDelegatedProperties: MutableList<KmProperty>
get() = jvm.localDelegatedProperties get() = jvm.localDelegatedProperties
/** /**
* Name of the module where this class is declared. * Name of the module where this class is declared.
*/ */
var KmClass.moduleName: String? public var KmClass.moduleName: String?
get() = jvm.moduleName get() = jvm.moduleName
set(value) { set(value) {
jvm.moduleName = value jvm.moduleName = value
@@ -36,7 +36,7 @@ var KmClass.moduleName: String?
* JVM internal name of the original class this anonymous object is copied from. This value is set for anonymous objects * JVM internal name of the original class this anonymous object is copied from. This value is set for anonymous objects
* copied from bodies of inline functions to the use site by the Kotlin compiler. * copied from bodies of inline functions to the use site by the Kotlin compiler.
*/ */
var KmClass.anonymousObjectOriginName: String? public var KmClass.anonymousObjectOriginName: String?
get() = jvm.anonymousObjectOriginName get() = jvm.anonymousObjectOriginName
set(value) { set(value) {
jvm.anonymousObjectOriginName = value jvm.anonymousObjectOriginName = value
@@ -46,7 +46,7 @@ var KmClass.anonymousObjectOriginName: String?
* JVM-specific flags of the class, consisting of [JvmFlag.Class] flags. * JVM-specific flags of the class, consisting of [JvmFlag.Class] flags.
*/ */
@Deprecated("Flag API is deprecated. Please use corresponding member extensions on KmClass, such as KmClass.hasMethodBodiesInInterface") @Deprecated("Flag API is deprecated. Please use corresponding member extensions on KmClass, such as KmClass.hasMethodBodiesInInterface")
var KmClass.jvmFlags: Int public var KmClass.jvmFlags: Int
get() = jvm.jvmFlags get() = jvm.jvmFlags
set(value) { set(value) {
jvm.jvmFlags = value jvm.jvmFlags = value
@@ -61,13 +61,13 @@ var KmClass.jvmFlags: Int
* If an incorrect index is used, either the `KProperty<*>` object passed to delegate methods will point to the wrong property * If an incorrect index is used, either the `KProperty<*>` object passed to delegate methods will point to the wrong property
* at runtime, or an exception will be thrown. * at runtime, or an exception will be thrown.
*/ */
val KmPackage.localDelegatedProperties: MutableList<KmProperty> public val KmPackage.localDelegatedProperties: MutableList<KmProperty>
get() = jvm.localDelegatedProperties get() = jvm.localDelegatedProperties
/** /**
* Name of the module where this package fragment is declared. * Name of the module where this package fragment is declared.
*/ */
var KmPackage.moduleName: String? public var KmPackage.moduleName: String?
get() = jvm.moduleName get() = jvm.moduleName
set(value) { set(value) {
jvm.moduleName = value jvm.moduleName = value
@@ -78,7 +78,7 @@ var KmPackage.moduleName: String?
* *
* Example: `JvmMethodSignature("equals", "(Ljava/lang/Object;)Z")`. * Example: `JvmMethodSignature("equals", "(Ljava/lang/Object;)Z")`.
*/ */
var KmFunction.signature: JvmMethodSignature? public var KmFunction.signature: JvmMethodSignature?
get() = jvm.signature get() = jvm.signature
set(value) { set(value) {
jvm.signature = value jvm.signature = value
@@ -88,7 +88,7 @@ var KmFunction.signature: JvmMethodSignature?
* JVM internal name of the original class the lambda class for this function is copied from. This value is set for lambdas * JVM internal name of the original class the lambda class for this function is copied from. This value is set for lambdas
* copied from bodies of inline functions to the use site by the Kotlin compiler. * copied from bodies of inline functions to the use site by the Kotlin compiler.
*/ */
var KmFunction.lambdaClassOriginName: String? public var KmFunction.lambdaClassOriginName: String?
get() = jvm.lambdaClassOriginName get() = jvm.lambdaClassOriginName
set(value) { set(value) {
jvm.lambdaClassOriginName = value jvm.lambdaClassOriginName = value
@@ -98,7 +98,7 @@ var KmFunction.lambdaClassOriginName: String?
* JVM-specific flags of the property, consisting of [JvmFlag.Property] flags. * JVM-specific flags of the property, consisting of [JvmFlag.Property] flags.
*/ */
@Deprecated("Flag API is deprecated. Please use corresponding member extensions on KmProperty, such as KmProperty.isMovedFromInterfaceCompanion") @Deprecated("Flag API is deprecated. Please use corresponding member extensions on KmProperty, such as KmProperty.isMovedFromInterfaceCompanion")
var KmProperty.jvmFlags: Int public var KmProperty.jvmFlags: Int
get() = jvm.jvmFlags get() = jvm.jvmFlags
set(value) { set(value) {
jvm.jvmFlags = value jvm.jvmFlags = value
@@ -109,7 +109,7 @@ var KmProperty.jvmFlags: Int
* *
* Example: `JvmFieldSignature("X", "Ljava/lang/Object;")`. * Example: `JvmFieldSignature("X", "Ljava/lang/Object;")`.
*/ */
var KmProperty.fieldSignature: JvmFieldSignature? public var KmProperty.fieldSignature: JvmFieldSignature?
get() = jvm.fieldSignature get() = jvm.fieldSignature
set(value) { set(value) {
jvm.fieldSignature = value jvm.fieldSignature = value
@@ -120,7 +120,7 @@ var KmProperty.fieldSignature: JvmFieldSignature?
* *
* Example: `JvmMethodSignature("getX", "()Ljava/lang/Object;")`. * Example: `JvmMethodSignature("getX", "()Ljava/lang/Object;")`.
*/ */
var KmProperty.getterSignature: JvmMethodSignature? public var KmProperty.getterSignature: JvmMethodSignature?
get() = jvm.getterSignature get() = jvm.getterSignature
set(value) { set(value) {
jvm.getterSignature = value jvm.getterSignature = value
@@ -131,7 +131,7 @@ var KmProperty.getterSignature: JvmMethodSignature?
* *
* Example: `JvmMethodSignature("setX", "(Ljava/lang/Object;)V")`. * Example: `JvmMethodSignature("setX", "(Ljava/lang/Object;)V")`.
*/ */
var KmProperty.setterSignature: JvmMethodSignature? public var KmProperty.setterSignature: JvmMethodSignature?
get() = jvm.setterSignature get() = jvm.setterSignature
set(value) { set(value) {
jvm.setterSignature = value jvm.setterSignature = value
@@ -142,7 +142,7 @@ var KmProperty.setterSignature: JvmMethodSignature?
* *
* Example: `JvmMethodSignature("getX$annotations", "()V")`. * Example: `JvmMethodSignature("getX$annotations", "()V")`.
*/ */
var KmProperty.syntheticMethodForAnnotations: JvmMethodSignature? public var KmProperty.syntheticMethodForAnnotations: JvmMethodSignature?
get() = jvm.syntheticMethodForAnnotations get() = jvm.syntheticMethodForAnnotations
set(value) { set(value) {
jvm.syntheticMethodForAnnotations = value jvm.syntheticMethodForAnnotations = value
@@ -155,7 +155,7 @@ var KmProperty.syntheticMethodForAnnotations: JvmMethodSignature?
* *
* Example: `JvmMethodSignature("getX$delegate", "()Ljava/lang/Object;")`. * Example: `JvmMethodSignature("getX$delegate", "()Ljava/lang/Object;")`.
*/ */
var KmProperty.syntheticMethodForDelegate: JvmMethodSignature? public var KmProperty.syntheticMethodForDelegate: JvmMethodSignature?
get() = jvm.syntheticMethodForDelegate get() = jvm.syntheticMethodForDelegate
set(value) { set(value) {
jvm.syntheticMethodForDelegate = value jvm.syntheticMethodForDelegate = value
@@ -166,7 +166,7 @@ var KmProperty.syntheticMethodForDelegate: JvmMethodSignature?
* *
* Example: `JvmMethodSignature("<init>", "(Ljava/lang/Object;)V")`. * Example: `JvmMethodSignature("<init>", "(Ljava/lang/Object;)V")`.
*/ */
var KmConstructor.signature: JvmMethodSignature? public var KmConstructor.signature: JvmMethodSignature?
get() = jvm.signature get() = jvm.signature
set(value) { set(value) {
jvm.signature = value jvm.signature = value
@@ -175,13 +175,13 @@ var KmConstructor.signature: JvmMethodSignature?
/** /**
* Annotations on the type parameter. * Annotations on the type parameter.
*/ */
val KmTypeParameter.annotations: MutableList<KmAnnotation> public val KmTypeParameter.annotations: MutableList<KmAnnotation>
get() = jvm.annotations get() = jvm.annotations
/** /**
* `true` if the type is seen as a raw type in Java. * `true` if the type is seen as a raw type in Java.
*/ */
var KmType.isRaw: Boolean public var KmType.isRaw: Boolean
get() = jvm.isRaw get() = jvm.isRaw
set(value) { set(value) {
jvm.isRaw = value jvm.isRaw = value
@@ -190,5 +190,5 @@ var KmType.isRaw: Boolean
/** /**
* Annotations on the type. * Annotations on the type.
*/ */
val KmType.annotations: MutableList<KmAnnotation> public val KmType.annotations: MutableList<KmAnnotation>
get() = jvm.annotations get() = jvm.annotations
@@ -21,12 +21,12 @@ private const val prefix = "Flag API is deprecated. Please use"
* @see Flags * @see Flags
*/ */
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.hasMethodBodiesInInterface") @Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.hasMethodBodiesInInterface")
object JvmFlag { public object JvmFlag {
/** /**
* JVM-specific property flags in addition to common property flags declared in [Flag.Property]. * JVM-specific property flags in addition to common property flags declared in [Flag.Property].
*/ */
@Deprecated("$prefix corresponding extension on KmProperty: KmProperty.isMovedFromInterfaceCompanion") @Deprecated("$prefix corresponding extension on KmProperty: KmProperty.isMovedFromInterfaceCompanion")
object Property { public object Property {
/** /**
* Applied to a property declared in an interface's companion object, signifies that its backing field is declared as a static * Applied to a property declared in an interface's companion object, signifies that its backing field is declared as a static
* field in the interface. In Kotlin code, this usually happens if the property is annotated with [JvmField]. * field in the interface. In Kotlin code, this usually happens if the property is annotated with [JvmField].
@@ -35,14 +35,14 @@ object JvmFlag {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isMovedFromInterfaceCompanion") @Deprecated("$prefix KmProperty.isMovedFromInterfaceCompanion")
val IS_MOVED_FROM_INTERFACE_COMPANION = booleanFlag(JF.IS_MOVED_FROM_INTERFACE_COMPANION) public val IS_MOVED_FROM_INTERFACE_COMPANION: Flag = booleanFlag(JF.IS_MOVED_FROM_INTERFACE_COMPANION)
} }
/** /**
* JVM-specific class flags in addition to common class flags declared in [Flag.Class]. * JVM-specific class flags in addition to common class flags declared in [Flag.Class].
*/ */
@Deprecated("$prefix corresponding extensions on KmClass") @Deprecated("$prefix corresponding extensions on KmClass")
object Class { public object Class {
/** /**
* Applied to an interface compiled with -Xjvm-default=all or all-compatibility. * Applied to an interface compiled with -Xjvm-default=all or all-compatibility.
* *
@@ -52,7 +52,7 @@ object JvmFlag {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.hasMethodBodiesInInterface") @Deprecated("$prefix KmClass.hasMethodBodiesInInterface")
val HAS_METHOD_BODIES_IN_INTERFACE = booleanFlag(JF.IS_COMPILED_IN_JVM_DEFAULT_MODE) public val HAS_METHOD_BODIES_IN_INTERFACE: Flag = booleanFlag(JF.IS_COMPILED_IN_JVM_DEFAULT_MODE)
/** /**
* Applied to an interface compiled with -Xjvm-default=all-compatibility. * Applied to an interface compiled with -Xjvm-default=all-compatibility.
@@ -63,7 +63,7 @@ object JvmFlag {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isCompiledInCompatibilityMode") @Deprecated("$prefix KmClass.isCompiledInCompatibilityMode")
val IS_COMPILED_IN_COMPATIBILITY_MODE = booleanFlag(JF.IS_COMPILED_IN_COMPATIBILITY_MODE) public val IS_COMPILED_IN_COMPATIBILITY_MODE: Flag = booleanFlag(JF.IS_COMPILED_IN_COMPATIBILITY_MODE)
} }
internal fun booleanFlag(f: F.BooleanFlagField): Flag = internal fun booleanFlag(f: F.BooleanFlagField): Flag =
@@ -13,10 +13,10 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature as J
* @property name name of method or field * @property name name of method or field
* @property descriptor JVM descriptor of a method, e.g. `(Ljava/lang/Object;)Z`, or a field type, e.g. `Ljava/lang/String;` * @property descriptor JVM descriptor of a method, e.g. `(Ljava/lang/Object;)Z`, or a field type, e.g. `Ljava/lang/String;`
*/ */
sealed class JvmMemberSignature { public sealed class JvmMemberSignature {
abstract val name: String public abstract val name: String
abstract val descriptor: String public abstract val descriptor: String
/** /**
* Returns a string representation of the signature. * Returns a string representation of the signature.
@@ -30,14 +30,14 @@ sealed class JvmMemberSignature {
// Two following declarations are deprecated since 0.6.1, should be error in 0.7.0+ // Two following declarations are deprecated since 0.6.1, should be error in 0.7.0+
@Deprecated("Deprecated for removal. Use descriptor instead", ReplaceWith("descriptor"), level = DeprecationLevel.WARNING) @Deprecated("Deprecated for removal. Use descriptor instead", ReplaceWith("descriptor"), level = DeprecationLevel.WARNING)
val desc: String get() = descriptor public val desc: String get() = descriptor
@Deprecated( @Deprecated(
"asString() is deprecated as redundant. Use toString() instead", "asString() is deprecated as redundant. Use toString() instead",
ReplaceWith("toString()"), ReplaceWith("toString()"),
level = DeprecationLevel.WARNING level = DeprecationLevel.WARNING
) )
fun asString(): String = toString() public fun asString(): String = toString()
} }
/** /**
@@ -47,8 +47,8 @@ sealed class JvmMemberSignature {
* *
* @see JvmMemberSignature * @see JvmMemberSignature
*/ */
data class JvmMethodSignature(override val name: String, override val descriptor: String) : JvmMemberSignature() { public data class JvmMethodSignature(override val name: String, override val descriptor: String) : JvmMemberSignature() {
override fun toString() = name + descriptor override fun toString(): String = name + descriptor
} }
/** /**
@@ -58,8 +58,8 @@ data class JvmMethodSignature(override val name: String, override val descriptor
* *
* @see JvmMemberSignature * @see JvmMemberSignature
*/ */
data class JvmFieldSignature(override val name: String, override val descriptor: String) : JvmMemberSignature() { public data class JvmFieldSignature(override val name: String, override val descriptor: String) : JvmMemberSignature() {
override fun toString() = "$name:$descriptor" override fun toString(): String = "$name:$descriptor"
} }
@@ -14,7 +14,7 @@ import kotlinx.metadata.isLocalClassName
* Converts [this] to a JVM internal name of the class, where package names are separated by '/', and class names are separated by '$', * Converts [this] to a JVM internal name of the class, where package names are separated by '/', and class names are separated by '$',
* for example: `"org/foo/bar/Baz.Nested"` -> `"org/foo/bar/Baz$Nested"` * for example: `"org/foo/bar/Baz.Nested"` -> `"org/foo/bar/Baz$Nested"`
*/ */
fun ClassName.toJvmInternalName(): String = public fun ClassName.toJvmInternalName(): String =
if (this.isLocalClassName()) substring(1) if (this.isLocalClassName()) substring(1)
else replace('.', '$') else replace('.', '$')
@@ -24,14 +24,14 @@ fun ClassName.toJvmInternalName(): String =
ReplaceWith("toJvmInternalName()"), ReplaceWith("toJvmInternalName()"),
level = DeprecationLevel.WARNING level = DeprecationLevel.WARNING
) )
val ClassName.jvmInternalName: String get() = toJvmInternalName() public val ClassName.jvmInternalName: String get() = toJvmInternalName()
/** /**
* Helper function to instantiate [Metadata]. * Helper function to instantiate [Metadata].
* Contrary to a direct constructor call, this one accepts nullable parameters to substitute nulls with default values. * Contrary to a direct constructor call, this one accepts nullable parameters to substitute nulls with default values.
* Also, this one does not accept [Metadata.bytecodeVersion] as it is deprecated. * Also, this one does not accept [Metadata.bytecodeVersion] as it is deprecated.
*/ */
fun Metadata( public fun Metadata(
kind: Int? = null, kind: Int? = null,
metadataVersion: IntArray? = null, metadataVersion: IntArray? = null,
data1: Array<String>? = null, data1: Array<String>? = null,
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable
import java.util.* import java.util.*
import kotlin.LazyThreadSafetyMode.PUBLICATION
/** /**
* Represents the parsed metadata of a Kotlin JVM class file. Entry point for parsing metadata on JVM. * Represents the parsed metadata of a Kotlin JVM class file. Entry point for parsing metadata on JVM.
@@ -44,7 +43,7 @@ import kotlin.LazyThreadSafetyMode.PUBLICATION
* } * }
* ``` * ```
*/ */
sealed class KotlinClassMetadata(internal val annotationData: Metadata) { public sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
/** /**
* Represents metadata of a class file containing a declaration of a Kotlin class. * Represents metadata of a class file containing a declaration of a Kotlin class.
@@ -52,7 +51,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* Anything that does not belong to a Kotlin class (top-level declarations) is not present in * Anything that does not belong to a Kotlin class (top-level declarations) is not present in
* [Class] metadata, even if such declaration was in the same source file. See [FileFacade] for details. * [Class] metadata, even if such declaration was in the same source file. See [FileFacade] for details.
*/ */
class Class internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) { public class Class internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) {
/** /**
* Returns the [KmClass] representation of this metadata. * Returns the [KmClass] representation of this metadata.
@@ -72,7 +71,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
ReplaceWith("kmClass"), ReplaceWith("kmClass"),
DeprecationLevel.WARNING DeprecationLevel.WARNING
) )
fun toKmClass(): KmClass = KmClass().also { newKm -> kmClass.accept(newKm) } // defensive copy public fun toKmClass(): KmClass = KmClass().also { newKm -> kmClass.accept(newKm) } // defensive copy
/** /**
* Makes the given visitor visit the metadata of this class. * Makes the given visitor visit the metadata of this class.
@@ -80,7 +79,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @param v the visitor that must visit this class * @param v the visitor that must visit this class
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(v: KmClassVisitor) = kmClass.accept(v) public fun accept(v: KmClassVisitor): Unit = kmClass.accept(v)
/** /**
* A [KmClassVisitor] that generates the metadata of a Kotlin class. * A [KmClassVisitor] that generates the metadata of a Kotlin class.
@@ -88,7 +87,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
) )
class Writer : ClassWriter(JvmStringTable()) { public class Writer : ClassWriter(JvmStringTable()) {
/** /**
* Returns the metadata of the class that was written with this writer. * Returns the metadata of the class that was written with this writer.
* *
@@ -101,7 +100,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
) )
fun write( public fun write(
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): Class { ): Class {
@@ -121,7 +120,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* If Kotlin source file contains both classes and top-level declarations, only top-level declarations would be available in the corresponding file facade. * If Kotlin source file contains both classes and top-level declarations, only top-level declarations would be available in the corresponding file facade.
* Classes would have their own JVM classfiles and their own metadata of [Class] kind. * Classes would have their own JVM classfiles and their own metadata of [Class] kind.
*/ */
class FileFacade internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) { public class FileFacade internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) {
/** /**
* Returns the [KmPackage] representation of this metadata. * Returns the [KmPackage] representation of this metadata.
@@ -141,7 +140,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
ReplaceWith("kmPackage"), ReplaceWith("kmPackage"),
DeprecationLevel.WARNING DeprecationLevel.WARNING
) )
fun toKmPackage(): KmPackage = KmPackage().also { newPkg -> kmPackage.accept(newPkg) } public fun toKmPackage(): KmPackage = KmPackage().also { newPkg -> kmPackage.accept(newPkg) }
/** /**
* Makes the given visitor visit metadata of this file facade. * Makes the given visitor visit metadata of this file facade.
@@ -149,7 +148,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @param v the visitor that must visit this file facade * @param v the visitor that must visit this file facade
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(v: KmPackageVisitor) = kmPackage.accept(v) public fun accept(v: KmPackageVisitor): Unit = kmPackage.accept(v)
/** /**
* A [KmPackageVisitor] that generates the metadata of a Kotlin file facade. * A [KmPackageVisitor] that generates the metadata of a Kotlin file facade.
@@ -157,7 +156,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
) )
class Writer : PackageWriter(JvmStringTable()) { public class Writer : PackageWriter(JvmStringTable()) {
/** /**
* Returns the metadata of the file facade that was written with this writer. * Returns the metadata of the file facade that was written with this writer.
* *
@@ -170,7 +169,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
) )
fun write( public fun write(
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): FileFacade { ): FileFacade {
@@ -186,7 +185,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* Represents metadata of a class file containing a synthetic class, e.g. a class for lambda, `$DefaultImpls` class for interface * Represents metadata of a class file containing a synthetic class, e.g. a class for lambda, `$DefaultImpls` class for interface
* method implementations, `$WhenMappings` class for optimized `when` over enums, etc. * method implementations, `$WhenMappings` class for optimized `when` over enums, etc.
*/ */
class SyntheticClass internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) { public class SyntheticClass internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) {
private val functionData = private val functionData =
annotationData.data1.takeIf(Array<*>::isNotEmpty)?.let { data1 -> annotationData.data1.takeIf(Array<*>::isNotEmpty)?.let { data1 ->
JvmProtoBufUtil.readFunctionDataFrom(data1, annotationData.data2) JvmProtoBufUtil.readFunctionDataFrom(data1, annotationData.data2)
@@ -195,7 +194,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
/** /**
* Returns `true` if this synthetic class is a class file compiled for a Kotlin lambda. * Returns `true` if this synthetic class is a class file compiled for a Kotlin lambda.
*/ */
val isLambda: Boolean public val isLambda: Boolean
get() = annotationData.data1.isNotEmpty() get() = annotationData.data1.isNotEmpty()
@@ -218,7 +217,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
ReplaceWith("kmLambda"), ReplaceWith("kmLambda"),
DeprecationLevel.WARNING DeprecationLevel.WARNING
) )
fun toKmLambda(): KmLambda? = if (isLambda) KmLambda().apply(this::accept) else null public fun toKmLambda(): KmLambda? = if (isLambda) KmLambda().apply(this::accept) else null
/** /**
* Makes the given visitor visit metadata of this file facade if this synthetic class represents a Kotlin lambda * Makes the given visitor visit metadata of this file facade if this synthetic class represents a Kotlin lambda
@@ -229,7 +228,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @param v the visitor that must visit this lambda * @param v the visitor that must visit this lambda
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(v: KmLambdaVisitor) { public fun accept(v: KmLambdaVisitor) {
if (!isLambda) throw IllegalArgumentException( if (!isLambda) throw IllegalArgumentException(
"accept(KmLambdaVisitor) is only possible for synthetic classes which are lambdas (isLambda = true)" "accept(KmLambdaVisitor) is only possible for synthetic classes which are lambdas (isLambda = true)"
) )
@@ -246,7 +245,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
WRITER_API_MESSAGE + ": KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " + WRITER_API_MESSAGE + ": KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " +
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class", "or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
) )
class Writer : LambdaWriter(JvmStringTable()) { public class Writer : LambdaWriter(JvmStringTable()) {
/** /**
* Returns the metadata of the synthetic class that was written with this writer. * Returns the metadata of the synthetic class that was written with this writer.
* *
@@ -260,7 +259,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class", "or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
) )
@JvmOverloads @JvmOverloads
fun write( public fun write(
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0 extraInt: Int = 0
): SyntheticClass { ): SyntheticClass {
@@ -306,11 +305,11 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @see MultiFileClassPart * @see MultiFileClassPart
* @see JvmMultifileClass * @see JvmMultifileClass
*/ */
class MultiFileClassFacade internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) { public class MultiFileClassFacade internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) {
/** /**
* JVM internal names of the part classes which this multi-file class combines. * JVM internal names of the part classes which this multi-file class combines.
*/ */
val partClassNames: List<String> = annotationData.data1.asList() public val partClassNames: List<String> = annotationData.data1.asList()
/** /**
* A writer that generates the metadata of a multi-file class facade. * A writer that generates the metadata of a multi-file class facade.
@@ -318,7 +317,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
) )
class Writer { public class Writer {
/** /**
* Returns the metadata of the multi-file class facade that was written with this writer. * Returns the metadata of the multi-file class facade that was written with this writer.
* *
@@ -332,7 +331,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)", "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
) )
@JvmOverloads @JvmOverloads
fun write( public fun write(
partClassNames: List<String>, partClassNames: List<String>,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0 extraInt: Int = 0
@@ -358,7 +357,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @see MultiFileClassFacade * @see MultiFileClassFacade
* @see JvmMultifileClass * @see JvmMultifileClass
*/ */
class MultiFileClassPart internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) { public class MultiFileClassPart internal constructor(annotationData: Metadata) : KotlinClassMetadata(annotationData) {
/** /**
* Returns the [KmPackage] representation of this metadata. * Returns the [KmPackage] representation of this metadata.
* *
@@ -372,7 +371,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
/** /**
* JVM internal name of the corresponding multi-file class facade. * JVM internal name of the corresponding multi-file class facade.
*/ */
val facadeClassName: String public val facadeClassName: String
get() = annotationData.extraString get() = annotationData.extraString
/** /**
@@ -383,7 +382,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
ReplaceWith("kmPackage"), ReplaceWith("kmPackage"),
DeprecationLevel.WARNING DeprecationLevel.WARNING
) )
fun toKmPackage(): KmPackage = KmPackage().also { newKmp -> kmPackage.accept(newKmp) } public fun toKmPackage(): KmPackage = KmPackage().also { newKmp -> kmPackage.accept(newKmp) }
/** /**
* Makes the given visitor visit metadata of this multi-file class part. * Makes the given visitor visit metadata of this multi-file class part.
@@ -391,7 +390,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @param v the visitor that must visit this multi-file class part * @param v the visitor that must visit this multi-file class part
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(v: KmPackageVisitor) { public fun accept(v: KmPackageVisitor) {
kmPackage.accept(v) kmPackage.accept(v)
} }
@@ -401,7 +400,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
@Deprecated( @Deprecated(
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)" "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)"
) )
class Writer : PackageWriter(JvmStringTable()) { public class Writer : PackageWriter(JvmStringTable()) {
/** /**
* Returns the metadata of the multi-file class part that was written with this writer. * Returns the metadata of the multi-file class part that was written with this writer.
* *
@@ -415,7 +414,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)" "$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)"
) )
@JvmOverloads @JvmOverloads
fun write( public fun write(
facadeClassName: String, facadeClassName: String,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0 extraInt: Int = 0
@@ -434,13 +433,13 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* Represents metadata of an unknown class file. This class is used if an old version of this library is used against a new kind * Represents metadata of an unknown class file. This class is used if an old version of this library is used against a new kind
* of class files generated by the Kotlin compiler, unsupported by this library. * of class files generated by the Kotlin compiler, unsupported by this library.
*/ */
data object Unknown : KotlinClassMetadata(Metadata()) public data object Unknown : KotlinClassMetadata(Metadata())
/** /**
* Collection of methods for reading and writing [KotlinClassMetadata], * Collection of methods for reading and writing [KotlinClassMetadata],
* as well as metadata kind constants and [COMPATIBLE_METADATA_VERSION] constant. * as well as metadata kind constants and [COMPATIBLE_METADATA_VERSION] constant.
*/ */
companion object { public companion object {
/** /**
* Writes contents of [kmClass] as the class metadata. * Writes contents of [kmClass] as the class metadata.
* *
@@ -453,7 +452,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeClass( public fun writeClass(
kmClass: KmClass, kmClass: KmClass,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0, extraInt: Int = 0,
@@ -473,7 +472,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeFileFacade( public fun writeFileFacade(
kmPackage: KmPackage, kmPackage: KmPackage,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0, extraInt: Int = 0,
@@ -493,7 +492,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeLambda( public fun writeLambda(
kmLambda: KmLambda, kmLambda: KmLambda,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0, extraInt: Int = 0,
@@ -513,7 +512,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeSyntheticClass( public fun writeSyntheticClass(
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0, extraInt: Int = 0,
): Metadata = SyntheticClass.Writer().write(metadataVersion, extraInt).annotationData ): Metadata = SyntheticClass.Writer().write(metadataVersion, extraInt).annotationData
@@ -531,7 +530,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeMultiFileClassFacade( public fun writeMultiFileClassFacade(
partClassNames: List<String>, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, partClassNames: List<String>, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0, extraInt: Int = 0,
): Metadata = MultiFileClassFacade.Writer().write(partClassNames, metadataVersion, extraInt).annotationData ): Metadata = MultiFileClassFacade.Writer().write(partClassNames, metadataVersion, extraInt).annotationData
@@ -549,7 +548,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
*/ */
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun writeMultiFileClassPart( public fun writeMultiFileClassPart(
kmPackage: KmPackage, kmPackage: KmPackage,
facadeClassName: String, facadeClassName: String,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
@@ -575,7 +574,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* @see COMPATIBLE_METADATA_VERSION * @see COMPATIBLE_METADATA_VERSION
*/ */
@JvmStatic @JvmStatic
fun read(annotationData: Metadata): KotlinClassMetadata { public fun read(annotationData: Metadata): KotlinClassMetadata {
checkMetadataVersionForRead(annotationData) checkMetadataVersionForRead(annotationData)
return wrapIntoMetadataExceptionWhenNeeded { return wrapIntoMetadataExceptionWhenNeeded {
@@ -622,14 +621,14 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* *
* @see Metadata.kind * @see Metadata.kind
*/ */
const val CLASS_KIND = 1 public const val CLASS_KIND: Int = 1
/** /**
* A class file kind signifying that the corresponding class file is a compiled Kotlin file facade. * A class file kind signifying that the corresponding class file is a compiled Kotlin file facade.
* *
* @see Metadata.kind * @see Metadata.kind
*/ */
const val FILE_FACADE_KIND = 2 public const val FILE_FACADE_KIND: Int = 2
/** /**
* A class file kind signifying that the corresponding class file is synthetic, e.g. it is a class for lambda, `$DefaultImpls` class * A class file kind signifying that the corresponding class file is synthetic, e.g. it is a class for lambda, `$DefaultImpls` class
@@ -637,7 +636,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* *
* @see Metadata.kind * @see Metadata.kind
*/ */
const val SYNTHETIC_CLASS_KIND = 3 public const val SYNTHETIC_CLASS_KIND: Int = 3
/** /**
* A class file kind signifying that the corresponding class file is a compiled multi-file class facade. * A class file kind signifying that the corresponding class file is a compiled multi-file class facade.
@@ -646,7 +645,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* *
* @see JvmMultifileClass * @see JvmMultifileClass
*/ */
const val MULTI_FILE_CLASS_FACADE_KIND = 4 public const val MULTI_FILE_CLASS_FACADE_KIND: Int = 4
/** /**
* A class file kind signifying that the corresponding class file is a compiled multi-file class part, i.e. an internal class * A class file kind signifying that the corresponding class file is a compiled multi-file class part, i.e. an internal class
@@ -656,7 +655,7 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* *
* @see JvmMultifileClass * @see JvmMultifileClass
*/ */
const val MULTI_FILE_CLASS_PART_KIND = 5 public const val MULTI_FILE_CLASS_PART_KIND: Int = 5
/** /**
* The latest stable metadata version supported by this version of the library. * The latest stable metadata version supported by this version of the library.
@@ -667,8 +666,8 @@ sealed class KotlinClassMetadata(internal val annotationData: Metadata) {
* *
* @see Metadata.metadataVersion * @see Metadata.metadataVersion
*/ */
@JvmField // TODO: move it somewhere since it is also used in KotlinModuleMetadata? @JvmField // TODO: move it somewhere since it is also used in KotlinModuleMetadata?
val COMPATIBLE_METADATA_VERSION = JvmMetadataVersion.INSTANCE.toArray().copyOf() public val COMPATIBLE_METADATA_VERSION: IntArray = JvmMetadataVersion.INSTANCE.toArray().copyOf()
} }
} }
@@ -37,7 +37,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.serializeToByteArray
* @property bytes the byte array representing the contents of a `.kotlin_module` file * @property bytes the byte array representing the contents of a `.kotlin_module` file
*/ */
@UnstableMetadataApi @UnstableMetadataApi
class KotlinModuleMetadata private constructor( public class KotlinModuleMetadata private constructor(
private val bytes: ByteArray, private val bytes: ByteArray,
private val data: ModuleMapping, private val data: ModuleMapping,
) { ) {
@@ -57,14 +57,14 @@ class KotlinModuleMetadata private constructor(
ReplaceWith("kmModule"), ReplaceWith("kmModule"),
DeprecationLevel.WARNING DeprecationLevel.WARNING
) )
fun toKmModule(): KmModule = KmModule().apply(kmModule::accept) public fun toKmModule(): KmModule = KmModule().apply(kmModule::accept)
/** /**
* A [KmModuleVisitor] that generates the metadata of a Kotlin JVM module file. * A [KmModuleVisitor] that generates the metadata of a Kotlin JVM module file.
*/ */
@Deprecated("Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)") @Deprecated("Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)")
class Writer : KmModuleVisitor() { public class Writer : KmModuleVisitor() {
private val b = JvmModuleProtoBuf.Module.newBuilder() private val b = JvmModuleProtoBuf.Module.newBuilder()
override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) { override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
@@ -107,7 +107,7 @@ class KotlinModuleMetadata private constructor(
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default * [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default
*/ */
@Deprecated("Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)") @Deprecated("Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)")
fun write(metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): ByteArray { public fun write(metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): ByteArray {
return b.build().serializeToByteArray(JvmMetadataVersion(*metadataVersion), 0) return b.build().serializeToByteArray(JvmMetadataVersion(*metadataVersion), 0)
} }
} }
@@ -118,7 +118,7 @@ class KotlinModuleMetadata private constructor(
* @param v the visitor that must visit this module file * @param v the visitor that must visit this module file
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(v: KmModuleVisitor) { public fun accept(v: KmModuleVisitor) {
for ((fqName, parts) in data.packageFqName2Parts) { for ((fqName, parts) in data.packageFqName2Parts) {
val (fileFacades, multiFileClassParts) = parts.parts.partition { parts.getMultifileFacadeName(it) == null } val (fileFacades, multiFileClassParts) = parts.parts.partition { parts.getMultifileFacadeName(it) == null }
v.visitPackageParts(fqName, fileFacades, multiFileClassParts.associateWith { parts.getMultifileFacadeName(it)!! }) v.visitPackageParts(fqName, fileFacades, multiFileClassParts.associateWith { parts.getMultifileFacadeName(it)!! })
@@ -140,7 +140,7 @@ class KotlinModuleMetadata private constructor(
/** /**
* Collection of methods for reading and writing [KotlinModuleMetadata]. * Collection of methods for reading and writing [KotlinModuleMetadata].
*/ */
companion object { public companion object {
/** /**
* Parses the given byte array with the .kotlin_module file content and returns the [KotlinModuleMetadata] instance, * Parses the given byte array with the .kotlin_module file content and returns the [KotlinModuleMetadata] instance,
* or `null` if this byte array encodes a module with an unsupported metadata version. * or `null` if this byte array encodes a module with an unsupported metadata version.
@@ -150,7 +150,7 @@ class KotlinModuleMetadata private constructor(
*/ */
@JvmStatic @JvmStatic
@UnstableMetadataApi @UnstableMetadataApi
fun read(bytes: ByteArray): KotlinModuleMetadata { public fun read(bytes: ByteArray): KotlinModuleMetadata {
return wrapIntoMetadataExceptionWhenNeeded { return wrapIntoMetadataExceptionWhenNeeded {
val result = dataFromBytes(bytes) val result = dataFromBytes(bytes)
when (result) { when (result) {
@@ -172,7 +172,7 @@ class KotlinModuleMetadata private constructor(
@UnstableMetadataApi @UnstableMetadataApi
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun write(kmModule: KmModule, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): ByteArray = wrapWriteIntoIAE { public fun write(kmModule: KmModule, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): ByteArray = wrapWriteIntoIAE {
Writer().also { kmModule.accept(it) }.write(metadataVersion) Writer().also { kmModule.accept(it) }.write(metadataVersion)
} }
@@ -192,7 +192,7 @@ class KotlinModuleMetadata private constructor(
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@UnstableMetadataApi @UnstableMetadataApi
abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) { public 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. * Visits the table of all single- and multi-file facades declared in some package of this module.
* *
@@ -203,7 +203,7 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
* @param multiFileClassParts the map of multi-file classes where keys are names of multi-file class parts, * @param multiFileClassParts the map of multi-file classes where keys are names of multi-file class parts,
* and values are names of the corresponding multi-file facades * and values are names of the corresponding multi-file facades
*/ */
open fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) { public open fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
delegate?.visitPackageParts(fqName, fileFacades, multiFileClassParts) delegate?.visitPackageParts(fqName, fileFacades, multiFileClassParts)
} }
@@ -212,7 +212,7 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
* *
* @param annotation annotation on the module * @param annotation annotation on the module
*/ */
open fun visitAnnotation(annotation: KmAnnotation) { public open fun visitAnnotation(annotation: KmAnnotation) {
delegate?.visitAnnotation(annotation) delegate?.visitAnnotation(annotation)
} }
@@ -224,13 +224,13 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
* Multiplatform projects are an experimental feature of Kotlin, and their behavior and/or binary format * Multiplatform projects are an experimental feature of Kotlin, and their behavior and/or binary format
* may change in a subsequent release. * may change in a subsequent release.
*/ */
open fun visitOptionalAnnotationClass(): KmClassVisitor? = public open fun visitOptionalAnnotationClass(): KmClassVisitor? =
delegate?.visitOptionalAnnotationClass() delegate?.visitOptionalAnnotationClass()
/** /**
* Visits the end of the module. * Visits the end of the module.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
@@ -241,11 +241,11 @@ abstract class KmModuleVisitor(private val delegate: KmModuleVisitor? = null) {
* Represents a Kotlin JVM module file (`.kotlin_module` extension). * Represents a Kotlin JVM module file (`.kotlin_module` extension).
*/ */
@UnstableMetadataApi @UnstableMetadataApi
class KmModule : KmModuleVisitor() { public class KmModule : KmModuleVisitor() {
/** /**
* Table of all single- and multi-file facades declared in some package of this module, where keys are '.'-separated package names. * Table of all single- and multi-file facades declared in some package of this module, where keys are '.'-separated package names.
*/ */
val packageParts: MutableMap<String, KmPackageParts> = LinkedHashMap() public val packageParts: MutableMap<String, KmPackageParts> = LinkedHashMap()
/** /**
* Annotations on the module. * Annotations on the module.
@@ -253,7 +253,7 @@ class KmModule : KmModuleVisitor() {
* Currently, Kotlin does not provide functionality to specify annotations on modules. * Currently, Kotlin does not provide functionality to specify annotations on modules.
*/ */
@Deprecated("This list is always empty and will be removed", level = DeprecationLevel.WARNING) @Deprecated("This list is always empty and will be removed", level = DeprecationLevel.WARNING)
val annotations: MutableList<KmAnnotation> = ArrayList(0) public val annotations: MutableList<KmAnnotation> = ArrayList(0)
/** /**
* `@OptionalExpectation`-annotated annotation classes declared in this module. * `@OptionalExpectation`-annotated annotation classes declared in this module.
@@ -263,7 +263,7 @@ class KmModule : KmModuleVisitor() {
* Multiplatform projects are an experimental feature of Kotlin, and their behavior and/or binary format * Multiplatform projects are an experimental feature of Kotlin, and their behavior and/or binary format
* may change in a subsequent release. * may change in a subsequent release.
*/ */
val optionalAnnotationClasses: MutableList<KmClass> = ArrayList(0) public val optionalAnnotationClasses: MutableList<KmClass> = ArrayList(0)
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) { override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
@@ -285,7 +285,7 @@ class KmModule : KmModuleVisitor() {
* @param visitor the visitor which will visit data in this module. * @param visitor the visitor which will visit data in this module.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmModuleVisitor) { public fun accept(visitor: KmModuleVisitor) {
for ((fqName, parts) in packageParts) { for ((fqName, parts) in packageParts) {
visitor.visitPackageParts(fqName, parts.fileFacades, parts.multiFileClassParts) visitor.visitPackageParts(fqName, parts.fileFacades, parts.multiFileClassParts)
} }
@@ -304,7 +304,7 @@ class KmModule : KmModuleVisitor() {
* and values are names of the corresponding multi-file facades * and values are names of the corresponding multi-file facades
*/ */
@UnstableMetadataApi @UnstableMetadataApi
class KmPackageParts( public class KmPackageParts(
val fileFacades: MutableList<String>, public val fileFacades: MutableList<String>,
val multiFileClassParts: MutableMap<String, String> public val multiFileClassParts: MutableMap<String, String>
) )
@@ -15,4 +15,4 @@ package kotlinx.metadata.jvm
level = RequiresOptIn.Level.WARNING level = RequiresOptIn.Level.WARNING
) )
@MustBeDocumented @MustBeDocumented
annotation class UnstableMetadataApi public annotation class UnstableMetadataApi
@@ -16,7 +16,7 @@ package kotlinx.metadata
* @property arguments Explicitly specified arguments to the annotation; does not include default values for annotation parameters * @property arguments Explicitly specified arguments to the annotation; does not include default values for annotation parameters
* (specified in the annotation class declaration) * (specified in the annotation class declaration)
*/ */
class KmAnnotation(val className: ClassName, val arguments: Map<String, KmAnnotationArgument>) { public class KmAnnotation(public val className: ClassName, public val arguments: Map<String, KmAnnotationArgument>) {
/** /**
* Checks if this KmAnnotation is equal to the [other]. * Checks if this KmAnnotation is equal to the [other].
@@ -45,7 +45,7 @@ class KmAnnotation(val className: ClassName, val arguments: Map<String, KmAnnota
* Represents an argument of the annotation. * Represents an argument of the annotation.
*/ */
@Suppress("IncorrectFormatting") // one-line KDoc @Suppress("IncorrectFormatting") // one-line KDoc
sealed class KmAnnotationArgument { public sealed class KmAnnotationArgument {
// Avoid triggering Dokka configured for failing on undocumented functions // Avoid triggering Dokka configured for failing on undocumented functions
/** @suppress */ /** @suppress */
@@ -59,13 +59,13 @@ sealed class KmAnnotationArgument {
* *
* @param T the type of the value of this argument * @param T the type of the value of this argument
*/ */
sealed class LiteralValue<out T : Any> : KmAnnotationArgument() { public sealed class LiteralValue<out T : Any> : KmAnnotationArgument() {
/** /**
* The value of this argument. * The value of this argument.
*/ */
abstract val value: T public abstract val value: T
// final modifier prevents generation of data class-like .toString() in inheritors // the final modifier prevents generation of data class-like .toString() in inheritors
// Java reflection instead of Kotlin reflection to avoid (probably small) overhead of mapping Kotlin/Java names // Java reflection instead of Kotlin reflection to avoid (probably small) overhead of mapping Kotlin/Java names
final override fun toString(): String = final override fun toString(): String =
"${this::class.java.simpleName}(${if (this is StringValue) "\"$value\"" else value.toString()})" "${this::class.java.simpleName}(${if (this is StringValue) "\"$value\"" else value.toString()})"
@@ -75,33 +75,33 @@ sealed class KmAnnotationArgument {
// to the overridden one. However, it does not do this with classes, and we do not have `@inheritdoc` :( // to the overridden one. However, it does not do this with classes, and we do not have `@inheritdoc` :(
/** An annotation argument with a [Byte] type. */ /** An annotation argument with a [Byte] type. */
data class ByteValue(override val value: Byte) : LiteralValue<Byte>() public data class ByteValue(override val value: Byte) : LiteralValue<Byte>()
/** An annotation argument with a [Char] type. */ /** An annotation argument with a [Char] type. */
data class CharValue(override val value: Char) : LiteralValue<Char>() public data class CharValue(override val value: Char) : LiteralValue<Char>()
/** An annotation argument with a [Short] type. */ /** An annotation argument with a [Short] type. */
data class ShortValue(override val value: Short) : LiteralValue<Short>() public data class ShortValue(override val value: Short) : LiteralValue<Short>()
/** An annotation argument with a [Int] type. */ /** An annotation argument with a [Int] type. */
data class IntValue(override val value: Int) : LiteralValue<Int>() public data class IntValue(override val value: Int) : LiteralValue<Int>()
/** An annotation argument with a [Long] type. */ /** An annotation argument with a [Long] type. */
data class LongValue(override val value: Long) : LiteralValue<Long>() public data class LongValue(override val value: Long) : LiteralValue<Long>()
/** An annotation argument with a [Float] type. */ /** An annotation argument with a [Float] type. */
data class FloatValue(override val value: Float) : LiteralValue<Float>() public data class FloatValue(override val value: Float) : LiteralValue<Float>()
/** An annotation argument with a [Double] type. */ /** An annotation argument with a [Double] type. */
data class DoubleValue(override val value: Double) : LiteralValue<Double>() public data class DoubleValue(override val value: Double) : LiteralValue<Double>()
/** An annotation argument with a [Boolean] type. */ /** An annotation argument with a [Boolean] type. */
data class BooleanValue(override val value: Boolean) : LiteralValue<Boolean>() public data class BooleanValue(override val value: Boolean) : LiteralValue<Boolean>()
/** An annotation argument with a [UByte] type. */ /** An annotation argument with a [UByte] type. */
data class UByteValue(override val value: UByte) : LiteralValue<UByte>() public data class UByteValue(override val value: UByte) : LiteralValue<UByte>()
/** An annotation argument with a [UShort] type. */ /** An annotation argument with a [UShort] type. */
data class UShortValue(override val value: UShort) : LiteralValue<UShort>() public data class UShortValue(override val value: UShort) : LiteralValue<UShort>()
/** An annotation argument with a [UInt] type. */ /** An annotation argument with a [UInt] type. */
data class UIntValue(override val value: UInt) : LiteralValue<UInt>() public data class UIntValue(override val value: UInt) : LiteralValue<UInt>()
/** An annotation argument with a [ULong] type. */ /** An annotation argument with a [ULong] type. */
data class ULongValue(override val value: ULong) : LiteralValue<ULong>() public data class ULongValue(override val value: ULong) : LiteralValue<ULong>()
/** An annotation argument with a [String] type. */ /** An annotation argument with a [String] type. */
data class StringValue(override val value: String) : LiteralValue<String>() public data class StringValue(override val value: String) : LiteralValue<String>()
/** /**
* An annotation argument with an enumeration type. * An annotation argument with an enumeration type.
@@ -112,7 +112,7 @@ sealed class KmAnnotationArgument {
* @property enumClassName FQ name of the enum class * @property enumClassName FQ name of the enum class
* @property enumEntryName Name of the enum entry * @property enumEntryName Name of the enum entry
*/ */
data class EnumValue(val enumClassName: ClassName, val enumEntryName: String) : KmAnnotationArgument() { public data class EnumValue(val enumClassName: ClassName, val enumEntryName: String) : KmAnnotationArgument() {
override fun toString(): String = "EnumValue($enumClassName.$enumEntryName)" override fun toString(): String = "EnumValue($enumClassName.$enumEntryName)"
} }
@@ -131,7 +131,7 @@ sealed class KmAnnotationArgument {
* *
* @property annotation Annotation instance with all its arguments. * @property annotation Annotation instance with all its arguments.
*/ */
data class AnnotationValue(val annotation: KmAnnotation) : KmAnnotationArgument() { public data class AnnotationValue(val annotation: KmAnnotation) : KmAnnotationArgument() {
override fun toString(): String = "AnnotationValue($annotation)" override fun toString(): String = "AnnotationValue($annotation)"
} }
@@ -145,7 +145,7 @@ sealed class KmAnnotationArgument {
* *
* @property elements Values of elements in the array. * @property elements Values of elements in the array.
*/ */
data class ArrayValue(val elements: List<KmAnnotationArgument>) : KmAnnotationArgument() { public data class ArrayValue(val elements: List<KmAnnotationArgument>) : KmAnnotationArgument() {
override fun toString(): String = "ArrayValue($elements)" override fun toString(): String = "ArrayValue($elements)"
} }
@@ -160,7 +160,7 @@ sealed class KmAnnotationArgument {
* @property className FQ name of the referenced class. * @property className FQ name of the referenced class.
*/ */
@Suppress("DEPRECATION_ERROR") @Suppress("DEPRECATION_ERROR")
data class KClassValue @Deprecated( public data class KClassValue @Deprecated(
"Use single-argument constructor instead or ArrayKClassValue", "Use single-argument constructor instead or ArrayKClassValue",
level = DeprecationLevel.ERROR level = DeprecationLevel.ERROR
) constructor( ) constructor(
@@ -170,7 +170,7 @@ sealed class KmAnnotationArgument {
level = DeprecationLevel.ERROR level = DeprecationLevel.ERROR
) val arrayDimensionCount: Int ) val arrayDimensionCount: Int
) : KmAnnotationArgument() { ) : KmAnnotationArgument() {
constructor(className: ClassName) : this(className, 0) public constructor(className: ClassName) : this(className, 0)
init { init {
require(arrayDimensionCount == 0) { "KClassValue must not have array dimensions. For Array<X>::class, use ArrayKClassValue." } require(arrayDimensionCount == 0) { "KClassValue must not have array dimensions. For Array<X>::class, use ArrayKClassValue." }
@@ -199,7 +199,7 @@ sealed class KmAnnotationArgument {
* @property className FQ name of the referenced array element type. * @property className FQ name of the referenced array element type.
* @property arrayDimensionCount Referenced array dimension. * @property arrayDimensionCount Referenced array dimension.
*/ */
data class ArrayKClassValue(val className: ClassName, val arrayDimensionCount: Int) : KmAnnotationArgument() { public data class ArrayKClassValue(val className: ClassName, val arrayDimensionCount: Int) : KmAnnotationArgument() {
init { init {
require(arrayDimensionCount > 0) { "ArrayKClassValue must have at least one dimension. For regular X::class argument, use KClassValue." } require(arrayDimensionCount > 0) { "ArrayKClassValue must have at least one dimension. For regular X::class argument, use KClassValue." }
} }
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.metadata.deserialization.Flags as ProtoFlags
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmClass.hasAnnotations by annotationsOn(KmClass::flags) public var KmClass.hasAnnotations: Boolean by annotationsOn(KmClass::flags)
/** /**
* Indicates that the corresponding constructor has at least one annotation. * Indicates that the corresponding constructor has at least one annotation.
@@ -38,7 +38,7 @@ var KmClass.hasAnnotations by annotationsOn(KmClass::flags)
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmConstructor.hasAnnotations by annotationsOn(KmConstructor::flags) public var KmConstructor.hasAnnotations: Boolean by annotationsOn(KmConstructor::flags)
/** /**
* Indicates that the corresponding function has at least one annotation. * Indicates that the corresponding function has at least one annotation.
@@ -49,7 +49,7 @@ var KmConstructor.hasAnnotations by annotationsOn(KmConstructor::flags)
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmFunction.hasAnnotations by annotationsOn(KmFunction::flags) public var KmFunction.hasAnnotations: Boolean by annotationsOn(KmFunction::flags)
/** /**
* Indicates that the corresponding property has at least one annotation. * Indicates that the corresponding property has at least one annotation.
@@ -60,7 +60,7 @@ var KmFunction.hasAnnotations by annotationsOn(KmFunction::flags)
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmProperty.hasAnnotations by annotationsOn(KmProperty::flags) public var KmProperty.hasAnnotations: Boolean by annotationsOn(KmProperty::flags)
/** /**
* Indicates that the corresponding property accessor has at least one annotation. * Indicates that the corresponding property accessor has at least one annotation.
@@ -71,7 +71,7 @@ var KmProperty.hasAnnotations by annotationsOn(KmProperty::flags)
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmPropertyAccessorAttributes.hasAnnotations by annotationsOn(KmPropertyAccessorAttributes::flags) public var KmPropertyAccessorAttributes.hasAnnotations: Boolean by annotationsOn(KmPropertyAccessorAttributes::flags)
/** /**
* Indicates that the corresponding value parameter has at least one annotation. * Indicates that the corresponding value parameter has at least one annotation.
@@ -82,7 +82,7 @@ var KmPropertyAccessorAttributes.hasAnnotations by annotationsOn(KmPropertyAcces
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files.
*/ */
var KmValueParameter.hasAnnotations by annotationsOn(KmValueParameter::flags) public var KmValueParameter.hasAnnotations: Boolean by annotationsOn(KmValueParameter::flags)
/** /**
* Indicates that the corresponding type alias has at least one annotation. * Indicates that the corresponding type alias has at least one annotation.
@@ -93,7 +93,7 @@ var KmValueParameter.hasAnnotations by annotationsOn(KmValueParameter::flags)
* *
* Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files and metadata. * Only annotations with [AnnotationRetention.BINARY] and [AnnotationRetention.RUNTIME] are written to the class files and metadata.
*/ */
var KmTypeAlias.hasAnnotations by annotationsOn(KmTypeAlias::flags) public var KmTypeAlias.hasAnnotations: Boolean by annotationsOn(KmTypeAlias::flags)
// KmType and KmTypeParameter have annotations in it, and this flag for them is not written // KmType and KmTypeParameter have annotations in it, and this flag for them is not written
@@ -104,7 +104,7 @@ var KmTypeAlias.hasAnnotations by annotationsOn(KmTypeAlias::flags)
* *
* Modality determines when and where it is possible to extend/implement a class/interface. * Modality determines when and where it is possible to extend/implement a class/interface.
*/ */
var KmClass.modality: Modality by modalityDelegate(KmClass::flags) public var KmClass.modality: Modality by modalityDelegate(KmClass::flags)
/** /**
* Represents visibility of the corresponding class. * Represents visibility of the corresponding class.
@@ -112,12 +112,12 @@ var KmClass.modality: Modality by modalityDelegate(KmClass::flags)
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmClass.visibility: Visibility by visibilityDelegate(KmClass::flags) public var KmClass.visibility: Visibility by visibilityDelegate(KmClass::flags)
/** /**
* Represents kind of the corresponding class — whether it is a regular class or an interface, companion object, et cetera. * Represents kind of the corresponding class — whether it is a regular class or an interface, companion object, et cetera.
*/ */
var KmClass.kind: ClassKind by EnumFlagDelegate( public var KmClass.kind: ClassKind by EnumFlagDelegate(
KmClass::flags, KmClass::flags,
ProtoFlags.CLASS_KIND, ProtoFlags.CLASS_KIND,
ClassKind.entries, ClassKind.entries,
@@ -127,23 +127,23 @@ var KmClass.kind: ClassKind by EnumFlagDelegate(
/** /**
* Indicates that the corresponding class is `inner`. * Indicates that the corresponding class is `inner`.
*/ */
var KmClass.isInner: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_INNER)) public var KmClass.isInner: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_INNER))
/** /**
* Indicates that the corresponding `class` or `object` is `data`. * Indicates that the corresponding `class` or `object` is `data`.
* Always false for other kinds. * Always false for other kinds.
*/ */
var KmClass.isData: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_DATA)) public var KmClass.isData: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_DATA))
/** /**
* Indicates that the corresponding class is `external`. * Indicates that the corresponding class is `external`.
*/ */
var KmClass.isExternal: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_CLASS)) public var KmClass.isExternal: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_CLASS))
/** /**
* Indicates that the corresponding class is `expect`. * Indicates that the corresponding class is `expect`.
*/ */
var KmClass.isExpect: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_EXPECT_CLASS)) public var KmClass.isExpect: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_EXPECT_CLASS))
/** /**
* Indicates that the corresponding class is either a pre-Kotlin-1.5 `inline` class, or a 1.5+ `value` class. * Indicates that the corresponding class is either a pre-Kotlin-1.5 `inline` class, or a 1.5+ `value` class.
@@ -151,14 +151,14 @@ var KmClass.isExpect: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_EXPECT_CLAS
* Note that it does not imply that the class has [JvmInline] annotation and will be inlined. * Note that it does not imply that the class has [JvmInline] annotation and will be inlined.
* Currently, it is impossible to declare a value class without this annotation, but this can be changed in the future. * Currently, it is impossible to declare a value class without this annotation, but this can be changed in the future.
*/ */
var KmClass.isValue: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_VALUE_CLASS)) public var KmClass.isValue: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_VALUE_CLASS))
/** /**
* Indicates that the corresponding class is a functional interface, i.e., marked with the keyword `fun`. * Indicates that the corresponding class is a functional interface, i.e., marked with the keyword `fun`.
* *
* Always `false` if [KmClass.kind] is not an interface. * Always `false` if [KmClass.kind] is not an interface.
*/ */
var KmClass.isFunInterface: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_FUN_INTERFACE)) public var KmClass.isFunInterface: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_FUN_INTERFACE))
/** /**
* Indicates that the corresponding enum class has synthetic ".entries" property in bytecode. * Indicates that the corresponding enum class has synthetic ".entries" property in bytecode.
@@ -166,7 +166,7 @@ var KmClass.isFunInterface: Boolean by classBooleanFlag(Flag(ProtoFlags.IS_FUN_I
* Always `false` if [KmClass.kind] is not an enum. * Always `false` if [KmClass.kind] is not an enum.
* Enum classes always have enum entries property starting from Kotlin 1.9.0. * Enum classes always have enum entries property starting from Kotlin 1.9.0.
*/ */
var KmClass.hasEnumEntries: Boolean by classBooleanFlag(Flag(ProtoFlags.HAS_ENUM_ENTRIES)) public var KmClass.hasEnumEntries: Boolean by classBooleanFlag(Flag(ProtoFlags.HAS_ENUM_ENTRIES))
// --- CONSTRUCTOR --- // --- CONSTRUCTOR ---
@@ -176,12 +176,12 @@ var KmClass.hasEnumEntries: Boolean by classBooleanFlag(Flag(ProtoFlags.HAS_ENUM
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmConstructor.visibility: Visibility by visibilityDelegate(KmConstructor::flags) public var KmConstructor.visibility: Visibility by visibilityDelegate(KmConstructor::flags)
/** /**
* Indicates that the corresponding constructor is secondary, i.e., declared not in the class header, but in the class body. * Indicates that the corresponding constructor is secondary, i.e., declared not in the class header, but in the class body.
*/ */
var KmConstructor.isSecondary: Boolean by constructorBooleanFlag(Flag(ProtoFlags.IS_SECONDARY)) public var KmConstructor.isSecondary: Boolean by constructorBooleanFlag(Flag(ProtoFlags.IS_SECONDARY))
/** /**
* Indicates that the corresponding constructor has non-stable parameter names, i.e., cannot be called with named arguments. * Indicates that the corresponding constructor has non-stable parameter names, i.e., cannot be called with named arguments.
@@ -189,7 +189,7 @@ var KmConstructor.isSecondary: Boolean by constructorBooleanFlag(Flag(ProtoFlags
* Currently, this attribute is Kotlin/Native-specific and is never set by Kotlin/JVM compiler. * Currently, this attribute is Kotlin/Native-specific and is never set by Kotlin/JVM compiler.
* This may be changed in the future. * This may be changed in the future.
*/ */
var KmConstructor.hasNonStableParameterNames: Boolean by constructorBooleanFlag(Flag(ProtoFlags.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES)) public var KmConstructor.hasNonStableParameterNames: Boolean by constructorBooleanFlag(Flag(ProtoFlags.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES))
// --- FUNCTION --- // --- FUNCTION ---
@@ -198,7 +198,7 @@ var KmConstructor.hasNonStableParameterNames: Boolean by constructorBooleanFlag(
* *
* Kind indicates the origin of a declaration within a containing class. For details, see [MemberKind]. * Kind indicates the origin of a declaration within a containing class. For details, see [MemberKind].
*/ */
var KmFunction.kind: MemberKind by memberKindDelegate(KmFunction::flags) public var KmFunction.kind: MemberKind by memberKindDelegate(KmFunction::flags)
/** /**
* Represents visibility of the corresponding function. * Represents visibility of the corresponding function.
@@ -206,7 +206,7 @@ var KmFunction.kind: MemberKind by memberKindDelegate(KmFunction::flags)
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmFunction.visibility: Visibility by visibilityDelegate(KmFunction::flags) public var KmFunction.visibility: Visibility by visibilityDelegate(KmFunction::flags)
/** /**
* Represents modality of the corresponding function. * Represents modality of the corresponding function.
@@ -216,42 +216,42 @@ var KmFunction.visibility: Visibility by visibilityDelegate(KmFunction::flags)
* *
* [Modality.SEALED] is not applicable for [KmFunction] and setting it as a value results in undefined behavior. * [Modality.SEALED] is not applicable for [KmFunction] and setting it as a value results in undefined behavior.
*/ */
var KmFunction.modality: Modality by modalityDelegate(KmFunction::flags) public var KmFunction.modality: Modality by modalityDelegate(KmFunction::flags)
/** /**
* Indicates that the corresponding function is `operator`. * Indicates that the corresponding function is `operator`.
*/ */
var KmFunction.isOperator: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_OPERATOR)) public var KmFunction.isOperator: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_OPERATOR))
/** /**
* Indicates that the corresponding function is `infix`. * Indicates that the corresponding function is `infix`.
*/ */
var KmFunction.isInfix: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_INFIX)) public var KmFunction.isInfix: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_INFIX))
/** /**
* Indicates that the corresponding function is `inline`. * Indicates that the corresponding function is `inline`.
*/ */
var KmFunction.isInline: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_INLINE)) public var KmFunction.isInline: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_INLINE))
/** /**
* Indicates that the corresponding function is `tailrec`. * Indicates that the corresponding function is `tailrec`.
*/ */
var KmFunction.isTailrec: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_TAILREC)) public var KmFunction.isTailrec: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_TAILREC))
/** /**
* Indicates that the corresponding function is `external`. * Indicates that the corresponding function is `external`.
*/ */
var KmFunction.isExternal: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_FUNCTION)) public var KmFunction.isExternal: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_FUNCTION))
/** /**
* Indicates that the corresponding function is `suspend`. * Indicates that the corresponding function is `suspend`.
*/ */
var KmFunction.isSuspend: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_SUSPEND)) public var KmFunction.isSuspend: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_SUSPEND))
/** /**
* Indicates that the corresponding function is `expect`. * Indicates that the corresponding function is `expect`.
*/ */
var KmFunction.isExpect: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_EXPECT_FUNCTION)) public var KmFunction.isExpect: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_EXPECT_FUNCTION))
/** /**
* Indicates that the corresponding function has non-stable parameter names, i.e., cannot be called with named arguments. * Indicates that the corresponding function has non-stable parameter names, i.e., cannot be called with named arguments.
@@ -259,7 +259,7 @@ var KmFunction.isExpect: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_EXPEC
* Currently, this attribute is Kotlin/Native-specific and is never set by Kotlin/JVM compiler. * Currently, this attribute is Kotlin/Native-specific and is never set by Kotlin/JVM compiler.
* This may be changed in the future. * This may be changed in the future.
*/ */
var KmFunction.hasNonStableParameterNames: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES)) public var KmFunction.hasNonStableParameterNames: Boolean by functionBooleanFlag(Flag(ProtoFlags.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES))
// --- PROPERTY --- // --- PROPERTY ---
@@ -269,7 +269,7 @@ var KmFunction.hasNonStableParameterNames: Boolean by functionBooleanFlag(Flag(P
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmProperty.visibility: Visibility by visibilityDelegate(KmProperty::flags) public var KmProperty.visibility: Visibility by visibilityDelegate(KmProperty::flags)
/** /**
* Represents modality of the corresponding property. * Represents modality of the corresponding property.
@@ -279,39 +279,39 @@ var KmProperty.visibility: Visibility by visibilityDelegate(KmProperty::flags)
* *
* [Modality.SEALED] is not applicable for [KmProperty] and setting it as a value results in undefined behavior. * [Modality.SEALED] is not applicable for [KmProperty] and setting it as a value results in undefined behavior.
*/ */
var KmProperty.modality: Modality by modalityDelegate(KmProperty::flags) public var KmProperty.modality: Modality by modalityDelegate(KmProperty::flags)
/** /**
* Represents kind of the corresponding property. * Represents kind of the corresponding property.
* *
* Kind indicates the origin of a declaration within a containing class. For details, see [MemberKind]. * Kind indicates the origin of a declaration within a containing class. For details, see [MemberKind].
*/ */
var KmProperty.kind: MemberKind by memberKindDelegate(KmProperty::flags) public var KmProperty.kind: MemberKind by memberKindDelegate(KmProperty::flags)
/** /**
* Indicates that the corresponding property is `var`. * Indicates that the corresponding property is `var`.
*/ */
var KmProperty.isVar: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_VAR)) public var KmProperty.isVar: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_VAR))
/** /**
* Indicates that the corresponding property has a getter. * Indicates that the corresponding property has a getter.
*/ */
var KmProperty.hasGetter: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_GETTER)) public var KmProperty.hasGetter: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_GETTER))
/** /**
* Indicates that the corresponding property has a setter. * Indicates that the corresponding property has a setter.
*/ */
var KmProperty.hasSetter: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_SETTER)) public var KmProperty.hasSetter: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_SETTER))
/** /**
* Indicates that the corresponding property is `const`. * Indicates that the corresponding property is `const`.
*/ */
var KmProperty.isConst: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_CONST)) public var KmProperty.isConst: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_CONST))
/** /**
* Indicates that the corresponding property is `lateinit`. * Indicates that the corresponding property is `lateinit`.
*/ */
var KmProperty.isLateinit: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_LATEINIT)) public var KmProperty.isLateinit: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_LATEINIT))
/** /**
* Indicates that the corresponding property has a constant value. On JVM, this flag allows an optimization similarly to * Indicates that the corresponding property has a constant value. On JVM, this flag allows an optimization similarly to
@@ -334,12 +334,12 @@ var KmProperty.isLateinit: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_LAT
* } * }
* ``` * ```
*/ */
var KmProperty.hasConstant: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_CONSTANT)) public var KmProperty.hasConstant: Boolean by propertyBooleanFlag(Flag(ProtoFlags.HAS_CONSTANT))
/** /**
* Indicates that the corresponding property is `external`. * Indicates that the corresponding property is `external`.
*/ */
var KmProperty.isExternal: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_PROPERTY)) public var KmProperty.isExternal: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_PROPERTY))
/** /**
* Indicates that the corresponding property is a delegated property. * Indicates that the corresponding property is a delegated property.
@@ -347,12 +347,12 @@ var KmProperty.isExternal: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXT
* Not to be confused with interface delegation. * Not to be confused with interface delegation.
* If a property was produced by interface delegation, it would have the corresponding [KmProperty.kind]. * If a property was produced by interface delegation, it would have the corresponding [KmProperty.kind].
*/ */
var KmProperty.isDelegated: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_DELEGATED)) public var KmProperty.isDelegated: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_DELEGATED))
/** /**
* Indicates that the corresponding property is `expect`. * Indicates that the corresponding property is `expect`.
*/ */
var KmProperty.isExpect: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXPECT_PROPERTY)) public var KmProperty.isExpect: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXPECT_PROPERTY))
// --- PROPERTY ACCESSOR --- // --- PROPERTY ACCESSOR ---
@@ -362,7 +362,7 @@ var KmProperty.isExpect: Boolean by propertyBooleanFlag(Flag(ProtoFlags.IS_EXPEC
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmPropertyAccessorAttributes.visibility: Visibility by visibilityDelegate(KmPropertyAccessorAttributes::flags) public var KmPropertyAccessorAttributes.visibility: Visibility by visibilityDelegate(KmPropertyAccessorAttributes::flags)
/** /**
* Represents modality of the corresponding property accessor. * Represents modality of the corresponding property accessor.
@@ -372,40 +372,40 @@ var KmPropertyAccessorAttributes.visibility: Visibility by visibilityDelegate(Km
* *
* [Modality.SEALED] is not applicable for [KmPropertyAccessorAttributes] and setting it as a value results in undefined behavior. * [Modality.SEALED] is not applicable for [KmPropertyAccessorAttributes] and setting it as a value results in undefined behavior.
*/ */
var KmPropertyAccessorAttributes.modality: Modality by modalityDelegate(KmPropertyAccessorAttributes::flags) public var KmPropertyAccessorAttributes.modality: Modality by modalityDelegate(KmPropertyAccessorAttributes::flags)
/** /**
* Indicates that the corresponding property accessor is not default, i.e. it has a body and/or annotations in the source code, * Indicates that the corresponding property accessor is not default, i.e. it has a body and/or annotations in the source code,
* or the property is delegated. * or the property is delegated.
*/ */
var KmPropertyAccessorAttributes.isNotDefault: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_NOT_DEFAULT)) public var KmPropertyAccessorAttributes.isNotDefault: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_NOT_DEFAULT))
/** /**
* Indicates that the corresponding property accessor is `external`. * Indicates that the corresponding property accessor is `external`.
*/ */
var KmPropertyAccessorAttributes.isExternal: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_ACCESSOR)) public var KmPropertyAccessorAttributes.isExternal: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_EXTERNAL_ACCESSOR))
/** /**
* Indicates that the corresponding property accessor is `inline`. * Indicates that the corresponding property accessor is `inline`.
*/ */
var KmPropertyAccessorAttributes.isInline: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_INLINE_ACCESSOR)) public var KmPropertyAccessorAttributes.isInline: Boolean by propertyAccessorBooleanFlag(Flag(ProtoFlags.IS_INLINE_ACCESSOR))
// --- TYPE & TYPE_PARAM // --- TYPE & TYPE_PARAM
/** /**
* Indicates that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation. * Indicates that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation.
*/ */
var KmType.isNullable: Boolean by typeBooleanFlag(FlagImpl(0, 1, 1)) public var KmType.isNullable: Boolean by typeBooleanFlag(FlagImpl(0, 1, 1))
/** /**
* Indicates that the corresponding type is `suspend`. * Indicates that the corresponding type is `suspend`.
*/ */
var KmType.isSuspend: Boolean by typeBooleanFlag(FlagImpl(ProtoFlags.SUSPEND_TYPE.offset + 1, ProtoFlags.SUSPEND_TYPE.bitWidth, 1)) public var KmType.isSuspend: Boolean by typeBooleanFlag(FlagImpl(ProtoFlags.SUSPEND_TYPE.offset + 1, ProtoFlags.SUSPEND_TYPE.bitWidth, 1))
/** /**
* Indicates that the corresponding type is [definitely non-null](https://kotlinlang.org/docs/whatsnew17.html#stable-definitely-non-nullable-types). * Indicates that the corresponding type is [definitely non-null](https://kotlinlang.org/docs/whatsnew17.html#stable-definitely-non-nullable-types).
*/ */
var KmType.isDefinitelyNonNull: Boolean by typeBooleanFlag( public var KmType.isDefinitelyNonNull: Boolean by typeBooleanFlag(
FlagImpl( FlagImpl(
ProtoFlags.DEFINITELY_NOT_NULL_TYPE.offset + 1, ProtoFlags.DEFINITELY_NOT_NULL_TYPE.offset + 1,
ProtoFlags.DEFINITELY_NOT_NULL_TYPE.bitWidth, ProtoFlags.DEFINITELY_NOT_NULL_TYPE.bitWidth,
@@ -417,7 +417,7 @@ var KmType.isDefinitelyNonNull: Boolean by typeBooleanFlag(
/** /**
* Indicates that the corresponding type parameter is `reified`. * Indicates that the corresponding type parameter is `reified`.
*/ */
var KmTypeParameter.isReified: Boolean by BooleanFlagDelegate(KmTypeParameter::flags, FlagImpl(0, 1, 1)) public var KmTypeParameter.isReified: Boolean by BooleanFlagDelegate(KmTypeParameter::flags, FlagImpl(0, 1, 1))
// --- TYPE ALIAS --- // --- TYPE ALIAS ---
@@ -427,7 +427,7 @@ var KmTypeParameter.isReified: Boolean by BooleanFlagDelegate(KmTypeParameter::f
* Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable. * Note that Kotlin metadata has an extended list of visibilities; some of them are non-denotable.
* For additional details, see [Visibility]. * For additional details, see [Visibility].
*/ */
var KmTypeAlias.visibility: Visibility by visibilityDelegate(KmTypeAlias::flags) public var KmTypeAlias.visibility: Visibility by visibilityDelegate(KmTypeAlias::flags)
// --- VALUE PARAMETER --- // --- VALUE PARAMETER ---
@@ -439,17 +439,17 @@ var KmTypeAlias.visibility: Visibility by visibilityDelegate(KmTypeAlias::flags)
* parameter in the derived method does _not_ declare the default value, but the parameter is * parameter in the derived method does _not_ declare the default value, but the parameter is
* still optional at the call site because the default value from the base method is used. * still optional at the call site because the default value from the base method is used.
*/ */
var KmValueParameter.declaresDefaultValue: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.DECLARES_DEFAULT_VALUE)) public var KmValueParameter.declaresDefaultValue: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.DECLARES_DEFAULT_VALUE))
/** /**
* Indicates that the corresponding value parameter is `crossinline`. * Indicates that the corresponding value parameter is `crossinline`.
*/ */
var KmValueParameter.isCrossinline: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.IS_CROSSINLINE)) public var KmValueParameter.isCrossinline: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.IS_CROSSINLINE))
/** /**
* Indicates that the corresponding value parameter is `noinline`. * Indicates that the corresponding value parameter is `noinline`.
*/ */
var KmValueParameter.isNoinline: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.IS_NOINLINE)) public var KmValueParameter.isNoinline: Boolean by valueParameterBooleanFlag(Flag(ProtoFlags.IS_NOINLINE))
// --- EFFECT EXPRESSION --- // --- EFFECT EXPRESSION ---
@@ -460,7 +460,7 @@ var KmValueParameter.isNoinline: Boolean by valueParameterBooleanFlag(Flag(Proto
* may change in a subsequent release. * may change in a subsequent release.
*/ */
@ExperimentalContracts @ExperimentalContracts
var KmEffectExpression.isNegated: Boolean by BooleanFlagDelegate(KmEffectExpression::flags, Flag(ProtoFlags.IS_NEGATED)) public var KmEffectExpression.isNegated: Boolean by BooleanFlagDelegate(KmEffectExpression::flags, Flag(ProtoFlags.IS_NEGATED))
/** /**
* Indicates that the corresponding effect expression checks whether a value of some variable is `null`. * Indicates that the corresponding effect expression checks whether a value of some variable is `null`.
@@ -469,4 +469,4 @@ var KmEffectExpression.isNegated: Boolean by BooleanFlagDelegate(KmEffectExpress
* may change in a subsequent release. * may change in a subsequent release.
*/ */
@ExperimentalContracts @ExperimentalContracts
var KmEffectExpression.isNullCheckPredicate: Boolean by BooleanFlagDelegate(KmEffectExpression::flags, Flag(ProtoFlags.IS_NULL_CHECK_PREDICATE)) public var KmEffectExpression.isNullCheckPredicate: Boolean by BooleanFlagDelegate(KmEffectExpression::flags, Flag(ProtoFlags.IS_NULL_CHECK_PREDICATE))
@@ -16,14 +16,14 @@ package kotlinx.metadata
* If this name starts with '.', it represents a local class or an anonymous object. This is used by the Kotlin compiler * 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. * to prevent lookup of this name in the resolution.
*/ */
typealias ClassName = String // Not a value class because of Java usages public typealias ClassName = String // Not a value class because of Java usages
/** /**
* Checks whether a class name [this] represents a local class or an anonymous object. * Checks whether a class name [this] represents a local class or an anonymous object.
* *
* A class name represents a local class or an anonymous object if it starts with '.' (dot). * A class name represents a local class or an anonymous object if it starts with '.' (dot).
*/ */
fun ClassName.isLocalClassName(): Boolean = this.startsWith(".") public fun ClassName.isLocalClassName(): Boolean = this.startsWith(".")
// Deprecated since 0.6.1, should be error in 0.7.0+ // Deprecated since 0.6.1, should be error in 0.7.0+
@Deprecated( @Deprecated(
@@ -31,4 +31,4 @@ fun ClassName.isLocalClassName(): Boolean = this.startsWith(".")
ReplaceWith("isLocalClassName()"), ReplaceWith("isLocalClassName()"),
level = DeprecationLevel.WARNING level = DeprecationLevel.WARNING
) )
val ClassName.isLocal: Boolean get() = isLocalClassName() public val ClassName.isLocal: Boolean get() = isLocalClassName()
@@ -30,7 +30,7 @@ import kotlin.reflect.KClass
* In case an extension visitor of an unrelated type is returned, the code using the visitor API must ignore that visitor. * In case an extension visitor of an unrelated type is returned, the code using the visitor API must ignore that visitor.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
class KmExtensionType(private val klass: KClass<out KmExtensionVisitor>) { public class KmExtensionType(private val klass: KClass<out KmExtensionVisitor>) {
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
other is KmExtensionType && klass == other.klass other is KmExtensionType && klass == other.klass
@@ -45,69 +45,69 @@ class KmExtensionType(private val klass: KClass<out KmExtensionVisitor>) {
* A base interface for all extension visitors. * A base interface for all extension visitors.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmExtensionVisitor { public interface KmExtensionVisitor {
/** /**
* Type of this extension visitor. * Type of this extension visitor.
*/ */
val type: KmExtensionType public val type: KmExtensionType
} }
/** /**
* A visitor to visit platform-specific extensions for a declaration container, such as a class or a package fragment. * A visitor to visit platform-specific extensions for a declaration container, such as a class or a package fragment.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmDeclarationContainerExtensionVisitor : KmExtensionVisitor public interface KmDeclarationContainerExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a class. * A visitor to visit platform-specific extensions for a class.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmClassExtensionVisitor : KmDeclarationContainerExtensionVisitor public interface KmClassExtensionVisitor : KmDeclarationContainerExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a package fragment. * A visitor to visit platform-specific extensions for a package fragment.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmPackageExtensionVisitor : KmDeclarationContainerExtensionVisitor public interface KmPackageExtensionVisitor : KmDeclarationContainerExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a function. * A visitor to visit platform-specific extensions for a function.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmFunctionExtensionVisitor : KmExtensionVisitor public interface KmFunctionExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a property. * A visitor to visit platform-specific extensions for a property.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmPropertyExtensionVisitor : KmExtensionVisitor public interface KmPropertyExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a constructor. * A visitor to visit platform-specific extensions for a constructor.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmConstructorExtensionVisitor : KmExtensionVisitor public interface KmConstructorExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a type parameter. * A visitor to visit platform-specific extensions for a type parameter.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmTypeParameterExtensionVisitor : KmExtensionVisitor public interface KmTypeParameterExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a type. * A visitor to visit platform-specific extensions for a type.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmTypeExtensionVisitor : KmExtensionVisitor public interface KmTypeExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a type alias. * A visitor to visit platform-specific extensions for a type alias.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmTypeAliasExtensionVisitor : KmExtensionVisitor public interface KmTypeAliasExtensionVisitor : KmExtensionVisitor
/** /**
* A visitor to visit platform-specific extensions for a value parameter. * A visitor to visit platform-specific extensions for a value parameter.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmValueParameterExtensionVisitor : KmExtensionVisitor public interface KmValueParameterExtensionVisitor : KmExtensionVisitor
@@ -30,8 +30,8 @@ private const val prefix = "Flag API is deprecated. Please use"
* *
* v.visitFunction(flagsOf(Flag.Function.IS_DECLARATION, Flag.Function.IS_INLINE), "foo") * v.visitFunction(flagsOf(Flag.Function.IS_DECLARATION, Flag.Function.IS_INLINE), "foo")
* *
* Flag common to multiple kinds of Kotlin declarations ("common flags") are declared in [Flag.Common]. * Flags common to multiple kinds of Kotlin declarations ("common flags") are declared in [Flag.Common].
* Flag applicable to specific kinds of declarations ("declaration-specific flags") are declared in nested objects of the [Flag] object. * Flags applicable to specific kinds of declarations ("declaration-specific flags") are declared in nested objects of the [Flag] object.
* *
* Some flags are mutually exclusive, i.e. there are "flag groups" such that no more than one flag from each group can be present * Some flags are mutually exclusive, i.e. there are "flag groups" such that no more than one flag from each group can be present
* in the same bitmask. Among common flags, there are the following flag groups: * in the same bitmask. Among common flags, there are the following flag groups:
@@ -45,16 +45,16 @@ private const val prefix = "Flag API is deprecated. Please use"
*/ */
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility") @Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility")
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class Flag internal constructor() { public abstract class Flag internal constructor() {
/** /**
* Checks whether the flag is present in the given bitmask. * Checks whether the flag is present in the given bitmask.
*/ */
abstract operator fun invoke(flags: Int): Boolean public abstract operator fun invoke(flags: Int): Boolean
/** @suppress deprecated */ /** @suppress deprecated */
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility") @Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility")
companion object Common { public companion object Common {
/** /**
* Signifies that the corresponding declaration has at least one annotation. * Signifies that the corresponding declaration has at least one annotation.
* *
@@ -64,7 +64,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix corresponding extension on a node, e.g. KmClass.hasAnnotations") @Deprecated("$prefix corresponding extension on a node, e.g. KmClass.hasAnnotations")
val HAS_ANNOTATIONS: Flag = FlagImpl(F.HAS_ANNOTATIONS) public val HAS_ANNOTATIONS: Flag = FlagImpl(F.HAS_ANNOTATIONS)
/** /**
@@ -72,28 +72,28 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_INTERNAL: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.INTERNAL_VALUE) public val IS_INTERNAL: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.INTERNAL_VALUE)
/** /**
* A visibility flag, signifying that the corresponding declaration is `private`. * A visibility flag, signifying that the corresponding declaration is `private`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_PRIVATE: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PRIVATE_VALUE) public val IS_PRIVATE: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PRIVATE_VALUE)
/** /**
* A visibility flag, signifying that the corresponding declaration is `protected`. * A visibility flag, signifying that the corresponding declaration is `protected`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_PROTECTED: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PROTECTED_VALUE) public val IS_PROTECTED: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PROTECTED_VALUE)
/** /**
* A visibility flag, signifying that the corresponding declaration is `public`. * A visibility flag, signifying that the corresponding declaration is `public`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_PUBLIC: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PUBLIC_VALUE) public val IS_PUBLIC: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PUBLIC_VALUE)
/** /**
* A visibility flag, signifying that the corresponding declaration is "private-to-this", which is a non-denotable visibility of * A visibility flag, signifying that the corresponding declaration is "private-to-this", which is a non-denotable visibility of
@@ -101,7 +101,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_PRIVATE_TO_THIS: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PRIVATE_TO_THIS_VALUE) public val IS_PRIVATE_TO_THIS: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.PRIVATE_TO_THIS_VALUE)
/** /**
* A visibility flag, signifying that the corresponding declaration is local, i.e. declared inside a code block * A visibility flag, signifying that the corresponding declaration is local, i.e. declared inside a code block
@@ -109,7 +109,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility") @Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility")
val IS_LOCAL: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.LOCAL_VALUE) public val IS_LOCAL: Flag = FlagImpl(F.VISIBILITY, ProtoVisibility.LOCAL_VALUE)
/** /**
@@ -117,28 +117,28 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality") @Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality")
val IS_FINAL: Flag = FlagImpl(F.MODALITY, ProtoModality.FINAL_VALUE) public val IS_FINAL: Flag = FlagImpl(F.MODALITY, ProtoModality.FINAL_VALUE)
/** /**
* A modality flag, signifying that the corresponding declaration is `open`. * A modality flag, signifying that the corresponding declaration is `open`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality") @Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality")
val IS_OPEN: Flag = FlagImpl(F.MODALITY, ProtoModality.OPEN_VALUE) public val IS_OPEN: Flag = FlagImpl(F.MODALITY, ProtoModality.OPEN_VALUE)
/** /**
* A modality flag, signifying that the corresponding declaration is `abstract`. * A modality flag, signifying that the corresponding declaration is `abstract`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality") @Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality")
val IS_ABSTRACT: Flag = FlagImpl(F.MODALITY, ProtoModality.ABSTRACT_VALUE) public val IS_ABSTRACT: Flag = FlagImpl(F.MODALITY, ProtoModality.ABSTRACT_VALUE)
/** /**
* A modality flag, signifying that the corresponding declaration is `sealed`. * A modality flag, signifying that the corresponding declaration is `sealed`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality") @Deprecated("$prefix modality extension on a node, e.g. KmClass.modality")
val IS_SEALED: Flag = FlagImpl(F.MODALITY, ProtoModality.SEALED_VALUE) public val IS_SEALED: Flag = FlagImpl(F.MODALITY, ProtoModality.SEALED_VALUE)
} }
/** /**
@@ -149,55 +149,55 @@ abstract class Flag internal constructor() {
* [IS_COMPANION_OBJECT] * [IS_COMPANION_OBJECT]
*/ */
@Deprecated("$prefix corresponding extension on a KmClass") @Deprecated("$prefix corresponding extension on a KmClass")
object Class { public object Class {
/** /**
* A class kind flag, signifying that the corresponding class is a usual `class`. * A class kind flag, signifying that the corresponding class is a usual `class`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.CLASS_VALUE) public val IS_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.CLASS_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is an `interface`. * A class kind flag, signifying that the corresponding class is an `interface`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_INTERFACE: Flag = FlagImpl(F.CLASS_KIND, ClassKind.INTERFACE_VALUE) public val IS_INTERFACE: Flag = FlagImpl(F.CLASS_KIND, ClassKind.INTERFACE_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is an `enum class`. * A class kind flag, signifying that the corresponding class is an `enum class`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_ENUM_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ENUM_CLASS_VALUE) public val IS_ENUM_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ENUM_CLASS_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is an enum entry. * A class kind flag, signifying that the corresponding class is an enum entry.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_ENUM_ENTRY: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ENUM_ENTRY_VALUE) public val IS_ENUM_ENTRY: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ENUM_ENTRY_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is an `annotation class`. * A class kind flag, signifying that the corresponding class is an `annotation class`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_ANNOTATION_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ANNOTATION_CLASS_VALUE) public val IS_ANNOTATION_CLASS: Flag = FlagImpl(F.CLASS_KIND, ClassKind.ANNOTATION_CLASS_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is a non-companion `object`. * A class kind flag, signifying that the corresponding class is a non-companion `object`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_OBJECT: Flag = FlagImpl(F.CLASS_KIND, ClassKind.OBJECT_VALUE) public val IS_OBJECT: Flag = FlagImpl(F.CLASS_KIND, ClassKind.OBJECT_VALUE)
/** /**
* A class kind flag, signifying that the corresponding class is a `companion object`. * A class kind flag, signifying that the corresponding class is a `companion object`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.kind") @Deprecated("$prefix KmClass.kind")
val IS_COMPANION_OBJECT: Flag = FlagImpl(F.CLASS_KIND, ClassKind.COMPANION_OBJECT_VALUE) public val IS_COMPANION_OBJECT: Flag = FlagImpl(F.CLASS_KIND, ClassKind.COMPANION_OBJECT_VALUE)
/** /**
@@ -205,28 +205,28 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isInner") @Deprecated("$prefix KmClass.isInner")
val IS_INNER: Flag = FlagImpl(F.IS_INNER) public val IS_INNER: Flag = FlagImpl(F.IS_INNER)
/** /**
* Signifies that the corresponding class is `data`. * Signifies that the corresponding class is `data`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isData") @Deprecated("$prefix KmClass.isData")
val IS_DATA: Flag = FlagImpl(F.IS_DATA) public val IS_DATA: Flag = FlagImpl(F.IS_DATA)
/** /**
* Signifies that the corresponding class is `external`. * Signifies that the corresponding class is `external`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isExternal") @Deprecated("$prefix KmClass.isExternal")
val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_CLASS) public val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_CLASS)
/** /**
* Signifies that the corresponding class is `expect`. * Signifies that the corresponding class is `expect`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isExpect") @Deprecated("$prefix KmClass.isExpect")
val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_CLASS) public val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_CLASS)
@JvmField @JvmField
@Deprecated( @Deprecated(
@@ -234,21 +234,21 @@ abstract class Flag internal constructor() {
level = DeprecationLevel.ERROR level = DeprecationLevel.ERROR
) )
@Suppress("unused") @Suppress("unused")
val IS_INLINE: Flag = FlagImpl(F.IS_VALUE_CLASS) public val IS_INLINE: Flag = FlagImpl(F.IS_VALUE_CLASS)
/** /**
* Signifies that the corresponding class is either a pre-Kotlin-1.5 `inline` class, or a 1.5+ `value` class. * Signifies that the corresponding class is either a pre-Kotlin-1.5 `inline` class, or a 1.5+ `value` class.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isValue") @Deprecated("$prefix KmClass.isValue")
val IS_VALUE: Flag = FlagImpl(F.IS_VALUE_CLASS) public val IS_VALUE: Flag = FlagImpl(F.IS_VALUE_CLASS)
/** /**
* Signifies that the corresponding class is a functional interface, i.e. marked with the keyword `fun`. * Signifies that the corresponding class is a functional interface, i.e. marked with the keyword `fun`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.isFun") @Deprecated("$prefix KmClass.isFun")
val IS_FUN: Flag = FlagImpl(F.IS_FUN_INTERFACE) public val IS_FUN: Flag = FlagImpl(F.IS_FUN_INTERFACE)
/** /**
* Signifies that the corresponding enum class has ".entries" property in bytecode. * Signifies that the corresponding enum class has ".entries" property in bytecode.
@@ -256,31 +256,31 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmClass.hasEnumEntries") @Deprecated("$prefix KmClass.hasEnumEntries")
val HAS_ENUM_ENTRIES: Flag = FlagImpl(F.HAS_ENUM_ENTRIES) public val HAS_ENUM_ENTRIES: Flag = FlagImpl(F.HAS_ENUM_ENTRIES)
} }
/** /**
* A container of flags applicable to Kotlin constructors. * A container of flags applicable to Kotlin constructors.
*/ */
object Constructor { public object Constructor {
@JvmField @JvmField
@Deprecated("Use IS_SECONDARY which holds inverted value instead.", level = DeprecationLevel.ERROR) @Deprecated("Use IS_SECONDARY which holds inverted value instead.", level = DeprecationLevel.ERROR)
@Suppress("unused") @Suppress("unused")
val IS_PRIMARY: Flag = FlagImpl(F.IS_SECONDARY, 0) public val IS_PRIMARY: Flag = FlagImpl(F.IS_SECONDARY, 0)
/** /**
* Signifies that the corresponding constructor is secondary, i.e. declared not in the class header, but in the class body. * Signifies that the corresponding constructor is secondary, i.e. declared not in the class header, but in the class body.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmConstructor.isSecondary") @Deprecated("$prefix KmConstructor.isSecondary")
val IS_SECONDARY: Flag = FlagImpl(F.IS_SECONDARY) public val IS_SECONDARY: Flag = FlagImpl(F.IS_SECONDARY)
/** /**
* Signifies that the corresponding constructor has non-stable parameter names, i.e. cannot be called with named arguments. * Signifies that the corresponding constructor has non-stable parameter names, i.e. cannot be called with named arguments.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmConstructor.hasNonStableParameterNames") @Deprecated("$prefix KmConstructor.hasNonStableParameterNames")
val HAS_NON_STABLE_PARAMETER_NAMES: Flag = FlagImpl(F.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES) public val HAS_NON_STABLE_PARAMETER_NAMES: Flag = FlagImpl(F.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES)
} }
/** /**
@@ -289,13 +289,13 @@ abstract class Flag internal constructor() {
* In addition to the common flag groups, the following flag groups exist for function flags: * In addition to the common flag groups, the following flag groups exist for function flags:
* * member kind flags: [IS_DECLARATION], [IS_FAKE_OVERRIDE], [IS_DELEGATION], [IS_SYNTHESIZED] * * member kind flags: [IS_DECLARATION], [IS_FAKE_OVERRIDE], [IS_DELEGATION], [IS_SYNTHESIZED]
*/ */
object Function { public object Function {
/** /**
* A member kind flag, signifying that the corresponding function is explicitly declared in the containing class. * A member kind flag, signifying that the corresponding function is explicitly declared in the containing class.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.kind") @Deprecated("$prefix KmFunction.kind")
val IS_DECLARATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DECLARATION_VALUE) public val IS_DECLARATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DECLARATION_VALUE)
/** /**
* A member kind flag, signifying that the corresponding function exists in the containing class because a function with a suitable * A member kind flag, signifying that the corresponding function exists in the containing class because a function with a suitable
@@ -303,7 +303,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.kind") @Deprecated("$prefix KmFunction.kind")
val IS_FAKE_OVERRIDE: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.FAKE_OVERRIDE_VALUE) public val IS_FAKE_OVERRIDE: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.FAKE_OVERRIDE_VALUE)
/** /**
* A member kind flag, signifying that the corresponding function exists in the containing class because it has been produced * A member kind flag, signifying that the corresponding function exists in the containing class because it has been produced
@@ -311,7 +311,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.kind") @Deprecated("$prefix KmFunction.kind")
val IS_DELEGATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DELEGATION_VALUE) public val IS_DELEGATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DELEGATION_VALUE)
/** /**
* A member kind flag, signifying that the corresponding function exists in the containing class because it has been synthesized * A member kind flag, signifying that the corresponding function exists in the containing class because it has been synthesized
@@ -319,63 +319,63 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.kind") @Deprecated("$prefix KmFunction.kind")
val IS_SYNTHESIZED: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE) public val IS_SYNTHESIZED: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE)
/** /**
* Signifies that the corresponding function is `operator`. * Signifies that the corresponding function is `operator`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isOperator") @Deprecated("$prefix KmFunction.isOperator")
val IS_OPERATOR: Flag = FlagImpl(F.IS_OPERATOR) public val IS_OPERATOR: Flag = FlagImpl(F.IS_OPERATOR)
/** /**
* Signifies that the corresponding function is `infix`. * Signifies that the corresponding function is `infix`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isInfix") @Deprecated("$prefix KmFunction.isInfix")
val IS_INFIX: Flag = FlagImpl(F.IS_INFIX) public val IS_INFIX: Flag = FlagImpl(F.IS_INFIX)
/** /**
* Signifies that the corresponding function is `inline`. * Signifies that the corresponding function is `inline`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isInline") @Deprecated("$prefix KmFunction.isInline")
val IS_INLINE: Flag = FlagImpl(F.IS_INLINE) public val IS_INLINE: Flag = FlagImpl(F.IS_INLINE)
/** /**
* Signifies that the corresponding function is `tailrec`. * Signifies that the corresponding function is `tailrec`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isTailrec") @Deprecated("$prefix KmFunction.isTailrec")
val IS_TAILREC: Flag = FlagImpl(F.IS_TAILREC) public val IS_TAILREC: Flag = FlagImpl(F.IS_TAILREC)
/** /**
* Signifies that the corresponding function is `external`. * Signifies that the corresponding function is `external`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isExternalFunction") @Deprecated("$prefix KmFunction.isExternalFunction")
val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_FUNCTION) public val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_FUNCTION)
/** /**
* Signifies that the corresponding function is `suspend`. * Signifies that the corresponding function is `suspend`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isSuspend") @Deprecated("$prefix KmFunction.isSuspend")
val IS_SUSPEND: Flag = FlagImpl(F.IS_SUSPEND) public val IS_SUSPEND: Flag = FlagImpl(F.IS_SUSPEND)
/** /**
* Signifies that the corresponding function is `expect`. * Signifies that the corresponding function is `expect`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isExpectFunction") @Deprecated("$prefix KmFunction.isExpectFunction")
val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_FUNCTION) public val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_FUNCTION)
/** /**
* Signifies that the corresponding function has non-stable parameter names, i.e. cannot be called with named arguments. * Signifies that the corresponding function has non-stable parameter names, i.e. cannot be called with named arguments.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmFunction.isFunctionWithNonStableParameterNames") @Deprecated("$prefix KmFunction.isFunctionWithNonStableParameterNames")
val HAS_NON_STABLE_PARAMETER_NAMES: Flag = FlagImpl(F.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES) public val HAS_NON_STABLE_PARAMETER_NAMES: Flag = FlagImpl(F.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES)
} }
/** /**
@@ -384,13 +384,13 @@ abstract class Flag internal constructor() {
* In addition to the common flag groups, the following flag groups exist for property flags: * In addition to the common flag groups, the following flag groups exist for property flags:
* * member kind flags: [IS_DECLARATION], [IS_FAKE_OVERRIDE], [IS_DELEGATION], [IS_SYNTHESIZED] * * member kind flags: [IS_DECLARATION], [IS_FAKE_OVERRIDE], [IS_DELEGATION], [IS_SYNTHESIZED]
*/ */
object Property { public object Property {
/** /**
* A member kind flag, signifying that the corresponding property is explicitly declared in the containing class. * A member kind flag, signifying that the corresponding property is explicitly declared in the containing class.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.kind") @Deprecated("$prefix KmProperty.kind")
val IS_DECLARATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DECLARATION_VALUE) public val IS_DECLARATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DECLARATION_VALUE)
/** /**
* A member kind flag, signifying that the corresponding property exists in the containing class because a property with a suitable * A member kind flag, signifying that the corresponding property exists in the containing class because a property with a suitable
@@ -398,7 +398,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.kind") @Deprecated("$prefix KmProperty.kind")
val IS_FAKE_OVERRIDE: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.FAKE_OVERRIDE_VALUE) public val IS_FAKE_OVERRIDE: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.FAKE_OVERRIDE_VALUE)
/** /**
* A member kind flag, signifying that the corresponding property exists in the containing class because it has been produced * A member kind flag, signifying that the corresponding property exists in the containing class because it has been produced
@@ -406,7 +406,7 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.kind") @Deprecated("$prefix KmProperty.kind")
val IS_DELEGATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DELEGATION_VALUE) public val IS_DELEGATION: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.DELEGATION_VALUE)
/** /**
* A member kind flag, signifying that the corresponding property exists in the containing class because it has been synthesized * A member kind flag, signifying that the corresponding property exists in the containing class because it has been synthesized
@@ -414,42 +414,42 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.kind") @Deprecated("$prefix KmProperty.kind")
val IS_SYNTHESIZED: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE) public val IS_SYNTHESIZED: Flag = FlagImpl(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE)
/** /**
* Signifies that the corresponding property is `var`. * Signifies that the corresponding property is `var`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isVar") @Deprecated("$prefix KmProperty.isVar")
val IS_VAR: Flag = FlagImpl(F.IS_VAR) public val IS_VAR: Flag = FlagImpl(F.IS_VAR)
/** /**
* Signifies that the corresponding property has a getter. * Signifies that the corresponding property has a getter.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.hasGetter") @Deprecated("$prefix KmProperty.hasGetter")
val HAS_GETTER: Flag = FlagImpl(F.HAS_GETTER) public val HAS_GETTER: Flag = FlagImpl(F.HAS_GETTER)
/** /**
* Signifies that the corresponding property has a setter. * Signifies that the corresponding property has a setter.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.hasSetter") @Deprecated("$prefix KmProperty.hasSetter")
val HAS_SETTER: Flag = FlagImpl(F.HAS_SETTER) public val HAS_SETTER: Flag = FlagImpl(F.HAS_SETTER)
/** /**
* Signifies that the corresponding property is `const`. * Signifies that the corresponding property is `const`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isConst") @Deprecated("$prefix KmProperty.isConst")
val IS_CONST: Flag = FlagImpl(F.IS_CONST) public val IS_CONST: Flag = FlagImpl(F.IS_CONST)
/** /**
* Signifies that the corresponding property is `lateinit`. * Signifies that the corresponding property is `lateinit`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isLateinit") @Deprecated("$prefix KmProperty.isLateinit")
val IS_LATEINIT: Flag = FlagImpl(F.IS_LATEINIT) public val IS_LATEINIT: Flag = FlagImpl(F.IS_LATEINIT)
/** /**
* Signifies that the corresponding property has a constant value. On JVM, this flag allows an optimization similarly to * Signifies that the corresponding property has a constant value. On JVM, this flag allows an optimization similarly to
@@ -458,74 +458,74 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.hasConstant") @Deprecated("$prefix KmProperty.hasConstant")
val HAS_CONSTANT: Flag = FlagImpl(F.HAS_CONSTANT) public val HAS_CONSTANT: Flag = FlagImpl(F.HAS_CONSTANT)
/** /**
* Signifies that the corresponding property is `external`. * Signifies that the corresponding property is `external`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isExternal") @Deprecated("$prefix KmProperty.isExternal")
val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_PROPERTY) public val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_PROPERTY)
/** /**
* Signifies that the corresponding property is a delegated property. * Signifies that the corresponding property is a delegated property.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isDelegated") @Deprecated("$prefix KmProperty.isDelegated")
val IS_DELEGATED: Flag = FlagImpl(F.IS_DELEGATED) public val IS_DELEGATED: Flag = FlagImpl(F.IS_DELEGATED)
/** /**
* Signifies that the corresponding property is `expect`. * Signifies that the corresponding property is `expect`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmProperty.isExpect") @Deprecated("$prefix KmProperty.isExpect")
val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_PROPERTY) public val IS_EXPECT: Flag = FlagImpl(F.IS_EXPECT_PROPERTY)
} }
/** /**
* A container of flags applicable to Kotlin property getters and setters. * A container of flags applicable to Kotlin property getters and setters.
*/ */
object PropertyAccessor { public object PropertyAccessor {
/** /**
* Signifies that the corresponding property accessor is not default, i.e. it has a body and/or annotations in the source code. * Signifies that the corresponding property accessor is not default, i.e. it has a body and/or annotations in the source code.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmPropertyAccessorAttributes.isNotDefault") @Deprecated("$prefix KmPropertyAccessorAttributes.isNotDefault")
val IS_NOT_DEFAULT: Flag = FlagImpl(F.IS_NOT_DEFAULT) public val IS_NOT_DEFAULT: Flag = FlagImpl(F.IS_NOT_DEFAULT)
/** /**
* Signifies that the corresponding property accessor is `external`. * Signifies that the corresponding property accessor is `external`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmPropertyAccessorAttributes.isExternal") @Deprecated("$prefix KmPropertyAccessorAttributes.isExternal")
val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_ACCESSOR) public val IS_EXTERNAL: Flag = FlagImpl(F.IS_EXTERNAL_ACCESSOR)
/** /**
* Signifies that the corresponding property accessor is `inline`. * Signifies that the corresponding property accessor is `inline`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmPropertyAccessorAttributes.isInline") @Deprecated("$prefix KmPropertyAccessorAttributes.isInline")
val IS_INLINE: Flag = FlagImpl(F.IS_INLINE_ACCESSOR) public val IS_INLINE: Flag = FlagImpl(F.IS_INLINE_ACCESSOR)
} }
/** /**
* A container of flags applicable to Kotlin types. * A container of flags applicable to Kotlin types.
*/ */
object Type { public object Type {
/** /**
* Signifies that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation. * Signifies that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmType.isNullable") @Deprecated("$prefix KmType.isNullable")
val IS_NULLABLE: Flag = FlagImpl(0, 1, 1) public val IS_NULLABLE: Flag = FlagImpl(0, 1, 1)
/** /**
* Signifies that the corresponding type is `suspend`. * Signifies that the corresponding type is `suspend`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmType.isSuspend") @Deprecated("$prefix KmType.isSuspend")
val IS_SUSPEND: Flag = FlagImpl(F.SUSPEND_TYPE.offset + 1, F.SUSPEND_TYPE.bitWidth, 1) public val IS_SUSPEND: Flag = FlagImpl(F.SUSPEND_TYPE.offset + 1, F.SUSPEND_TYPE.bitWidth, 1)
/** /**
* Signifies that the corresponding type is * Signifies that the corresponding type is
@@ -533,25 +533,25 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmType.isDefinitelyNonNull") @Deprecated("$prefix KmType.isDefinitelyNonNull")
val IS_DEFINITELY_NON_NULL: Flag = FlagImpl(F.DEFINITELY_NOT_NULL_TYPE.offset + 1, F.DEFINITELY_NOT_NULL_TYPE.bitWidth, 1) public val IS_DEFINITELY_NON_NULL: Flag = FlagImpl(F.DEFINITELY_NOT_NULL_TYPE.offset + 1, F.DEFINITELY_NOT_NULL_TYPE.bitWidth, 1)
} }
/** /**
* A container of flags applicable to Kotlin type parameters. * A container of flags applicable to Kotlin type parameters.
*/ */
object TypeParameter { public object TypeParameter {
/** /**
* Signifies that the corresponding type parameter is `reified`. * Signifies that the corresponding type parameter is `reified`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmTypeParameter.isReified") @Deprecated("$prefix KmTypeParameter.isReified")
val IS_REIFIED: Flag = FlagImpl(0, 1, 1) public val IS_REIFIED: Flag = FlagImpl(0, 1, 1)
} }
/** /**
* A container of flags applicable to Kotlin value parameters. * A container of flags applicable to Kotlin value parameters.
*/ */
object ValueParameter { public object ValueParameter {
/** /**
* Signifies that the corresponding value parameter declares a default value. Note that the default value itself can be a complex * Signifies that the corresponding value parameter declares a default value. Note that the default value itself can be a complex
* expression and is not available via metadata. Also note that in case of an override of a parameter with default value, the * expression and is not available via metadata. Also note that in case of an override of a parameter with default value, the
@@ -560,21 +560,21 @@ abstract class Flag internal constructor() {
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmValueParameter.declaresDefaultValue") @Deprecated("$prefix KmValueParameter.declaresDefaultValue")
val DECLARES_DEFAULT_VALUE: Flag = FlagImpl(F.DECLARES_DEFAULT_VALUE) public val DECLARES_DEFAULT_VALUE: Flag = FlagImpl(F.DECLARES_DEFAULT_VALUE)
/** /**
* Signifies that the corresponding value parameter is `crossinline`. * Signifies that the corresponding value parameter is `crossinline`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmValueParameter.isCrossinline") @Deprecated("$prefix KmValueParameter.isCrossinline")
val IS_CROSSINLINE: Flag = FlagImpl(F.IS_CROSSINLINE) public val IS_CROSSINLINE: Flag = FlagImpl(F.IS_CROSSINLINE)
/** /**
* Signifies that the corresponding value parameter is `noinline`. * Signifies that the corresponding value parameter is `noinline`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmValueParameter.isNoinline") @Deprecated("$prefix KmValueParameter.isNoinline")
val IS_NOINLINE: Flag = FlagImpl(F.IS_NOINLINE) public val IS_NOINLINE: Flag = FlagImpl(F.IS_NOINLINE)
} }
/** /**
@@ -583,19 +583,19 @@ abstract class Flag internal constructor() {
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format * Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
* may change in a subsequent release. * may change in a subsequent release.
*/ */
object EffectExpression { public object EffectExpression {
/** /**
* Signifies that the corresponding effect expression should be negated to compute the proposition or the conclusion of an effect. * Signifies that the corresponding effect expression should be negated to compute the proposition or the conclusion of an effect.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmEffectExpression.isNegated") @Deprecated("$prefix KmEffectExpression.isNegated")
val IS_NEGATED: Flag = FlagImpl(F.IS_NEGATED) public val IS_NEGATED: Flag = FlagImpl(F.IS_NEGATED)
/** /**
* Signifies that the corresponding effect expression checks whether a value of some variable is `null`. * Signifies that the corresponding effect expression checks whether a value of some variable is `null`.
*/ */
@JvmField @JvmField
@Deprecated("$prefix KmEffectExpression.isNullCheckPredicate") @Deprecated("$prefix KmEffectExpression.isNullCheckPredicate")
val IS_NULL_CHECK_PREDICATE: Flag = FlagImpl(F.IS_NULL_CHECK_PREDICATE) public val IS_NULL_CHECK_PREDICATE: Flag = FlagImpl(F.IS_NULL_CHECK_PREDICATE)
} }
} }
@@ -18,7 +18,7 @@ import kotlinx.metadata.internal.FlagImpl
"Flags API is deprecated and this typealias will be removed. Use Int directly and then migrate to corresponding Km nodes extensions, e.g. KmClass.visibility", "Flags API is deprecated and this typealias will be removed. Use Int directly and then migrate to corresponding Km nodes extensions, e.g. KmClass.visibility",
ReplaceWith("Int") ReplaceWith("Int")
) )
typealias Flags = Int public typealias Flags = Int
/** /**
* Combines several flags into an integer bitmask. * Combines several flags into an integer bitmask.
@@ -31,5 +31,5 @@ typealias Flags = Int
@Deprecated( @Deprecated(
"Flags API is deprecated and this function will be removed. Create Km nodes directly and then use corresponding Km nodes extensions, e.g. KmClass.visibility", "Flags API is deprecated and this function will be removed. Create Km nodes directly and then use corresponding Km nodes extensions, e.g. KmClass.visibility",
) )
fun flagsOf(vararg flags: Flag): Int = public fun flagsOf(vararg flags: Flag): Int =
flags.fold(0) { acc, flag -> (flag as FlagImpl) + acc } flags.fold(0) { acc, flag -> (flag as FlagImpl) + acc }
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.metadata.ProtoBuf.MemberKind as ProtoMemberKind
* Represents visibility level (also known as access level) of the corresponding declaration. * Represents visibility level (also known as access level) of the corresponding declaration.
* Some of these visibilities may be non-denotable in Kotlin. * Some of these visibilities may be non-denotable in Kotlin.
*/ */
enum class Visibility(kind: Int) { public enum class Visibility(kind: Int) {
/** /**
* Signifies that the corresponding declaration is `internal`. * Signifies that the corresponding declaration is `internal`.
*/ */
@@ -65,7 +65,7 @@ enum class Visibility(kind: Int) {
PRIVATE_TO_THIS(ProtoVisibility.PRIVATE_TO_THIS_VALUE), PRIVATE_TO_THIS(ProtoVisibility.PRIVATE_TO_THIS_VALUE),
/** /**
* Signifies that the corresponding declaration is local, i.e. declared inside a code block * Signifies that the corresponding declaration is local, i.e., declared inside a code block,
* and not visible from the outside. * and not visible from the outside.
*/ */
LOCAL(ProtoVisibility.LOCAL_VALUE) LOCAL(ProtoVisibility.LOCAL_VALUE)
@@ -79,7 +79,7 @@ enum class Visibility(kind: Int) {
* *
* Modality determines when and where it is possible to extend/override a class/member. * Modality determines when and where it is possible to extend/override a class/member.
*/ */
enum class Modality(kind: Int) { public enum class Modality(kind: Int) {
/** /**
* Signifies that the corresponding declaration is `final`. * Signifies that the corresponding declaration is `final`.
*/ */
@@ -110,7 +110,7 @@ enum class Modality(kind: Int) {
/** /**
* Represents the kind of the corresponding class, i.e., the way it is declared in the source code. * Represents the kind of the corresponding class, i.e., the way it is declared in the source code.
*/ */
enum class ClassKind(kind: Int) { public enum class ClassKind(kind: Int) {
/** /**
* Signifies that the corresponding class is a usual or anonymous class. * Signifies that the corresponding class is a usual or anonymous class.
*/ */
@@ -156,7 +156,7 @@ enum class ClassKind(kind: Int) {
* Kind indicates the origin of a declaration within a containing class. * Kind indicates the origin of a declaration within a containing class.
* It provides information about whether a function or property was defined, generated, or something else. * It provides information about whether a function or property was defined, generated, or something else.
*/ */
enum class MemberKind(kind: Int) { public enum class MemberKind(kind: Int) {
/** /**
* Signifies that the corresponding function or property is explicitly declared in the containing class. * Signifies that the corresponding function or property is explicitly declared in the containing class.
*/ */
@@ -14,21 +14,21 @@ import kotlin.contracts.ExperimentalContracts
/** /**
* Represents a Kotlin declaration container, such as a class or a package fragment. * Represents a Kotlin declaration container, such as a class or a package fragment.
*/ */
interface KmDeclarationContainer { public interface KmDeclarationContainer {
/** /**
* Functions in the container. * Functions in the container.
*/ */
val functions: MutableList<KmFunction> public val functions: MutableList<KmFunction>
/** /**
* Properties in the container. * Properties in the container.
*/ */
val properties: MutableList<KmProperty> public val properties: MutableList<KmProperty>
/** /**
* Type aliases in the container. * Type aliases in the container.
*/ */
val typeAliases: MutableList<KmTypeAlias> public val typeAliases: MutableList<KmTypeAlias>
} }
/** /**
@@ -39,27 +39,27 @@ interface KmDeclarationContainer {
* Various class attributes can be read and manipulated via extension properties, such as [KmClass.visibility] or [KmClass.isData]. * Various class attributes can be read and manipulated via extension properties, such as [KmClass.visibility] or [KmClass.isData].
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmClass : KmClassVisitor(), KmDeclarationContainer { public class KmClass : KmClassVisitor(), KmDeclarationContainer {
/** /**
* Class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags. * Class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags.
*/ */
@Deprecated("$flagAccessPrefix KmClass, such as KmClass.visibility") @Deprecated("$flagAccessPrefix KmClass, such as KmClass.visibility")
var flags: Int = 0 public var flags: Int = 0
/** /**
* Name of the class. * Name of the class.
*/ */
lateinit var name: ClassName public lateinit var name: ClassName
/** /**
* Type parameters of the class. * Type parameters of the class.
*/ */
val typeParameters: MutableList<KmTypeParameter> = ArrayList(0) public val typeParameters: MutableList<KmTypeParameter> = ArrayList(0)
/** /**
* Supertypes of the class. * Supertypes of the class.
*/ */
val supertypes: MutableList<KmType> = ArrayList(1) public val supertypes: MutableList<KmType> = ArrayList(1)
/** /**
* Functions in the class. * Functions in the class.
@@ -79,48 +79,48 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
/** /**
* Constructors of the class. * Constructors of the class.
*/ */
val constructors: MutableList<KmConstructor> = ArrayList(1) public val constructors: MutableList<KmConstructor> = ArrayList(1)
/** /**
* Name of the companion object of this class, if it has one. * Name of the companion object of this class, if it has one.
*/ */
var companionObject: String? = null public var companionObject: String? = null
/** /**
* Names of nested classes of this class. * Names of nested classes of this class.
*/ */
val nestedClasses: MutableList<String> = ArrayList(0) public val nestedClasses: MutableList<String> = ArrayList(0)
/** /**
* Names of enum entries, if this class is an enum class. * Names of enum entries, if this class is an enum class.
*/ */
val enumEntries: MutableList<String> = ArrayList(0) public val enumEntries: MutableList<String> = ArrayList(0)
/** /**
* Names of direct subclasses of this class, if this class is `sealed`. * Names of direct subclasses of this class, if this class is `sealed`.
*/ */
val sealedSubclasses: MutableList<ClassName> = ArrayList(0) public val sealedSubclasses: MutableList<ClassName> = ArrayList(0)
/** /**
* Name of the underlying property, if this class is `inline`. * Name of the underlying property, if this class is `inline`.
*/ */
var inlineClassUnderlyingPropertyName: String? = null public var inlineClassUnderlyingPropertyName: String? = null
/** /**
* Type of the underlying property, if this class is `inline`. * Type of the underlying property, if this class is `inline`.
*/ */
var inlineClassUnderlyingType: KmType? = null public var inlineClassUnderlyingType: KmType? = null
/** /**
* Types of context receivers of the class. * Types of context receivers of the class.
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
val contextReceiverTypes: MutableList<KmType> = ArrayList(0) public val contextReceiverTypes: MutableList<KmType> = ArrayList(0)
/** /**
* Version requirements on this class. * Version requirements on this class.
*/ */
val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0) public val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0)
private val extensions: List<KmClassExtension> = private val extensions: List<KmClassExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createClassExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createClassExtension)
@@ -204,7 +204,7 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@OptIn(ExperimentalContextReceivers::class) @OptIn(ExperimentalContextReceivers::class)
fun accept(visitor: KmClassVisitor) { public fun accept(visitor: KmClassVisitor) {
visitor.visit(flags, name) visitor.visit(flags, name)
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) } typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
supertypes.forEach { visitor.visitSupertype(it.flags)?.let(it::accept) } supertypes.forEach { visitor.visitSupertype(it.flags)?.let(it::accept) }
@@ -231,7 +231,7 @@ class KmClass : KmClassVisitor(), KmDeclarationContainer {
* Note that a package fragment does not contain any classes, as classes are not a part of file facades and have their own metadata. * Note that a package fragment does not contain any classes, as classes are not a part of file facades and have their own metadata.
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmPackage : KmPackageVisitor(), KmDeclarationContainer { public class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
/** /**
* Functions in the package fragment. * Functions in the package fragment.
*/ */
@@ -272,7 +272,7 @@ class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
* @param visitor the visitor which will visit data in this package fragment * @param visitor the visitor which will visit data in this package fragment
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmPackageVisitor) { public fun accept(visitor: KmPackageVisitor) {
functions.forEach { visitor.visitFunction(it.flags, it.name)?.let(it::accept) } functions.forEach { visitor.visitFunction(it.flags, it.name)?.let(it::accept) }
properties.forEach { visitor.visitProperty(it.flags, it.name, it.getter.flags, it.setterFlags)?.let(it::accept) } properties.forEach { visitor.visitProperty(it.flags, it.name, it.getter.flags, it.setterFlags)?.let(it::accept) }
typeAliases.forEach { visitor.visitTypeAlias(it.flags, it.name)?.let(it::accept) } typeAliases.forEach { visitor.visitTypeAlias(it.flags, it.name)?.let(it::accept) }
@@ -285,11 +285,11 @@ class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
* Represents a synthetic class generated for a Kotlin lambda. * Represents a synthetic class generated for a Kotlin lambda.
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmLambda : KmLambdaVisitor() { public class KmLambda : KmLambdaVisitor() {
/** /**
* Signature of the synthetic anonymous function, representing the lambda. * Signature of the synthetic anonymous function, representing the lambda.
*/ */
lateinit var function: KmFunction public lateinit var function: KmFunction
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor = override fun visitFunction(flags: Int, name: String): KmFunctionVisitor =
@@ -301,7 +301,7 @@ class KmLambda : KmLambdaVisitor() {
* @param visitor the visitor which will visit data in this lambda * @param visitor the visitor which will visit data in this lambda
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmLambdaVisitor) { public fun accept(visitor: KmLambdaVisitor) {
visitor.visitFunction(function.flags, function.name)?.let(function::accept) visitor.visitFunction(function.flags, function.name)?.let(function::accept)
visitor.visitEnd() visitor.visitEnd()
} }
@@ -314,21 +314,21 @@ class KmLambda : KmLambdaVisitor() {
* such as [KmConstructor.visibility] or [KmConstructor.isSecondary]. * such as [KmConstructor.visibility] or [KmConstructor.isSecondary].
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmConstructor @Deprecated(flagsCtorDeprecated) constructor( public class KmConstructor @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmConstructor, such as KmConstructor.visibility") var flags: Int, @Deprecated("$flagAccessPrefix KmConstructor, such as KmConstructor.visibility") public var flags: Int,
) : ) :
KmConstructorVisitor() { KmConstructorVisitor() {
constructor() : this(0) public constructor() : this(0)
/** /**
* Value parameters of the constructor. * Value parameters of the constructor.
*/ */
val valueParameters: MutableList<KmValueParameter> = ArrayList() public val valueParameters: MutableList<KmValueParameter> = ArrayList()
/** /**
* Version requirements on the constructor. * Version requirements on the constructor.
*/ */
val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0) public val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0)
private val extensions: List<KmConstructorExtension> = private val extensions: List<KmConstructorExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createConstructorExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createConstructorExtension)
@@ -351,7 +351,7 @@ class KmConstructor @Deprecated(flagsCtorDeprecated) constructor(
* @param visitor the visitor which will visit data in this class * @param visitor the visitor which will visit data in this class
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmConstructorVisitor) { public fun accept(visitor: KmConstructorVisitor) {
valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) } valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) }
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) } versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
@@ -368,49 +368,49 @@ class KmConstructor @Deprecated(flagsCtorDeprecated) constructor(
* @property name the name of the function * @property name the name of the function
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmFunction @Deprecated(flagsCtorDeprecated) constructor( public class KmFunction @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmFunction, such as KmFunction.visibility") var flags: Int, @Deprecated("$flagAccessPrefix KmFunction, such as KmFunction.visibility") public var flags: Int,
var name: String, public var name: String,
) : KmFunctionVisitor() { ) : KmFunctionVisitor() {
constructor(name: String) : this(0, name) public constructor(name: String) : this(0, name)
/** /**
* Type parameters of the function. * Type parameters of the function.
*/ */
val typeParameters: MutableList<KmTypeParameter> = ArrayList(0) public val typeParameters: MutableList<KmTypeParameter> = ArrayList(0)
/** /**
* Type of the receiver of the function, if this is an extension function. * Type of the receiver of the function, if this is an extension function.
*/ */
var receiverParameterType: KmType? = null public var receiverParameterType: KmType? = null
/** /**
* Types of context receivers of the function. * Types of context receivers of the function.
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
val contextReceiverTypes: MutableList<KmType> = ArrayList(0) public val contextReceiverTypes: MutableList<KmType> = ArrayList(0)
/** /**
* Value parameters of the function. * Value parameters of the function.
*/ */
val valueParameters: MutableList<KmValueParameter> = ArrayList() public val valueParameters: MutableList<KmValueParameter> = ArrayList()
/** /**
* Return type of the function. * Return type of the function.
*/ */
lateinit var returnType: KmType public lateinit var returnType: KmType
/** /**
* Version requirements on the function. * Version requirements on the function.
*/ */
val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0) public val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0)
/** /**
* Contract of the function. * Contract of the function.
*/ */
@ExperimentalContracts @ExperimentalContracts
var contract: KmContract? = null public var contract: KmContract? = null
private val extensions: List<KmFunctionExtension> = private val extensions: List<KmFunctionExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createFunctionExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createFunctionExtension)
@@ -456,7 +456,7 @@ class KmFunction @Deprecated(flagsCtorDeprecated) constructor(
*/ */
@OptIn(ExperimentalContextReceivers::class) @OptIn(ExperimentalContextReceivers::class)
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmFunctionVisitor) { public fun accept(visitor: KmFunctionVisitor) {
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) } typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) } receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) } contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) }
@@ -490,14 +490,14 @@ public class KmPropertyAccessorAttributes internal constructor(internal var flag
* @property name the name of the property * @property name the name of the property
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmProperty @Deprecated(flagsCtorDeprecated) constructor( public class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmProperty, such as KmProperty.visibility") var flags: Int, @Deprecated("$flagAccessPrefix KmProperty, such as KmProperty.visibility") public var flags: Int,
var name: String, public var name: String,
getterFlags: Int, getterFlags: Int,
setterFlags: Int, setterFlags: Int,
) : KmPropertyVisitor() { ) : KmPropertyVisitor() {
constructor(name: String) : this(0, name, 0, 0) public constructor(name: String) : this(0, name, 0, 0)
/** /**
* Attributes of the getter of this property. * Attributes of the getter of this property.
@@ -505,7 +505,7 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* *
* Getter for property is always present, hence return type of this function is non-nullable. * Getter for property is always present, hence return type of this function is non-nullable.
*/ */
val getter: KmPropertyAccessorAttributes = KmPropertyAccessorAttributes(getterFlags) public val getter: KmPropertyAccessorAttributes = KmPropertyAccessorAttributes(getterFlags)
/** /**
* Attributes of the setter of this property. * Attributes of the setter of this property.
@@ -513,7 +513,7 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* *
* Returns null if setter is absent, i.e. [KmProperty.isVar] is false. * Returns null if setter is absent, i.e. [KmProperty.isVar] is false.
*/ */
var setter: KmPropertyAccessorAttributes? = if (this.hasSetter) KmPropertyAccessorAttributes(setterFlags) else null public var setter: KmPropertyAccessorAttributes? = if (this.hasSetter) KmPropertyAccessorAttributes(setterFlags) else null
set(new) { set(new) {
this.hasSetter = new != null this.hasSetter = new != null
field = new field = new
@@ -526,7 +526,7 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* and [Flag.PropertyAccessor] flags. * and [Flag.PropertyAccessor] flags.
*/ */
@Deprecated("$flagAccessPrefix KmProperty.getter, such as KmProperty.getter.isNotDefault") @Deprecated("$flagAccessPrefix KmProperty.getter, such as KmProperty.getter.isNotDefault")
var getterFlags: Int public var getterFlags: Int
get() = getter.flags get() = getter.flags
set(value) { set(value) {
getter.flags = value getter.flags = value
@@ -547,7 +547,7 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* This behavior is for compatibility only and will be removed in future versions. * This behavior is for compatibility only and will be removed in future versions.
*/ */
@Deprecated("$flagAccessPrefix KmProperty.setter, such as KmProperty.setter.isNotDefault") @Deprecated("$flagAccessPrefix KmProperty.setter, such as KmProperty.setter.isNotDefault")
var setterFlags: Int = getDefaultPropertyAccessorFlags(flags) public var setterFlags: Int = getDefaultPropertyAccessorFlags(flags)
get() = setter?.flags ?: field get() = setter?.flags ?: field
set(value) { set(value) {
setter?.flags = value setter?.flags = value
@@ -557,18 +557,18 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
/** /**
* Type parameters of the property. * Type parameters of the property.
*/ */
val typeParameters: MutableList<KmTypeParameter> = ArrayList(0) public val typeParameters: MutableList<KmTypeParameter> = ArrayList(0)
/** /**
* Type of the receiver of the property, if this is an extension property. * Type of the receiver of the property, if this is an extension property.
*/ */
var receiverParameterType: KmType? = null public var receiverParameterType: KmType? = null
/** /**
* Types of context receivers of the property. * Types of context receivers of the property.
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
val contextReceiverTypes: MutableList<KmType> = ArrayList(0) public val contextReceiverTypes: MutableList<KmType> = ArrayList(0)
/** /**
* Value parameter of the setter of this property, if this is a `var` property and parameter is present. * Value parameter of the setter of this property, if this is a `var` property and parameter is present.
@@ -581,17 +581,17 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* } * }
* ``` * ```
*/ */
var setterParameter: KmValueParameter? = null public var setterParameter: KmValueParameter? = null
/** /**
* Type of the property. * Type of the property.
*/ */
lateinit var returnType: KmType public lateinit var returnType: KmType
/** /**
* Version requirements on the property. * Version requirements on the property.
*/ */
val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0) public val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0)
private val extensions: List<KmPropertyExtension> = private val extensions: List<KmPropertyExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPropertyExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createPropertyExtension)
@@ -632,7 +632,7 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
*/ */
@OptIn(ExperimentalContextReceivers::class) @OptIn(ExperimentalContextReceivers::class)
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmPropertyVisitor) { public fun accept(visitor: KmPropertyVisitor) {
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) } typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) } receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) } contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) }
@@ -653,38 +653,38 @@ class KmProperty @Deprecated(flagsCtorDeprecated) constructor(
* @property name the name of the type alias * @property name the name of the type alias
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmTypeAlias @Deprecated(flagsCtorDeprecated) constructor( public class KmTypeAlias @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmTypeAlias, such as KmTypeAlias.visibility") var flags: Int, @Deprecated("$flagAccessPrefix KmTypeAlias, such as KmTypeAlias.visibility") public var flags: Int,
var name: String, public var name: String,
) : KmTypeAliasVisitor() { ) : KmTypeAliasVisitor() {
constructor(name: String) : this(0, name) public constructor(name: String) : this(0, name)
/** /**
* Type parameters of the type alias. * Type parameters of the type alias.
*/ */
val typeParameters: MutableList<KmTypeParameter> = ArrayList(0) public val typeParameters: MutableList<KmTypeParameter> = ArrayList(0)
/** /**
* Underlying type of the type alias, i.e. the type in the right-hand side of the type alias declaration. * Underlying type of the type alias, i.e. the type in the right-hand side of the type alias declaration.
*/ */
lateinit var underlyingType: KmType public lateinit var underlyingType: KmType
/** /**
* Expanded type of the type alias, i.e. the full expansion of the underlying type, where all type aliases are substituted * Expanded type of the type alias, i.e. the full expansion of the underlying type, where all type aliases are substituted
* with their expanded types. If no type aliases are used in the underlying type, the expanded type is equal to the underlying type. * with their expanded types. If no type aliases are used in the underlying type, the expanded type is equal to the underlying type.
*/ */
lateinit var expandedType: KmType public lateinit var expandedType: KmType
/** /**
* Annotations on the type alias. * Annotations on the type alias.
*/ */
val annotations: MutableList<KmAnnotation> = ArrayList(0) public val annotations: MutableList<KmAnnotation> = ArrayList(0)
/** /**
* Version requirements on the type alias. * Version requirements on the type alias.
*/ */
val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0) public val versionRequirements: MutableList<KmVersionRequirement> = ArrayList(0)
private val extensions: List<KmTypeAliasExtension> = private val extensions: List<KmTypeAliasExtension> =
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createTypeAliasExtension) MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createTypeAliasExtension)
@@ -720,7 +720,7 @@ class KmTypeAlias @Deprecated(flagsCtorDeprecated) constructor(
* @param visitor the visitor which will visit data in this type alias * @param visitor the visitor which will visit data in this type alias
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmTypeAliasVisitor) { public fun accept(visitor: KmTypeAliasVisitor) {
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) } typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
visitor.visitUnderlyingType(underlyingType.flags)?.let(underlyingType::accept) visitor.visitUnderlyingType(underlyingType.flags)?.let(underlyingType::accept)
visitor.visitExpandedType(expandedType.flags)?.let(expandedType::accept) visitor.visitExpandedType(expandedType.flags)?.let(expandedType::accept)
@@ -740,23 +740,23 @@ class KmTypeAlias @Deprecated(flagsCtorDeprecated) constructor(
* @property name the name of the value parameter * @property name the name of the value parameter
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmValueParameter @Deprecated(flagsCtorDeprecated) constructor( public class KmValueParameter @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmValueParameter, such as KmValueParameter.declaresDefaultValue") var flags: Int, @Deprecated("$flagAccessPrefix KmValueParameter, such as KmValueParameter.declaresDefaultValue") public var flags: Int,
var name: String, public var name: String,
) : KmValueParameterVisitor() { ) : KmValueParameterVisitor() {
constructor(name: String) : this(0, name) public constructor(name: String) : this(0, name)
/** /**
* Type of the value parameter. * Type of the value parameter.
* If this is a `vararg` parameter of type `X`, returns the type `Array<out X>`. * If this is a `vararg` parameter of type `X`, returns the type `Array<out X>`.
*/ */
lateinit var type: KmType public lateinit var type: KmType
/** /**
* Type of the `vararg` value parameter, or `null` if this is not a `vararg` parameter. * Type of the `vararg` value parameter, or `null` if this is not a `vararg` parameter.
*/ */
var varargElementType: KmType? = null public var varargElementType: KmType? = null
private val extensions: List<KmValueParameterExtension> = private val extensions: List<KmValueParameterExtension> =
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createValueParameterExtension) MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createValueParameterExtension)
@@ -779,7 +779,7 @@ class KmValueParameter @Deprecated(flagsCtorDeprecated) constructor(
* @param visitor the visitor which will visit data in this value parameter * @param visitor the visitor which will visit data in this value parameter
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmValueParameterVisitor) { public fun accept(visitor: KmValueParameterVisitor) {
visitor.visitType(type.flags)?.let(type::accept) visitor.visitType(type.flags)?.let(type::accept)
varargElementType?.let { visitor.visitVarargElementType(it.flags)?.let(it::accept) } varargElementType?.let { visitor.visitVarargElementType(it.flags)?.let(it::accept) }
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
@@ -799,19 +799,19 @@ class KmValueParameter @Deprecated(flagsCtorDeprecated) constructor(
* @property variance the declaration-site variance of the type parameter * @property variance the declaration-site variance of the type parameter
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmTypeParameter @Deprecated(flagsCtorDeprecated) constructor( public class KmTypeParameter @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmTypeParameter, such as KmTypeParameter.isReified") var flags: Int, @Deprecated("$flagAccessPrefix KmTypeParameter, such as KmTypeParameter.isReified") public var flags: Int,
var name: String, public var name: String,
var id: Int, public var id: Int,
var variance: KmVariance, public var variance: KmVariance,
) : KmTypeParameterVisitor() { ) : KmTypeParameterVisitor() {
constructor(name: String, id: Int, variance: KmVariance) : this(0, name, id, variance) public constructor(name: String, id: Int, variance: KmVariance) : this(0, name, id, variance)
/** /**
* Upper bounds of the type parameter. * Upper bounds of the type parameter.
*/ */
val upperBounds: MutableList<KmType> = ArrayList(1) public val upperBounds: MutableList<KmType> = ArrayList(1)
private val extensions: List<KmTypeParameterExtension> = private val extensions: List<KmTypeParameterExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeParameterExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeParameterExtension)
@@ -830,7 +830,7 @@ class KmTypeParameter @Deprecated(flagsCtorDeprecated) constructor(
* @param visitor the visitor which will visit data in this type parameter * @param visitor the visitor which will visit data in this type parameter
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmTypeParameterVisitor) { public fun accept(visitor: KmTypeParameterVisitor) {
upperBounds.forEach { visitor.visitUpperBound(it.flags)?.let(it::accept) } upperBounds.forEach { visitor.visitUpperBound(it.flags)?.let(it::accept) }
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
visitor.visitEnd() visitor.visitEnd()
@@ -844,21 +844,21 @@ class KmTypeParameter @Deprecated(flagsCtorDeprecated) constructor(
* such as [KmType.isNullable]. * such as [KmType.isNullable].
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmType @Deprecated(flagsCtorDeprecated) constructor( public class KmType @Deprecated(flagsCtorDeprecated) constructor(
@Deprecated("$flagAccessPrefix KmType, such as KmType.isNullable") var flags: Int @Deprecated("$flagAccessPrefix KmType, such as KmType.isNullable") public var flags: Int
) : KmTypeVisitor() { ) : KmTypeVisitor() {
constructor() : this(0) public constructor() : this(0)
/** /**
* Classifier of the type. * Classifier of the type.
*/ */
lateinit var classifier: KmClassifier public lateinit var classifier: KmClassifier
/** /**
* Arguments of the type, if the type's classifier is a class or a type alias. * Arguments of the type, if the type's classifier is a class or a type alias.
*/ */
val arguments: MutableList<KmTypeProjection> = ArrayList(0) public val arguments: MutableList<KmTypeProjection> = ArrayList(0)
/** /**
* Abbreviation of this type. Note that all types are expanded for metadata produced by the Kotlin compiler. For example: * Abbreviation of this type. Note that all types are expanded for metadata produced by the Kotlin compiler. For example:
@@ -869,7 +869,7 @@ class KmType @Deprecated(flagsCtorDeprecated) constructor(
* *
* The type of the `foo`'s parameter in the metadata is actually `MutableList<Any>`, and its abbreviation is `A<Any>`. * The type of the `foo`'s parameter in the metadata is actually `MutableList<Any>`, and its abbreviation is `A<Any>`.
*/ */
var abbreviatedType: KmType? = null public var abbreviatedType: KmType? = null
/** /**
* Outer type of this type, if this type's classifier is an inner class. For example: * Outer type of this type, if this type's classifier is an inner class. For example:
@@ -881,14 +881,14 @@ class KmType @Deprecated(flagsCtorDeprecated) constructor(
* The type of the `foo`'s parameter in the metadata is `B<Byte>` (a type whose classifier is class `B`, and it has one type argument, * The type of the `foo`'s parameter in the metadata is `B<Byte>` (a type whose classifier is class `B`, and it has one type argument,
* type `Byte?`), and its outer type is `A<*>` (a type whose classifier is class `A`, and it has one type argument, star projection). * type `Byte?`), and its outer type is `A<*>` (a type whose classifier is class `A`, and it has one type argument, star projection).
*/ */
var outerType: KmType? = null public var outerType: KmType? = null
/** /**
* Upper bound of this type, if this type is flexible. In that case, all other data refers to the lower bound of the type. * Upper bound of this type, if this type is flexible. In that case, all other data refers to the lower bound of the type.
* *
* Flexible types in Kotlin include platform types in Kotlin/JVM and `dynamic` type in Kotlin/JS. * Flexible types in Kotlin include platform types in Kotlin/JVM and `dynamic` type in Kotlin/JS.
*/ */
var flexibleTypeUpperBound: KmFlexibleTypeUpperBound? = null public var flexibleTypeUpperBound: KmFlexibleTypeUpperBound? = null
private val extensions: List<KmTypeExtension> = private val extensions: List<KmTypeExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeExtension) MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeExtension)
@@ -940,7 +940,7 @@ class KmType @Deprecated(flagsCtorDeprecated) constructor(
* @throws IllegalArgumentException if type metadata is inconsistent * @throws IllegalArgumentException if type metadata is inconsistent
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmTypeVisitor) { public fun accept(visitor: KmTypeVisitor) {
when (val classifier = classifier) { when (val classifier = classifier) {
is KmClassifier.Class -> visitor.visitClass(classifier.name) is KmClassifier.Class -> visitor.visitClass(classifier.name)
is KmClassifier.TypeParameter -> visitor.visitTypeParameter(classifier.id) is KmClassifier.TypeParameter -> visitor.visitTypeParameter(classifier.id)
@@ -970,31 +970,31 @@ class KmType @Deprecated(flagsCtorDeprecated) constructor(
* enabled, for example, with the internal [kotlin.internal.RequireKotlin] annotation. * enabled, for example, with the internal [kotlin.internal.RequireKotlin] annotation.
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmVersionRequirement : KmVersionRequirementVisitor() { public class KmVersionRequirement : KmVersionRequirementVisitor() {
/** /**
* Kind of the version that this declaration requires. * Kind of the version that this declaration requires.
*/ */
lateinit var kind: KmVersionRequirementVersionKind public lateinit var kind: KmVersionRequirementVersionKind
/** /**
* Level of the diagnostic that must be reported on the usages of the declaration in case the version requirement is not satisfied. * Level of the diagnostic that must be reported on the usages of the declaration in case the version requirement is not satisfied.
*/ */
lateinit var level: KmVersionRequirementLevel public lateinit var level: KmVersionRequirementLevel
/** /**
* Optional error code to be displayed in the diagnostic. * Optional error code to be displayed in the diagnostic.
*/ */
var errorCode: Int? = null public var errorCode: Int? = null
/** /**
* Optional message to be displayed in the diagnostic. * Optional message to be displayed in the diagnostic.
*/ */
var message: String? = null public var message: String? = null
/** /**
* Version required by this requirement. * Version required by this requirement.
*/ */
lateinit var version: KmVersion public lateinit var version: KmVersion
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) { override fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) {
@@ -1015,7 +1015,7 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
* @param visitor the visitor which will visit data in this version requirement * @param visitor the visitor which will visit data in this version requirement
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmVersionRequirementVisitor) { public fun accept(visitor: KmVersionRequirementVisitor) {
visitor.visit(kind, level, errorCode, message) visitor.visit(kind, level, errorCode, message)
visitor.visitVersion(version.major, version.minor, version.patch) visitor.visitVersion(version.major, version.minor, version.patch)
visitor.visitEnd() visitor.visitEnd()
@@ -1030,11 +1030,11 @@ class KmVersionRequirement : KmVersionRequirementVisitor() {
*/ */
@ExperimentalContracts @ExperimentalContracts
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmContract : KmContractVisitor() { public class KmContract : KmContractVisitor() {
/** /**
* Effects of this contract. * Effects of this contract.
*/ */
val effects: MutableList<KmEffect> = ArrayList(1) public val effects: MutableList<KmEffect> = ArrayList(1)
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor = override fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor =
@@ -1046,7 +1046,7 @@ class KmContract : KmContractVisitor() {
* @param visitor the visitor which will visit data in this contract * @param visitor the visitor which will visit data in this contract
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmContractVisitor) { public fun accept(visitor: KmContractVisitor) {
effects.forEach { visitor.visitEffect(it.type, it.invocationKind)?.let(it::accept) } effects.forEach { visitor.visitEffect(it.type, it.invocationKind)?.let(it::accept) }
visitor.visitEnd() visitor.visitEnd()
} }
@@ -1064,20 +1064,20 @@ class KmContract : KmContractVisitor() {
*/ */
@ExperimentalContracts @ExperimentalContracts
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmEffect( public class KmEffect(
var type: KmEffectType, public var type: KmEffectType,
var invocationKind: KmEffectInvocationKind? public var invocationKind: KmEffectInvocationKind?
) : KmEffectVisitor() { ) : KmEffectVisitor() {
/** /**
* Arguments of the effect constructor, i.e. the constant value for the [KmEffectType.RETURNS_CONSTANT] effect, * Arguments of the effect constructor, i.e. the constant value for the [KmEffectType.RETURNS_CONSTANT] effect,
* or the parameter reference for the [KmEffectType.CALLS] effect. * or the parameter reference for the [KmEffectType.CALLS] effect.
*/ */
val constructorArguments: MutableList<KmEffectExpression> = ArrayList(1) public val constructorArguments: MutableList<KmEffectExpression> = ArrayList(1)
/** /**
* Conclusion of the effect. If this value is set, the effect represents an implication with this value as the right-hand side. * Conclusion of the effect. If this value is set, the effect represents an implication with this value as the right-hand side.
*/ */
var conclusion: KmEffectExpression? = null public var conclusion: KmEffectExpression? = null
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visitConstructorArgument(): KmEffectExpressionVisitor = override fun visitConstructorArgument(): KmEffectExpressionVisitor =
@@ -1093,7 +1093,7 @@ class KmEffect(
* @param visitor the visitor which will visit data in this effect * @param visitor the visitor which will visit data in this effect
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmEffectVisitor) { public fun accept(visitor: KmEffectVisitor) {
constructorArguments.forEach { visitor.visitConstructorArgument()?.let(it::accept) } constructorArguments.forEach { visitor.visitConstructorArgument()?.let(it::accept) }
conclusion?.let { visitor.visitConclusionOfConditionalEffect()?.let(it::accept) } conclusion?.let { visitor.visitConclusionOfConditionalEffect()?.let(it::accept) }
visitor.visitEnd() visitor.visitEnd()
@@ -1111,40 +1111,40 @@ class KmEffect(
*/ */
@ExperimentalContracts @ExperimentalContracts
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmEffectExpression : KmEffectExpressionVisitor() { public class KmEffectExpression : KmEffectExpressionVisitor() {
/** /**
* Effect expression flags, consisting of [Flag.EffectExpression] flags. * Effect expression flags, consisting of [Flag.EffectExpression] flags.
*/ */
@Deprecated("$flagAccessPrefix KmEffectExpression, such as KmEffectExpression.isNegated") @Deprecated("$flagAccessPrefix KmEffectExpression, such as KmEffectExpression.isNegated")
var flags: Int = flagsOf() public var flags: Int = flagsOf()
/** /**
* Optional 1-based index of the value parameter of the function, for effects which assert something about * Optional 1-based index of the value parameter of the function, for effects which assert something about
* the function parameters. Index 0 means the extension receiver parameter. * the function parameters. Index 0 means the extension receiver parameter.
*/ */
var parameterIndex: Int? = null public var parameterIndex: Int? = null
/** /**
* Constant value used in the effect expression. * Constant value used in the effect expression.
*/ */
var constantValue: KmConstantValue? = null public var constantValue: KmConstantValue? = null
/** /**
* Type used as the target of an `is`-expression in the effect expression. * Type used as the target of an `is`-expression in the effect expression.
*/ */
var isInstanceType: KmType? = null public var isInstanceType: KmType? = null
/** /**
* Arguments of an `&&`-expression. If this list is non-empty, the resulting effect expression is a conjunction of this expression * Arguments of an `&&`-expression. If this list is non-empty, the resulting effect expression is a conjunction of this expression
* and elements of the list. * and elements of the list.
*/ */
val andArguments: MutableList<KmEffectExpression> = ArrayList(0) public val andArguments: MutableList<KmEffectExpression> = ArrayList(0)
/** /**
* Arguments of an `||`-expression. If this list is non-empty, the resulting effect expression is a disjunction of this expression * Arguments of an `||`-expression. If this list is non-empty, the resulting effect expression is a disjunction of this expression
* and elements of the list. * and elements of the list.
*/ */
val orArguments: MutableList<KmEffectExpression> = ArrayList(0) public val orArguments: MutableList<KmEffectExpression> = ArrayList(0)
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
override fun visit(flags: Int, parameterIndex: Int?) { override fun visit(flags: Int, parameterIndex: Int?) {
@@ -1175,7 +1175,7 @@ class KmEffectExpression : KmEffectExpressionVisitor() {
* @param visitor the visitor which will visit data in this effect expression * @param visitor the visitor which will visit data in this effect expression
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmEffectExpressionVisitor) { public fun accept(visitor: KmEffectExpressionVisitor) {
visitor.visit(flags, parameterIndex) visitor.visit(flags, parameterIndex)
constantValue?.let { visitor.visitConstantValue(it.value) } constantValue?.let { visitor.visitConstantValue(it.value) }
isInstanceType?.let { visitor.visitIsInstanceType(it.flags)?.let(it::accept) } isInstanceType?.let { visitor.visitIsInstanceType(it.flags)?.let(it::accept) }
@@ -1189,20 +1189,20 @@ class KmEffectExpression : KmEffectExpressionVisitor() {
* Represents a classifier of a Kotlin type. A classifier is a class, type parameter, or type alias. * Represents a classifier of a Kotlin type. A classifier is a class, type parameter, or type alias.
* For example, in `MutableMap<in String?, *>`, `MutableMap` is the classifier. * For example, in `MutableMap<in String?, *>`, `MutableMap` is the classifier.
*/ */
sealed class KmClassifier { public sealed class KmClassifier {
/** /**
* Represents a class used as a classifier in a type. * Represents a class used as a classifier in a type.
* *
* @property name the name of the class * @property name the name of the class
*/ */
data class Class(val name: ClassName) : KmClassifier() public data class Class(val name: ClassName) : KmClassifier()
/** /**
* Represents a type parameter used as a classifier in a type. * Represents a type parameter used as a classifier in a type.
* *
* @property id id of the type parameter * @property id id of the type parameter
*/ */
data class TypeParameter(val id: Int) : KmClassifier() public data class TypeParameter(val id: Int) : KmClassifier()
/** /**
* Represents a type alias used as a classifier in a type. Note that all types are expanded for metadata produced * Represents a type alias used as a classifier in a type. Note that all types are expanded for metadata produced
@@ -1210,7 +1210,7 @@ sealed class KmClassifier {
* *
* @property name the name of the type alias * @property name the name of the type alias
*/ */
data class TypeAlias(val name: ClassName) : KmClassifier() public data class TypeAlias(val name: ClassName) : KmClassifier()
} }
/** /**
@@ -1220,17 +1220,17 @@ sealed class KmClassifier {
* @property variance the variance of the type projection, or `null` if this is a star projection * @property variance the variance of the type projection, or `null` if this is a star projection
* @property type the projected type, or `null` if this is a star projection * @property type the projected type, or `null` if this is a star projection
*/ */
data class KmTypeProjection(var variance: KmVariance?, var type: KmType?) { public data class KmTypeProjection(var variance: KmVariance?, var type: KmType?) {
/** /**
* Contains default instance for star projection: [KmTypeProjection.STAR]. * Contains default instance for star projection: [KmTypeProjection.STAR].
*/ */
companion object { public companion object {
/** /**
* Star projection (`*`). * Star projection (`*`).
* For example, in `MutableMap<in String?, *>`, `*` is the star projection which is the second type argument of the type. * For example, in `MutableMap<in String?, *>`, `*` is the star projection which is the second type argument of the type.
*/ */
@JvmField @JvmField
val STAR = KmTypeProjection(null, null) public val STAR: KmTypeProjection = KmTypeProjection(null, null)
} }
} }
@@ -1241,7 +1241,7 @@ data class KmTypeProjection(var variance: KmVariance?, var type: KmType?) {
* @property typeFlexibilityId id of the kind of flexibility this type has. For example, "kotlin.jvm.PlatformType" for JVM platform types, * @property typeFlexibilityId id of the kind of flexibility this type has. For example, "kotlin.jvm.PlatformType" for JVM platform types,
* or "kotlin.DynamicType" for JS dynamic type * or "kotlin.DynamicType" for JS dynamic type
*/ */
data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?) public data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?)
/** /**
* Represents a version used in a version requirement. * Represents a version used in a version requirement.
@@ -1250,7 +1250,7 @@ data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: Str
* @property minor the minor component of the version (e.g. "2" in "1.2.3") * @property minor the minor component of the version (e.g. "2" in "1.2.3")
* @property patch the patch component of the version (e.g. "3" in "1.2.3") * @property patch the patch component of the version (e.g. "3" in "1.2.3")
*/ */
data class KmVersion(val major: Int, val minor: Int, val patch: Int) { public data class KmVersion(val major: Int, val minor: Int, val patch: Int) {
/** /**
* Returns a string representation of this version in "$major.$minor.$patch" form. * Returns a string representation of this version in "$major.$minor.$patch" form.
@@ -1267,7 +1267,7 @@ data class KmVersion(val major: Int, val minor: Int, val patch: Int) {
* @property value the constant value. May be `true`, `false` or `null` * @property value the constant value. May be `true`, `false` or `null`
*/ */
@ExperimentalContracts @ExperimentalContracts
data class KmConstantValue(val value: Any?) public data class KmConstantValue(val value: Any?)
internal fun <T> T.addTo(collection: MutableCollection<T>): T { internal fun <T> T.addTo(collection: MutableCollection<T>): T {
collection.add(this) collection.add(this)
@@ -16,4 +16,4 @@ package kotlinx.metadata
RequiresOptIn.Level.ERROR RequiresOptIn.Level.ERROR
) )
@MustBeDocumented @MustBeDocumented
annotation class ExperimentalContextReceivers public annotation class ExperimentalContextReceivers
@@ -15,14 +15,14 @@ internal const val VISITOR_API_MESSAGE =
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected open val delegate: KmDeclarationContainerVisitor? = null) { public abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected open val delegate: KmDeclarationContainerVisitor? = null) {
/** /**
* Visits a function in the container. * Visits a function in the container.
* *
* @param flags function flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Function] flags * @param flags function flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Function] flags
* @param name the name of the function * @param name the name of the function
*/ */
open fun visitFunction(flags: Int, name: String): KmFunctionVisitor? = public open fun visitFunction(flags: Int, name: String): KmFunctionVisitor? =
delegate?.visitFunction(flags, name) delegate?.visitFunction(flags, name)
/** /**
@@ -35,7 +35,7 @@ abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected
* @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag * @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
* and [Flag.PropertyAccessor] flags * and [Flag.PropertyAccessor] flags
*/ */
open fun visitProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor? = public open fun visitProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor? =
delegate?.visitProperty(flags, name, getterFlags, setterFlags) delegate?.visitProperty(flags, name, getterFlags, setterFlags)
/** /**
@@ -44,7 +44,7 @@ abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected
* @param flags type alias flags, consisting of [Flag.HAS_ANNOTATIONS] and visibility flag * @param flags type alias flags, consisting of [Flag.HAS_ANNOTATIONS] and visibility flag
* @param name the name of the type alias * @param name the name of the type alias
*/ */
open fun visitTypeAlias(flags: Int, name: String): KmTypeAliasVisitor? = public open fun visitTypeAlias(flags: Int, name: String): KmTypeAliasVisitor? =
delegate?.visitTypeAlias(flags, name) delegate?.visitTypeAlias(flags, name)
/** /**
@@ -52,7 +52,7 @@ abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
abstract fun visitExtensions(type: KmExtensionType): KmDeclarationContainerExtensionVisitor? public abstract fun visitExtensions(type: KmExtensionType): KmDeclarationContainerExtensionVisitor?
} }
/** /**
@@ -63,7 +63,7 @@ abstract class KmDeclarationContainerVisitor @JvmOverloads constructor(protected
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor? = null) : KmDeclarationContainerVisitor(delegate) { public abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor? = null) : KmDeclarationContainerVisitor(delegate) {
override val delegate: KmClassVisitor? override val delegate: KmClassVisitor?
get() = super.delegate as KmClassVisitor? get() = super.delegate as KmClassVisitor?
@@ -73,7 +73,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* @param flags class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags * @param flags class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags
* @param name the name of the class * @param name the name of the class
*/ */
open fun visit(flags: Int, name: ClassName) { public open fun visit(flags: Int, name: ClassName) {
delegate?.visit(flags, name) delegate?.visit(flags, name)
} }
@@ -86,7 +86,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`) * the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
* @param variance the declaration-site variance of the type parameter * @param variance the declaration-site variance of the type parameter
*/ */
open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? = public open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? =
delegate?.visitTypeParameter(flags, name, id, variance) delegate?.visitTypeParameter(flags, name, id, variance)
/** /**
@@ -94,7 +94,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitSupertype(flags: Int): KmTypeVisitor? = public open fun visitSupertype(flags: Int): KmTypeVisitor? =
delegate?.visitSupertype(flags) delegate?.visitSupertype(flags)
/** /**
@@ -102,7 +102,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param flags constructor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag and [Flag.Constructor] flags * @param flags constructor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag and [Flag.Constructor] flags
*/ */
open fun visitConstructor(flags: Int): KmConstructorVisitor? = public open fun visitConstructor(flags: Int): KmConstructorVisitor? =
delegate?.visitConstructor(flags) delegate?.visitConstructor(flags)
/** /**
@@ -110,7 +110,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param name the name of the companion object * @param name the name of the companion object
*/ */
open fun visitCompanionObject(name: String) { public open fun visitCompanionObject(name: String) {
delegate?.visitCompanionObject(name) delegate?.visitCompanionObject(name)
} }
@@ -119,7 +119,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param name the name of a nested class * @param name the name of a nested class
*/ */
open fun visitNestedClass(name: String) { public open fun visitNestedClass(name: String) {
delegate?.visitNestedClass(name) delegate?.visitNestedClass(name)
} }
@@ -128,7 +128,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param name the name of an enum entry * @param name the name of an enum entry
*/ */
open fun visitEnumEntry(name: String) { public open fun visitEnumEntry(name: String) {
delegate?.visitEnumEntry(name) delegate?.visitEnumEntry(name)
} }
@@ -137,7 +137,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param name the name of a direct subclass * @param name the name of a direct subclass
*/ */
open fun visitSealedSubclass(name: ClassName) { public open fun visitSealedSubclass(name: ClassName) {
delegate?.visitSealedSubclass(name) delegate?.visitSealedSubclass(name)
} }
@@ -146,7 +146,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param name the name of the underlying property. * @param name the name of the underlying property.
*/ */
open fun visitInlineClassUnderlyingPropertyName(name: String) { public open fun visitInlineClassUnderlyingPropertyName(name: String) {
delegate?.visitInlineClassUnderlyingPropertyName(name) delegate?.visitInlineClassUnderlyingPropertyName(name)
} }
@@ -155,7 +155,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitInlineClassUnderlyingType(flags: Int): KmTypeVisitor? = public open fun visitInlineClassUnderlyingType(flags: Int): KmTypeVisitor? =
delegate?.visitInlineClassUnderlyingType(flags) delegate?.visitInlineClassUnderlyingType(flags)
/** /**
@@ -164,13 +164,13 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
open fun visitContextReceiverType(flags: Int): KmTypeVisitor? = public open fun visitContextReceiverType(flags: Int): KmTypeVisitor? =
delegate?.visitContextReceiverType(flags) delegate?.visitContextReceiverType(flags)
/** /**
* Visits the version requirement on this class. * Visits the version requirement on this class.
*/ */
open fun visitVersionRequirement(): KmVersionRequirementVisitor? = public open fun visitVersionRequirement(): KmVersionRequirementVisitor? =
delegate?.visitVersionRequirement() delegate?.visitVersionRequirement()
/** /**
@@ -184,7 +184,7 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
/** /**
* Visits the end of the class. * Visits the end of the class.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -196,7 +196,8 @@ abstract class KmClassVisitor @JvmOverloads constructor(delegate: KmClassVisitor
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVisitor? = null) : KmDeclarationContainerVisitor(delegate) { public abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVisitor? = null) :
KmDeclarationContainerVisitor(delegate) {
override val delegate: KmPackageVisitor? override val delegate: KmPackageVisitor?
get() = super.delegate as KmPackageVisitor? get() = super.delegate as KmPackageVisitor?
@@ -211,7 +212,7 @@ abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVis
/** /**
* Visits the end of the package fragment. * Visits the end of the package fragment.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -223,20 +224,20 @@ abstract class KmPackageVisitor @JvmOverloads constructor(delegate: KmPackageVis
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmLambdaVisitor @JvmOverloads constructor(private val delegate: KmLambdaVisitor? = null) { public abstract class KmLambdaVisitor @JvmOverloads constructor(private val delegate: KmLambdaVisitor? = null) {
/** /**
* Visits the signature of a synthetic anonymous function, representing the lambda. * Visits the signature of a synthetic anonymous function, representing the lambda.
* *
* @param flags function flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Function] flags * @param flags function flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Function] flags
* @param name the name of the function (usually `"<anonymous>"` or `"<no name provided>"` for lambdas emitted by the Kotlin compiler) * @param name the name of the function (usually `"<anonymous>"` or `"<no name provided>"` for lambdas emitted by the Kotlin compiler)
*/ */
open fun visitFunction(flags: Int, name: String): KmFunctionVisitor? = public open fun visitFunction(flags: Int, name: String): KmFunctionVisitor? =
delegate?.visitFunction(flags, name) delegate?.visitFunction(flags, name)
/** /**
* Visits the end of the lambda. * Visits the end of the lambda.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -248,20 +249,20 @@ abstract class KmLambdaVisitor @JvmOverloads constructor(private val delegate: K
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmConstructorVisitor @JvmOverloads constructor(private val delegate: KmConstructorVisitor? = null) { public abstract class KmConstructorVisitor @JvmOverloads constructor(private val delegate: KmConstructorVisitor? = null) {
/** /**
* Visits a value parameter of the constructor. * Visits a value parameter of the constructor.
* *
* @param flags value parameter flags, consisting of [Flag.ValueParameter] flags * @param flags value parameter flags, consisting of [Flag.ValueParameter] flags
* @param name the name of the value parameter * @param name the name of the value parameter
*/ */
open fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor? = public open fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor? =
delegate?.visitValueParameter(flags, name) delegate?.visitValueParameter(flags, name)
/** /**
* Visits the version requirement on this constructor. * Visits the version requirement on this constructor.
*/ */
open fun visitVersionRequirement(): KmVersionRequirementVisitor? = public open fun visitVersionRequirement(): KmVersionRequirementVisitor? =
delegate?.visitVersionRequirement() delegate?.visitVersionRequirement()
/** /**
@@ -269,13 +270,13 @@ abstract class KmConstructorVisitor @JvmOverloads constructor(private val delega
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the constructor. * Visits the end of the constructor.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -288,7 +289,7 @@ abstract class KmConstructorVisitor @JvmOverloads constructor(private val delega
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate: KmFunctionVisitor? = null) { public abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate: KmFunctionVisitor? = null) {
/** /**
* Visits a type parameter of the function. * Visits a type parameter of the function.
* *
@@ -298,24 +299,24 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
* the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`) * the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
* @param variance the declaration-site variance of the type parameter * @param variance the declaration-site variance of the type parameter
*/ */
open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? = public open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? =
delegate?.visitTypeParameter(flags, name, id, variance) delegate?.visitTypeParameter(flags, name, id, variance)
/** /**
* Visits the type of the receiver of the function, if this is an extension function. * Visits the type of the receiver of the function if this is an extension function.
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitReceiverParameterType(flags: Int): KmTypeVisitor? = public open fun visitReceiverParameterType(flags: Int): KmTypeVisitor? =
delegate?.visitReceiverParameterType(flags) delegate?.visitReceiverParameterType(flags)
/** /**
* Visits the type of a context receiver of the function. * Visits the type of the context receiver of the function.
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
open fun visitContextReceiverType(flags: Int): KmTypeVisitor? = public open fun visitContextReceiverType(flags: Int): KmTypeVisitor? =
delegate?.visitContextReceiverType(flags) delegate?.visitContextReceiverType(flags)
/** /**
@@ -324,7 +325,7 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
* @param flags value parameter flags, consisting of [Flag.ValueParameter] flags * @param flags value parameter flags, consisting of [Flag.ValueParameter] flags
* @param name the name of the value parameter * @param name the name of the value parameter
*/ */
open fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor? = public open fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor? =
delegate?.visitValueParameter(flags, name) delegate?.visitValueParameter(flags, name)
/** /**
@@ -332,20 +333,20 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitReturnType(flags: Int): KmTypeVisitor? = public open fun visitReturnType(flags: Int): KmTypeVisitor? =
delegate?.visitReturnType(flags) delegate?.visitReturnType(flags)
/** /**
* Visits the version requirement on this function. * Visits the version requirement on this function.
*/ */
open fun visitVersionRequirement(): KmVersionRequirementVisitor? = public open fun visitVersionRequirement(): KmVersionRequirementVisitor? =
delegate?.visitVersionRequirement() delegate?.visitVersionRequirement()
/** /**
* Visits the contract of the function. * Visits the contract of the function.
*/ */
@ExperimentalContracts @ExperimentalContracts
open fun visitContract(): KmContractVisitor? = public open fun visitContract(): KmContractVisitor? =
delegate?.visitContract() delegate?.visitContract()
/** /**
@@ -353,13 +354,13 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the function. * Visits the end of the function.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -372,7 +373,7 @@ abstract class KmFunctionVisitor @JvmOverloads constructor(private val delegate:
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate: KmPropertyVisitor? = null) { public abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate: KmPropertyVisitor? = null) {
/** /**
* Visits a type parameter of the property. * Visits a type parameter of the property.
* *
@@ -382,15 +383,15 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
* the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`) * the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
* @param variance the declaration-site variance of the type parameter * @param variance the declaration-site variance of the type parameter
*/ */
open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? = public open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? =
delegate?.visitTypeParameter(flags, name, id, variance) delegate?.visitTypeParameter(flags, name, id, variance)
/** /**
* Visits the type of the receiver of the property, if this is an extension property. * Visits the type of the receiver of the property if this is an extension property.
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitReceiverParameterType(flags: Int): KmTypeVisitor? = public open fun visitReceiverParameterType(flags: Int): KmTypeVisitor? =
delegate?.visitReceiverParameterType(flags) delegate?.visitReceiverParameterType(flags)
/** /**
@@ -399,7 +400,7 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
@ExperimentalContextReceivers @ExperimentalContextReceivers
open fun visitContextReceiverType(flags: Int): KmTypeVisitor? = public open fun visitContextReceiverType(flags: Int): KmTypeVisitor? =
delegate?.visitContextReceiverType(flags) delegate?.visitContextReceiverType(flags)
/** /**
@@ -408,7 +409,7 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
* @param flags value parameter flags, consisting of [Flag.ValueParameter] flags * @param flags value parameter flags, consisting of [Flag.ValueParameter] flags
* @param name the name of the value parameter (`"<set-?>"` for properties emitted by the Kotlin compiler) * @param name the name of the value parameter (`"<set-?>"` for properties emitted by the Kotlin compiler)
*/ */
open fun visitSetterParameter(flags: Int, name: String): KmValueParameterVisitor? = public open fun visitSetterParameter(flags: Int, name: String): KmValueParameterVisitor? =
delegate?.visitSetterParameter(flags, name) delegate?.visitSetterParameter(flags, name)
/** /**
@@ -416,13 +417,13 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitReturnType(flags: Int): KmTypeVisitor? = public open fun visitReturnType(flags: Int): KmTypeVisitor? =
delegate?.visitReturnType(flags) delegate?.visitReturnType(flags)
/** /**
* Visits the version requirement on this property. * Visits the version requirement on this property.
*/ */
open fun visitVersionRequirement(): KmVersionRequirementVisitor? = public open fun visitVersionRequirement(): KmVersionRequirementVisitor? =
delegate?.visitVersionRequirement() delegate?.visitVersionRequirement()
/** /**
@@ -430,13 +431,13 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the property. * Visits the end of the property.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -449,7 +450,7 @@ abstract class KmPropertyVisitor @JvmOverloads constructor(private val delegate:
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate: KmTypeAliasVisitor? = null) { public abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate: KmTypeAliasVisitor? = null) {
/** /**
* Visits a type parameter of the type alias. * Visits a type parameter of the type alias.
* *
@@ -459,7 +460,7 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
* the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`) * the name isn't enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
* @param variance the declaration-site variance of the type parameter * @param variance the declaration-site variance of the type parameter
*/ */
open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? = public open fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? =
delegate?.visitTypeParameter(flags, name, id, variance) delegate?.visitTypeParameter(flags, name, id, variance)
/** /**
@@ -467,7 +468,7 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitUnderlyingType(flags: Int): KmTypeVisitor? = public open fun visitUnderlyingType(flags: Int): KmTypeVisitor? =
delegate?.visitUnderlyingType(flags) delegate?.visitUnderlyingType(flags)
/** /**
@@ -476,7 +477,7 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitExpandedType(flags: Int): KmTypeVisitor? = public open fun visitExpandedType(flags: Int): KmTypeVisitor? =
delegate?.visitExpandedType(flags) delegate?.visitExpandedType(flags)
/** /**
@@ -484,14 +485,14 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
* *
* @param annotation annotation on the type alias * @param annotation annotation on the type alias
*/ */
open fun visitAnnotation(annotation: KmAnnotation) { public open fun visitAnnotation(annotation: KmAnnotation) {
delegate?.visitAnnotation(annotation) delegate?.visitAnnotation(annotation)
} }
/** /**
* Visits the version requirement on this type alias. * Visits the version requirement on this type alias.
*/ */
open fun visitVersionRequirement(): KmVersionRequirementVisitor? = public open fun visitVersionRequirement(): KmVersionRequirementVisitor? =
delegate?.visitVersionRequirement() delegate?.visitVersionRequirement()
/** /**
@@ -499,13 +500,13 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmTypeAliasExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmTypeAliasExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the type alias. * Visits the end of the type alias.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -518,13 +519,13 @@ abstract class KmTypeAliasVisitor @JvmOverloads constructor(private val delegate
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmValueParameterVisitor @JvmOverloads constructor(private val delegate: KmValueParameterVisitor? = null) { public abstract class KmValueParameterVisitor @JvmOverloads constructor(private val delegate: KmValueParameterVisitor? = null) {
/** /**
* Visits the type of the value parameter, if this is **not** a `vararg` parameter. * Visits the type of the value parameter, if this is **not** a `vararg` parameter.
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitType(flags: Int): KmTypeVisitor? = public open fun visitType(flags: Int): KmTypeVisitor? =
delegate?.visitType(flags) delegate?.visitType(flags)
/** /**
@@ -532,7 +533,7 @@ abstract class KmValueParameterVisitor @JvmOverloads constructor(private val del
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitVarargElementType(flags: Int): KmTypeVisitor? = public open fun visitVarargElementType(flags: Int): KmTypeVisitor? =
delegate?.visitVarargElementType(flags) delegate?.visitVarargElementType(flags)
/** /**
@@ -540,13 +541,13 @@ abstract class KmValueParameterVisitor @JvmOverloads constructor(private val del
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmValueParameterExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmValueParameterExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the value parameter. * Visits the end of the value parameter.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -558,13 +559,13 @@ abstract class KmValueParameterVisitor @JvmOverloads constructor(private val del
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val delegate: KmTypeParameterVisitor? = null) { public abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val delegate: KmTypeParameterVisitor? = null) {
/** /**
* Visits the upper bound of the type parameter. * Visits the upper bound of the type parameter.
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitUpperBound(flags: Int): KmTypeVisitor? = public open fun visitUpperBound(flags: Int): KmTypeVisitor? =
delegate?.visitUpperBound(flags) delegate?.visitUpperBound(flags)
/** /**
@@ -572,13 +573,13 @@ abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val dele
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the type parameter. * Visits the end of the type parameter.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -596,13 +597,13 @@ abstract class KmTypeParameterVisitor @JvmOverloads constructor(private val dele
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmTypeVisitor? = null) { public abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmTypeVisitor? = null) {
/** /**
* Visits the name of the class, if this type's classifier is a class. * Visits the name of the class, if this type's classifier is a class.
* *
* @param name the name of the class * @param name the name of the class
*/ */
open fun visitClass(name: ClassName) { public open fun visitClass(name: ClassName) {
delegate?.visitClass(name) delegate?.visitClass(name)
} }
@@ -612,7 +613,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* *
* @param name the name of the type alias * @param name the name of the type alias
*/ */
open fun visitTypeAlias(name: ClassName) { public open fun visitTypeAlias(name: ClassName) {
delegate?.visitTypeAlias(name) delegate?.visitTypeAlias(name)
} }
@@ -621,7 +622,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* *
* @param id id of the type parameter * @param id id of the type parameter
*/ */
open fun visitTypeParameter(id: Int) { public open fun visitTypeParameter(id: Int) {
delegate?.visitTypeParameter(id) delegate?.visitTypeParameter(id)
} }
@@ -632,14 +633,14 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
* @param variance the variance of the type projection * @param variance the variance of the type projection
*/ */
open fun visitArgument(flags: Int, variance: KmVariance): KmTypeVisitor? = public open fun visitArgument(flags: Int, variance: KmVariance): KmTypeVisitor? =
delegate?.visitArgument(flags, variance) delegate?.visitArgument(flags, variance)
/** /**
* Visits the star (`*`) projection used in a type argument of the type based on a class or on a type alias. * Visits the star (`*`) projection used in a type argument of the type based on a class or on a type alias.
* For example, in `MutableMap<in String?, *>`, `*` is the star projection which is the second type argument of the type. * For example, in `MutableMap<in String?, *>`, `*` is the star projection which is the second type argument of the type.
*/ */
open fun visitStarProjection() { public open fun visitStarProjection() {
delegate?.visitStarProjection() delegate?.visitStarProjection()
} }
@@ -654,7 +655,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitAbbreviatedType(flags: Int): KmTypeVisitor? = public open fun visitAbbreviatedType(flags: Int): KmTypeVisitor? =
delegate?.visitAbbreviatedType(flags) delegate?.visitAbbreviatedType(flags)
/** /**
@@ -669,7 +670,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitOuterType(flags: Int): KmTypeVisitor? = public open fun visitOuterType(flags: Int): KmTypeVisitor? =
delegate?.visitOuterType(flags) delegate?.visitOuterType(flags)
/** /**
@@ -680,7 +681,7 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* @param typeFlexibilityId id of the kind of flexibility this type has. For example, "kotlin.jvm.PlatformType" for JVM platform types, * @param typeFlexibilityId id of the kind of flexibility this type has. For example, "kotlin.jvm.PlatformType" for JVM platform types,
* or "kotlin.DynamicType" for JS dynamic type * or "kotlin.DynamicType" for JS dynamic type
*/ */
open fun visitFlexibleTypeUpperBound(flags: Int, typeFlexibilityId: String?): KmTypeVisitor? = public open fun visitFlexibleTypeUpperBound(flags: Int, typeFlexibilityId: String?): KmTypeVisitor? =
delegate?.visitFlexibleTypeUpperBound(flags, typeFlexibilityId) delegate?.visitFlexibleTypeUpperBound(flags, typeFlexibilityId)
/** /**
@@ -688,13 +689,13 @@ abstract class KmTypeVisitor @JvmOverloads constructor(private val delegate: KmT
* *
* @param type the type of extension visitor to be returned * @param type the type of extension visitor to be returned
*/ */
open fun visitExtensions(type: KmExtensionType): KmTypeExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmTypeExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the type. * Visits the end of the type.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -708,7 +709,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]. * When using this class, [visit] must be called first, followed by [visitVersion], followed by [visitEnd].
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
abstract class KmVersionRequirementVisitor @JvmOverloads constructor(@Suppress("DEPRECATION") private val delegate: KmVersionRequirementVisitor? = null) { public abstract class KmVersionRequirementVisitor @JvmOverloads constructor(@Suppress("DEPRECATION") private val delegate: KmVersionRequirementVisitor? = null) {
/** /**
* Visits the description of this version requirement. * Visits the description of this version requirement.
* *
@@ -718,7 +719,7 @@ abstract class KmVersionRequirementVisitor @JvmOverloads constructor(@Suppress("
* @param errorCode optional error code to be displayed in the diagnostic * @param errorCode optional error code to be displayed in the diagnostic
* @param message optional message to be displayed in the diagnostic * @param message optional message to be displayed in the diagnostic
*/ */
open fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) { public open fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) {
delegate?.visit(kind, level, errorCode, message) delegate?.visit(kind, level, errorCode, message)
} }
@@ -729,14 +730,14 @@ abstract class KmVersionRequirementVisitor @JvmOverloads constructor(@Suppress("
* @param minor the minor component of the version (e.g. "2" in "1.2.3") * @param minor the minor component of the version (e.g. "2" in "1.2.3")
* @param patch the patch component of the version (e.g. "3" in "1.2.3") * @param patch the patch component of the version (e.g. "3" in "1.2.3")
*/ */
open fun visitVersion(major: Int, minor: Int, patch: Int) { public open fun visitVersion(major: Int, minor: Int, patch: Int) {
delegate?.visitVersion(major, minor, patch) delegate?.visitVersion(major, minor, patch)
} }
/** /**
* Visits the end of the version requirement. * Visits the end of the version requirement.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -752,7 +753,7 @@ abstract class KmVersionRequirementVisitor @JvmOverloads constructor(@Suppress("
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@ExperimentalContracts @ExperimentalContracts
abstract class KmContractVisitor @JvmOverloads constructor(private val delegate: KmContractVisitor? = null) { public abstract class KmContractVisitor @JvmOverloads constructor(private val delegate: KmContractVisitor? = null) {
/** /**
* Visits an effect of this contract. * Visits an effect of this contract.
* *
@@ -760,13 +761,13 @@ abstract class KmContractVisitor @JvmOverloads constructor(private val delegate:
* @param invocationKind optional number of invocations of the lambda parameter of this function, * @param invocationKind optional number of invocations of the lambda parameter of this function,
* specified further in the effect expression * specified further in the effect expression
*/ */
open fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor? = public open fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor? =
delegate?.visitEffect(type, invocationKind) delegate?.visitEffect(type, invocationKind)
/** /**
* Visits the end of the contract. * Visits the end of the contract.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -783,25 +784,25 @@ abstract class KmContractVisitor @JvmOverloads constructor(private val delegate:
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@ExperimentalContracts @ExperimentalContracts
abstract class KmEffectVisitor @JvmOverloads constructor(private val delegate: KmEffectVisitor? = null) { public 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, * Visits the optional argument of the effect constructor, i.e. the constant value for the [KmEffectType.RETURNS_CONSTANT] effect,
* or the parameter reference for the [KmEffectType.CALLS] effect. * or the parameter reference for the [KmEffectType.CALLS] effect.
*/ */
open fun visitConstructorArgument(): KmEffectExpressionVisitor? = public open fun visitConstructorArgument(): KmEffectExpressionVisitor? =
delegate?.visitConstructorArgument() delegate?.visitConstructorArgument()
/** /**
* Visits the optional conclusion of the effect. If this method is called, the effect represents an implication with the * Visits the optional conclusion of the effect. If this method is called, the effect represents an implication with the
* right-hand side handled by the returned visitor. * right-hand side handled by the returned visitor.
*/ */
open fun visitConclusionOfConditionalEffect(): KmEffectExpressionVisitor? = public open fun visitConclusionOfConditionalEffect(): KmEffectExpressionVisitor? =
delegate?.visitConclusionOfConditionalEffect() delegate?.visitConclusionOfConditionalEffect()
/** /**
* Visits the end of the effect. * Visits the end of the effect.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -817,7 +818,7 @@ abstract class KmEffectVisitor @JvmOverloads constructor(private val delegate: K
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@ExperimentalContracts @ExperimentalContracts
abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val delegate: KmEffectExpressionVisitor? = null) { public abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val delegate: KmEffectExpressionVisitor? = null) {
/** /**
* Visits the basic information of the effect expression. * Visits the basic information of the effect expression.
* *
@@ -825,7 +826,7 @@ abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val d
* @param parameterIndex optional 1-based index of the value parameter of the function, for effects which assert something about * @param parameterIndex optional 1-based index of the value parameter of the function, for effects which assert something about
* the function parameters. The index 0 means the extension receiver parameter * the function parameters. The index 0 means the extension receiver parameter
*/ */
open fun visit(flags: Int, parameterIndex: Int?) { public open fun visit(flags: Int, parameterIndex: Int?) {
delegate?.visit(flags, parameterIndex) delegate?.visit(flags, parameterIndex)
} }
@@ -834,7 +835,7 @@ abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val d
* *
* @param value the constant value * @param value the constant value
*/ */
open fun visitConstantValue(value: Any?) { public open fun visitConstantValue(value: Any?) {
delegate?.visitConstantValue(value) delegate?.visitConstantValue(value)
} }
@@ -843,27 +844,27 @@ abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val d
* *
* @param flags type flags, consisting of [Flag.Type] flags * @param flags type flags, consisting of [Flag.Type] flags
*/ */
open fun visitIsInstanceType(flags: Int): KmTypeVisitor? = public open fun visitIsInstanceType(flags: Int): KmTypeVisitor? =
delegate?.visitIsInstanceType(flags) delegate?.visitIsInstanceType(flags)
/** /**
* Visits the argument of an `&&`-expression. If this method is called, the expression represents the left-hand side and * Visits the argument of an `&&`-expression. If this method is called, the expression represents the left-hand side and
* the returned visitor handles the right-hand side. * the returned visitor handles the right-hand side.
*/ */
open fun visitAndArgument(): KmEffectExpressionVisitor? = public open fun visitAndArgument(): KmEffectExpressionVisitor? =
delegate?.visitAndArgument() delegate?.visitAndArgument()
/** /**
* Visits the argument of an `||`-expression. If this method is called, the expression represents the left-hand side and * Visits the argument of an `||`-expression. If this method is called, the expression represents the left-hand side and
* the returned visitor handles the right-hand side. * the returned visitor handles the right-hand side.
*/ */
open fun visitOrArgument(): KmEffectExpressionVisitor? = public open fun visitOrArgument(): KmEffectExpressionVisitor? =
delegate?.visitOrArgument() delegate?.visitOrArgument()
/** /**
* Visits the end of the effect expression. * Visits the end of the effect expression.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -872,7 +873,7 @@ abstract class KmEffectExpressionVisitor @JvmOverloads constructor(private val d
* Variance applied to a type parameter on the declaration site (*declaration-site variance*), * Variance applied to a type parameter on the declaration site (*declaration-site variance*),
* or to a type in a projection (*use-site variance*). * or to a type in a projection (*use-site variance*).
*/ */
enum class KmVariance { public enum class KmVariance {
/** /**
* The affected type parameter or type is *invariant*, which means it has no variance applied to it. * The affected type parameter or type is *invariant*, which means it has no variance applied to it.
*/ */
@@ -896,7 +897,7 @@ enum class KmVariance {
* may change in a subsequent release. * may change in a subsequent release.
*/ */
@ExperimentalContracts @ExperimentalContracts
enum class KmEffectType { public enum class KmEffectType {
/** /**
* Represents `returns(value)` contract effect: * Represents `returns(value)` contract effect:
* a situation when a function returns normally with the specified return value. * a situation when a function returns normally with the specified return value.
@@ -927,7 +928,7 @@ enum class KmEffectType {
* may change in a subsequent release. * may change in a subsequent release.
*/ */
@ExperimentalContracts @ExperimentalContracts
enum class KmEffectInvocationKind { public enum class KmEffectInvocationKind {
/** /**
* A function parameter will be invoked one time or not invoked at all. * A function parameter will be invoked one time or not invoked at all.
*/ */
@@ -947,7 +948,7 @@ enum class KmEffectInvocationKind {
/** /**
* Severity of the diagnostic reported by the compiler when a version requirement is not satisfied. * Severity of the diagnostic reported by the compiler when a version requirement is not satisfied.
*/ */
enum class KmVersionRequirementLevel { public enum class KmVersionRequirementLevel {
/** /**
* Represents a diagnostic with 'WARNING' severity. * Represents a diagnostic with 'WARNING' severity.
*/ */
@@ -967,7 +968,7 @@ enum class KmVersionRequirementLevel {
/** /**
* The kind of the version that is required by a version requirement. * The kind of the version that is required by a version requirement.
*/ */
enum class KmVersionRequirementVersionKind { public enum class KmVersionRequirementVersionKind {
/** /**
* Indicates that certain language version is required. * Indicates that certain language version is required.
*/ */
@@ -39,9 +39,9 @@ public class BooleanFlagDelegate<Node>(private val flags: KMutableProperty1<Node
mask = 1 shl flag.offset mask = 1 shl flag.offset
} }
operator fun getValue(thisRef: Node, property: KProperty<*>): Boolean = flag(flags.get(thisRef)) public operator fun getValue(thisRef: Node, property: KProperty<*>): Boolean = flag(flags.get(thisRef))
operator fun setValue(thisRef: Node, property: KProperty<*>, value: Boolean) { public operator fun setValue(thisRef: Node, property: KProperty<*>, value: Boolean) {
val newValue = if (value) flags.get(thisRef) or mask else flags.get(thisRef) and mask.inv() val newValue = if (value) flags.get(thisRef) or mask else flags.get(thisRef) and mask.inv()
flags.set(thisRef, newValue) flags.set(thisRef, newValue)
} }
@@ -7,7 +7,7 @@ package kotlinx.metadata.internal
import org.jetbrains.kotlin.metadata.deserialization.Flags as F import org.jetbrains.kotlin.metadata.deserialization.Flags as F
class FlagImpl(internal val offset: Int, internal val bitWidth: Int, internal val value: Int) : @Suppress("DEPRECATION") kotlinx.metadata.Flag() { public class FlagImpl(internal val offset: Int, internal val bitWidth: Int, internal val value: Int) : @Suppress("DEPRECATION") kotlinx.metadata.Flag() {
@IgnoreInApiDump @IgnoreInApiDump
internal constructor(field: F.FlagField<*>, value: Int) : this(field.offset, field.bitWidth, value) internal constructor(field: F.FlagField<*>, value: Int) : this(field.offset, field.bitWidth, value)
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value.Type.*
import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.Flags
import org.jetbrains.kotlin.metadata.deserialization.NameResolver import org.jetbrains.kotlin.metadata.deserialization.NameResolver
fun ProtoBuf.Annotation.readAnnotation(strings: NameResolver): KmAnnotation = public fun ProtoBuf.Annotation.readAnnotation(strings: NameResolver): KmAnnotation =
KmAnnotation( KmAnnotation(
strings.getClassName(id), strings.getClassName(id),
argumentList.mapNotNull { argument -> argumentList.mapNotNull { argument ->
@@ -23,7 +23,7 @@ fun ProtoBuf.Annotation.readAnnotation(strings: NameResolver): KmAnnotation =
}.toMap() }.toMap()
) )
fun ProtoBuf.Annotation.Argument.Value.readAnnotationArgument(strings: NameResolver): KmAnnotationArgument? { public fun ProtoBuf.Annotation.Argument.Value.readAnnotationArgument(strings: NameResolver): KmAnnotationArgument? {
if (Flags.IS_UNSIGNED[flags]) { if (Flags.IS_UNSIGNED[flags]) {
return when (type) { return when (type) {
BYTE -> KmAnnotationArgument.UByteValue(intValue.toByte().toUByte()) BYTE -> KmAnnotationArgument.UByteValue(intValue.toByte().toUByte())
@@ -18,29 +18,29 @@ import org.jetbrains.kotlin.metadata.deserialization.Flags as F
* Allows to populate [ReadContext] with additional data * Allows to populate [ReadContext] with additional data
* that can be used when reading metadata in [MetadataExtensions]. * that can be used when reading metadata in [MetadataExtensions].
*/ */
interface ReadContextExtension public interface ReadContextExtension
class ReadContext( public class ReadContext(
val strings: NameResolver, public val strings: NameResolver,
val types: TypeTable, public val types: TypeTable,
@get:IgnoreInApiDump internal val versionRequirements: VersionRequirementTable, @get:IgnoreInApiDump internal val versionRequirements: VersionRequirementTable,
private val parent: ReadContext? = null, private val parent: ReadContext? = null,
val contextExtensions: List<ReadContextExtension> = emptyList() internal val contextExtensions: List<ReadContextExtension> = emptyList()
) { ) {
private val typeParameterNameToId = mutableMapOf<Int, Int>() private val typeParameterNameToId = mutableMapOf<Int, Int>()
internal val extensions = MetadataExtensions.INSTANCES internal val extensions = MetadataExtensions.INSTANCES
operator fun get(index: Int): String = public operator fun get(index: Int): String =
strings.getString(index) strings.getString(index)
fun className(index: Int): ClassName = internal fun className(index: Int): ClassName =
strings.getClassName(index) strings.getClassName(index)
fun getTypeParameterId(name: Int): Int? = internal fun getTypeParameterId(name: Int): Int? =
typeParameterNameToId[name] ?: parent?.getTypeParameterId(name) typeParameterNameToId[name] ?: parent?.getTypeParameterId(name)
fun withTypeParameters(typeParameters: List<ProtoBuf.TypeParameter>): ReadContext = internal fun withTypeParameters(typeParameters: List<ProtoBuf.TypeParameter>): ReadContext =
ReadContext(strings, types, versionRequirements, this, contextExtensions).apply { ReadContext(strings, types, versionRequirements, this, contextExtensions).apply {
for (typeParameter in typeParameters) { for (typeParameter in typeParameters) {
typeParameterNameToId[typeParameter.name] = typeParameter.id typeParameterNameToId[typeParameter.name] = typeParameter.id
@@ -49,7 +49,7 @@ class ReadContext(
} }
@OptIn(ExperimentalContextReceivers::class) @OptIn(ExperimentalContextReceivers::class)
fun ProtoBuf.Class.accept( public fun ProtoBuf.Class.accept(
v: KmClassVisitor, v: KmClassVisitor,
strings: NameResolver, strings: NameResolver,
contextExtensions: List<ReadContextExtension> = emptyList() contextExtensions: List<ReadContextExtension> = emptyList()
@@ -130,7 +130,7 @@ private fun ProtoBuf.Class.loadInlineClassUnderlyingType(c: ReadContext): ProtoB
?.returnType(c.types) ?.returnType(c.types)
} }
fun ProtoBuf.Package.accept( public fun ProtoBuf.Package.accept(
v: KmPackageVisitor, v: KmPackageVisitor,
strings: NameResolver, strings: NameResolver,
contextExtensions: List<ReadContextExtension> = emptyList() contextExtensions: List<ReadContextExtension> = emptyList()
@@ -151,7 +151,7 @@ fun ProtoBuf.Package.accept(
v.visitEnd() v.visitEnd()
} }
fun ProtoBuf.PackageFragment.accept( public fun ProtoBuf.PackageFragment.accept(
v: KmModuleFragmentVisitor, v: KmModuleFragmentVisitor,
strings: NameResolver, strings: NameResolver,
contextExtensions: List<ReadContextExtension> = emptyList() contextExtensions: List<ReadContextExtension> = emptyList()
@@ -197,7 +197,7 @@ private fun KmDeclarationContainerVisitor.visitDeclarations(
} }
} }
fun ProtoBuf.Function.accept(v: KmLambdaVisitor, strings: NameResolver) { public fun ProtoBuf.Function.accept(v: KmLambdaVisitor, strings: NameResolver) {
val c = ReadContext(strings, TypeTable(typeTable), VersionRequirementTable.EMPTY) val c = ReadContext(strings, TypeTable(typeTable), VersionRequirementTable.EMPTY)
v.visitFunction(flags, c[name])?.let { accept(it, c) } v.visitFunction(flags, c[name])?.let { accept(it, c) }
@@ -261,7 +261,7 @@ private fun ProtoBuf.Function.accept(v: KmFunctionVisitor, outer: ReadContext) {
} }
@OptIn(ExperimentalContextReceivers::class) @OptIn(ExperimentalContextReceivers::class)
fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) { public fun ProtoBuf.Property.accept(v: KmPropertyVisitor, outer: ReadContext) {
val c = outer.withTypeParameters(typeParameterList) val c = outer.withTypeParameters(typeParameterList)
for (typeParameter in typeParameterList) { for (typeParameter in typeParameterList) {
@@ -520,10 +520,10 @@ private val ProtoBuf.Type.typeFlags: Int
private val ProtoBuf.TypeParameter.typeParameterFlags: Int private val ProtoBuf.TypeParameter.typeParameterFlags: Int
get() = if (reified) 1 else 0 get() = if (reified) 1 else 0
fun ProtoBuf.Property.getPropertyGetterFlags(): Int = public fun ProtoBuf.Property.getPropertyGetterFlags(): Int =
if (hasGetterFlags()) getterFlags else getDefaultPropertyAccessorFlags(flags) if (hasGetterFlags()) getterFlags else getDefaultPropertyAccessorFlags(flags)
fun ProtoBuf.Property.getPropertySetterFlags(): Int = public fun ProtoBuf.Property.getPropertySetterFlags(): Int =
if (hasSetterFlags()) setterFlags else getDefaultPropertyAccessorFlags(flags) if (hasSetterFlags()) setterFlags else getDefaultPropertyAccessorFlags(flags)
internal fun getDefaultPropertyAccessorFlags(flags: Int): Int = internal fun getDefaultPropertyAccessorFlags(flags: Int): Int =
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.Flags
import org.jetbrains.kotlin.metadata.serialization.StringTable import org.jetbrains.kotlin.metadata.serialization.StringTable
fun KmAnnotation.writeAnnotation(strings: StringTable): ProtoBuf.Annotation.Builder = public fun KmAnnotation.writeAnnotation(strings: StringTable): ProtoBuf.Annotation.Builder =
ProtoBuf.Annotation.newBuilder().apply { ProtoBuf.Annotation.newBuilder().apply {
id = strings.getClassNameIndex(className) id = strings.getClassNameIndex(className)
for ((name, argument) in arguments) { for ((name, argument) in arguments) {
@@ -24,7 +24,7 @@ fun KmAnnotation.writeAnnotation(strings: StringTable): ProtoBuf.Annotation.Buil
} }
} }
fun KmAnnotationArgument.writeAnnotationArgument(strings: StringTable): ProtoBuf.Annotation.Argument.Value.Builder = public fun KmAnnotationArgument.writeAnnotationArgument(strings: StringTable): ProtoBuf.Annotation.Argument.Value.Builder =
ProtoBuf.Annotation.Argument.Value.newBuilder().apply { ProtoBuf.Annotation.Argument.Value.newBuilder().apply {
when (this@writeAnnotationArgument) { when (this@writeAnnotationArgument) {
is KmAnnotationArgument.ByteValue -> { is KmAnnotationArgument.ByteValue -> {
@@ -19,15 +19,15 @@ import kotlin.contracts.ExperimentalContracts
* Allows to populate [WriteContext] with additional data * Allows to populate [WriteContext] with additional data
* that can be used when writing metadata in [MetadataExtensions]. * that can be used when writing metadata in [MetadataExtensions].
*/ */
interface WriteContextExtension public interface WriteContextExtension
open class WriteContext(val strings: StringTable, val contextExtensions: List<WriteContextExtension> = emptyList()) { public open class WriteContext(public val strings: StringTable, public val contextExtensions: List<WriteContextExtension> = emptyList()) {
val versionRequirements: MutableVersionRequirementTable = MutableVersionRequirementTable() internal val versionRequirements: MutableVersionRequirementTable = MutableVersionRequirementTable()
operator fun get(string: String): Int = public operator fun get(string: String): Int =
strings.getStringIndex(string) strings.getStringIndex(string)
fun getClassName(name: ClassName): Int = internal fun getClassName(name: ClassName): Int =
strings.getClassNameIndex(name) strings.getClassNameIndex(name)
} }
@@ -191,7 +191,7 @@ private fun writeFunction(c: WriteContext, flags: Int, name: String, output: (Pr
} }
} }
fun writeProperty( public fun writeProperty(
c: WriteContext, flags: Int, name: String, getterFlags: Int, setterFlags: Int, output: (ProtoBuf.Property.Builder) -> Unit c: WriteContext, flags: Int, name: String, getterFlags: Int, setterFlags: Int, output: (ProtoBuf.Property.Builder) -> Unit
): KmPropertyVisitor = object : KmPropertyVisitor() { ): KmPropertyVisitor = object : KmPropertyVisitor() {
val t = ProtoBuf.Property.newBuilder() val t = ProtoBuf.Property.newBuilder()
@@ -424,8 +424,8 @@ private fun writeEffectExpression(c: WriteContext, output: (ProtoBuf.Expression.
} }
} }
open class ClassWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmClassVisitor() { public open class ClassWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmClassVisitor() {
protected val t = ProtoBuf.Class.newBuilder()!! protected val t: ProtoBuf.Class.Builder = ProtoBuf.Class.newBuilder()!!
protected val c: WriteContext = WriteContext(stringTable, contextExtensions) protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
override fun visit(flags: Int, name: ClassName) { override fun visit(flags: Int, name: ClassName) {
@@ -497,8 +497,8 @@ open class ClassWriter(stringTable: StringTable, contextExtensions: List<WriteCo
} }
} }
open class PackageWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmPackageVisitor() { public open class PackageWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : KmPackageVisitor() {
protected val t = ProtoBuf.Package.newBuilder()!! protected val t: ProtoBuf.Package.Builder = ProtoBuf.Package.newBuilder()!!
protected val c: WriteContext = WriteContext(stringTable, contextExtensions) protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor? = override fun visitFunction(flags: Int, name: String): KmFunctionVisitor? =
@@ -522,9 +522,9 @@ open class PackageWriter(stringTable: StringTable, contextExtensions: List<Write
} }
} }
open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) : public open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: List<WriteContextExtension> = emptyList()) :
KmModuleFragmentVisitor() { KmModuleFragmentVisitor() {
protected val t = ProtoBuf.PackageFragment.newBuilder()!! protected val t: ProtoBuf.PackageFragment.Builder = ProtoBuf.PackageFragment.newBuilder()!!
protected val c: WriteContext = WriteContext(stringTable, contextExtensions) protected val c: WriteContext = WriteContext(stringTable, contextExtensions)
override fun visitPackage(): KmPackageVisitor? = object : PackageWriter(c.strings, c.contextExtensions) { override fun visitPackage(): KmPackageVisitor? = object : PackageWriter(c.strings, c.contextExtensions) {
@@ -547,9 +547,9 @@ open class ModuleFragmentWriter(stringTable: StringTable, contextExtensions: Lis
} }
} }
open class LambdaWriter(stringTable: StringTable) : KmLambdaVisitor() { public open class LambdaWriter(stringTable: StringTable) : KmLambdaVisitor() {
protected var t: ProtoBuf.Function.Builder? = null protected var t: ProtoBuf.Function.Builder? = null
protected val c = WriteContext(stringTable) protected val c: WriteContext = WriteContext(stringTable)
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor? = override fun visitFunction(flags: Int, name: String): KmFunctionVisitor? =
writeFunction(c, flags, name) { t = it } writeFunction(c, flags, name) { t = it }
@@ -22,15 +22,16 @@ import java.io.ByteArrayInputStream
* Usually such metadata comes from serialized klibs. However, special `kotlin_builtins` file from standard library * Usually such metadata comes from serialized klibs. However, special `kotlin_builtins` file from standard library
* distribution can also be read with this reader. * distribution can also be read with this reader.
*/ */
class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.PackageFragment) { public class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.PackageFragment) {
fun toKmModuleFragment(): KmModuleFragment = public fun toKmModuleFragment(): KmModuleFragment =
KmModuleFragment().apply(this::accept) KmModuleFragment().apply(this::accept)
class Writer : KmModuleFragmentVisitor() { // private because there are no use-cases and it is not finished
private class Writer : KmModuleFragmentVisitor() {
// TODO // TODO
} }
fun accept(v: KmModuleFragmentVisitor) { public fun accept(v: KmModuleFragmentVisitor) {
val strings = NameResolverImpl(proto.strings, proto.qualifiedNames) val strings = NameResolverImpl(proto.strings, proto.qualifiedNames)
if (proto.hasPackage()) { if (proto.hasPackage()) {
v.visitPackage()?.let { proto.`package`.accept(it, strings) } v.visitPackage()?.let { proto.`package`.accept(it, strings) }
@@ -41,9 +42,9 @@ class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.Packa
v.visitEnd() v.visitEnd()
} }
companion object { public companion object {
@JvmStatic @JvmStatic
fun read(bytes: ByteArray): KotlinCommonMetadata? { public fun read(bytes: ByteArray): KotlinCommonMetadata? {
val (proto, _) = ByteArrayInputStream(bytes).readBuiltinsPackageFragment() val (proto, _) = ByteArrayInputStream(bytes).readBuiltinsPackageFragment()
if (proto == null) return null if (proto == null) return null
@@ -62,17 +63,17 @@ class KotlinCommonMetadata private constructor(private val proto: ProtoBuf.Packa
* Can be read with [KotlinCommonMetadata.read]. * Can be read with [KotlinCommonMetadata.read].
*/ */
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class KmModuleFragment : KmModuleFragmentVisitor() { public class KmModuleFragment : KmModuleFragmentVisitor() {
/** /**
* Top-level functions, type aliases and properties in the module fragment. * Top-level functions, type aliases and properties in the module fragment.
*/ */
var pkg: KmPackage? = null public var pkg: KmPackage? = null
/** /**
* Classes in the module fragment. * Classes in the module fragment.
*/ */
val classes: MutableList<KmClass> = ArrayList() public val classes: MutableList<KmClass> = ArrayList()
private val extensions: List<KmModuleFragmentExtension> = private val extensions: List<KmModuleFragmentExtension> =
MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions) MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions)
@@ -95,7 +96,7 @@ class KmModuleFragment : KmModuleFragmentVisitor() {
* @param visitor the visitor which will visit data in the module fragment. * @param visitor the visitor which will visit data in the module fragment.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
fun accept(visitor: KmModuleFragmentVisitor) { public fun accept(visitor: KmModuleFragmentVisitor) {
pkg?.let { visitor.visitPackage()?.let(it::accept) } pkg?.let { visitor.visitPackage()?.let(it::accept) }
classes.forEach { visitor.visitClass()?.let(it::accept) } classes.forEach { visitor.visitClass()?.let(it::accept) }
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) } extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
@@ -111,18 +112,18 @@ class KmModuleFragment : KmModuleFragmentVisitor() {
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) { public abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) {
/** /**
* Visits a package within the module fragment. * Visits a package within the module fragment.
*/ */
open fun visitPackage(): KmPackageVisitor? = public open fun visitPackage(): KmPackageVisitor? =
delegate?.visitPackage() delegate?.visitPackage()
/** /**
* Visits a class within the module fragment. * Visits a class within the module fragment.
*/ */
open fun visitClass(): KmClassVisitor? = public open fun visitClass(): KmClassVisitor? =
delegate?.visitClass() delegate?.visitClass()
/** /**
@@ -130,13 +131,13 @@ abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val del
* *
* @param type the type of extension visitor to be returned. * @param type the type of extension visitor to be returned.
*/ */
open fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? = public open fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? =
delegate?.visitExtensions(type) delegate?.visitExtensions(type)
/** /**
* Visits the end of the module fragment. * Visits the end of the module fragment.
*/ */
open fun visitEnd() { public open fun visitEnd() {
delegate?.visitEnd() delegate?.visitEnd()
} }
} }
@@ -145,4 +146,4 @@ abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val del
* A visitor to visit platform-specific extensions for a module fragment. * A visitor to visit platform-specific extensions for a module fragment.
*/ */
@Deprecated(VISITOR_API_MESSAGE) @Deprecated(VISITOR_API_MESSAGE)
interface KmModuleFragmentExtensionVisitor : KmExtensionVisitor public interface KmModuleFragmentExtensionVisitor : KmExtensionVisitor
@@ -9,26 +9,26 @@ package kotlinx.metadata.internal.extensions
import kotlinx.metadata.* import kotlinx.metadata.*
import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor import kotlinx.metadata.internal.common.KmModuleFragmentExtensionVisitor
interface KmExtension<V : KmExtensionVisitor> : KmExtensionVisitor { public interface KmExtension<V : KmExtensionVisitor> : KmExtensionVisitor {
fun accept(visitor: V) public fun accept(visitor: V)
} }
interface KmClassExtension : KmClassExtensionVisitor, KmExtension<KmClassExtensionVisitor> public interface KmClassExtension : KmClassExtensionVisitor, KmExtension<KmClassExtensionVisitor>
interface KmPackageExtension : KmPackageExtensionVisitor, KmExtension<KmPackageExtensionVisitor> public interface KmPackageExtension : KmPackageExtensionVisitor, KmExtension<KmPackageExtensionVisitor>
interface KmModuleFragmentExtension : KmModuleFragmentExtensionVisitor, KmExtension<KmModuleFragmentExtensionVisitor> public interface KmModuleFragmentExtension : KmModuleFragmentExtensionVisitor, KmExtension<KmModuleFragmentExtensionVisitor>
interface KmFunctionExtension : KmFunctionExtensionVisitor, KmExtension<KmFunctionExtensionVisitor> public interface KmFunctionExtension : KmFunctionExtensionVisitor, KmExtension<KmFunctionExtensionVisitor>
interface KmPropertyExtension : KmPropertyExtensionVisitor, KmExtension<KmPropertyExtensionVisitor> public interface KmPropertyExtension : KmPropertyExtensionVisitor, KmExtension<KmPropertyExtensionVisitor>
interface KmConstructorExtension : KmConstructorExtensionVisitor, KmExtension<KmConstructorExtensionVisitor> public interface KmConstructorExtension : KmConstructorExtensionVisitor, KmExtension<KmConstructorExtensionVisitor>
interface KmTypeParameterExtension : KmTypeParameterExtensionVisitor, KmExtension<KmTypeParameterExtensionVisitor> public interface KmTypeParameterExtension : KmTypeParameterExtensionVisitor, KmExtension<KmTypeParameterExtensionVisitor>
interface KmTypeExtension : KmTypeExtensionVisitor, KmExtension<KmTypeExtensionVisitor> public interface KmTypeExtension : KmTypeExtensionVisitor, KmExtension<KmTypeExtensionVisitor>
interface KmTypeAliasExtension : KmTypeAliasExtensionVisitor, KmExtension<KmTypeAliasExtensionVisitor> public interface KmTypeAliasExtension : KmTypeAliasExtensionVisitor, KmExtension<KmTypeAliasExtensionVisitor>
interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension<KmValueParameterExtensionVisitor> public interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension<KmValueParameterExtensionVisitor>
@@ -12,77 +12,78 @@ import org.jetbrains.kotlin.metadata.ProtoBuf
import java.util.* import java.util.*
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
interface MetadataExtensions { public interface MetadataExtensions {
fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) public fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext)
fun readPackageExtensions(v: KmPackageVisitor, proto: ProtoBuf.Package, c: ReadContext) public fun readPackageExtensions(v: KmPackageVisitor, proto: ProtoBuf.Package, c: ReadContext)
fun readModuleFragmentExtensions(v: KmModuleFragmentVisitor, proto: ProtoBuf.PackageFragment, c: ReadContext) public fun readModuleFragmentExtensions(v: KmModuleFragmentVisitor, proto: ProtoBuf.PackageFragment, c: ReadContext)
fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext) public fun readFunctionExtensions(v: KmFunctionVisitor, proto: ProtoBuf.Function, c: ReadContext)
fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext) public fun readPropertyExtensions(v: KmPropertyVisitor, proto: ProtoBuf.Property, c: ReadContext)
fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext) public fun readConstructorExtensions(v: KmConstructorVisitor, proto: ProtoBuf.Constructor, c: ReadContext)
fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext) public fun readTypeParameterExtensions(v: KmTypeParameterVisitor, proto: ProtoBuf.TypeParameter, c: ReadContext)
fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext) public fun readTypeExtensions(v: KmTypeVisitor, proto: ProtoBuf.Type, c: ReadContext)
fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext) public fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext)
fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext) public fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext)
fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor? public fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor?
fun writePackageExtensions(type: KmExtensionType, proto: ProtoBuf.Package.Builder, c: WriteContext): KmPackageExtensionVisitor? public fun writePackageExtensions(type: KmExtensionType, proto: ProtoBuf.Package.Builder, c: WriteContext): KmPackageExtensionVisitor?
fun writeModuleFragmentExtensions( public fun writeModuleFragmentExtensions(
type: KmExtensionType, proto: ProtoBuf.PackageFragment.Builder, c: WriteContext type: KmExtensionType, proto: ProtoBuf.PackageFragment.Builder, c: WriteContext
): KmModuleFragmentExtensionVisitor? ): KmModuleFragmentExtensionVisitor?
fun writeFunctionExtensions(type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext): KmFunctionExtensionVisitor? public fun writeFunctionExtensions(type: KmExtensionType, proto: ProtoBuf.Function.Builder, c: WriteContext): KmFunctionExtensionVisitor?
fun writePropertyExtensions(type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext): KmPropertyExtensionVisitor? public fun writePropertyExtensions(type: KmExtensionType, proto: ProtoBuf.Property.Builder, c: WriteContext): KmPropertyExtensionVisitor?
fun writeConstructorExtensions( public fun writeConstructorExtensions(
type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext type: KmExtensionType, proto: ProtoBuf.Constructor.Builder, c: WriteContext
): KmConstructorExtensionVisitor? ): KmConstructorExtensionVisitor?
fun writeTypeParameterExtensions( public fun writeTypeParameterExtensions(
type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext type: KmExtensionType, proto: ProtoBuf.TypeParameter.Builder, c: WriteContext
): KmTypeParameterExtensionVisitor? ): KmTypeParameterExtensionVisitor?
fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor? public fun writeTypeExtensions(type: KmExtensionType, proto: ProtoBuf.Type.Builder, c: WriteContext): KmTypeExtensionVisitor?
fun writeTypeAliasExtensions(type: KmExtensionType, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext): KmTypeAliasExtensionVisitor? public fun writeTypeAliasExtensions(type: KmExtensionType, proto: ProtoBuf.TypeAlias.Builder, c: WriteContext): KmTypeAliasExtensionVisitor?
fun writeValueParameterExtensions( public fun writeValueParameterExtensions(
type: KmExtensionType, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext type: KmExtensionType, proto: ProtoBuf.ValueParameter.Builder, c: WriteContext
): KmValueParameterExtensionVisitor? ): KmValueParameterExtensionVisitor?
fun createClassExtension(): KmClassExtension public fun createClassExtension(): KmClassExtension
fun createPackageExtension(): KmPackageExtension public fun createPackageExtension(): KmPackageExtension
fun createModuleFragmentExtensions(): KmModuleFragmentExtension public fun createModuleFragmentExtensions(): KmModuleFragmentExtension
fun createFunctionExtension(): KmFunctionExtension public fun createFunctionExtension(): KmFunctionExtension
fun createPropertyExtension(): KmPropertyExtension public fun createPropertyExtension(): KmPropertyExtension
fun createConstructorExtension(): KmConstructorExtension public fun createConstructorExtension(): KmConstructorExtension
fun createTypeParameterExtension(): KmTypeParameterExtension public fun createTypeParameterExtension(): KmTypeParameterExtension
fun createTypeExtension(): KmTypeExtension public fun createTypeExtension(): KmTypeExtension
fun createTypeAliasExtension(): KmTypeAliasExtension? public fun createTypeAliasExtension(): KmTypeAliasExtension?
fun createValueParameterExtension(): KmValueParameterExtension? public fun createValueParameterExtension(): KmValueParameterExtension?
companion object { // 'internal' is not applicable inside an interface: KT-59796
val INSTANCES: List<MetadataExtensions> by lazy { public companion object {
internal val INSTANCES: List<MetadataExtensions> by lazy {
ServiceLoader.load(MetadataExtensions::class.java, MetadataExtensions::class.java.classLoader).toList().also { ServiceLoader.load(MetadataExtensions::class.java, MetadataExtensions::class.java.classLoader).toList().also {
if (it.isEmpty()) error( if (it.isEmpty()) error(
"No MetadataExtensions instances found in the classpath. Please ensure that the META-INF/services/ " + "No MetadataExtensions instances found in the classpath. Please ensure that the META-INF/services/ " +