Remove all deprecated API from kotlin-metadata(-jvm).
This includes APIs such as: - Visitors API - Obsolete KotlinClassMetadata reading and writing API - Extension and extension visitors API - Flags and `class Flag` (a reduced version of it was moved to test sources) - Various utility methods Extensions mechanism got reworked with the removal of public visitors; it is completely internal now with special accessors in kotlinx.metadata.internal package. Since `var KmClass.flags` is internal now (instead of being deprecated), special utility functions with the name `_flagAccess` were added to internal package for testing purposes. ^KT-63156 Fixed
This commit is contained in:
committed by
Space Team
parent
e002f07ff5
commit
50331fb149
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,6 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
@file:JvmName("JvmAttributes")
|
@file:JvmName("JvmAttributes")
|
||||||
|
|
||||||
package kotlin.metadata.jvm
|
package kotlin.metadata.jvm
|
||||||
@@ -11,6 +10,7 @@ package kotlin.metadata.jvm
|
|||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.internal.*
|
import kotlin.metadata.internal.*
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||||
|
import kotlin.metadata.jvm.internal.jvm
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags as JF
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags as JF
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,3 +55,16 @@ public var KmClass.isCompiledInCompatibilityMode: Boolean by BooleanFlagDelegate
|
|||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
private var KmProperty.jvmFlags: Int
|
||||||
|
get() = jvm.jvmFlags
|
||||||
|
set(value) {
|
||||||
|
jvm.jvmFlags = value
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private var KmClass.jvmFlags: Int
|
||||||
|
get() = jvm.jvmFlags
|
||||||
|
set(value) {
|
||||||
|
jvm.jvmFlags = value
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,379 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
@file:Suppress("DEPRECATION_ERROR") // delegate implementation
|
|
||||||
|
|
||||||
package kotlin.metadata.jvm
|
|
||||||
|
|
||||||
import kotlin.metadata.*
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public abstract class JvmDeclarationContainerExtensionVisitor @JvmOverloads constructor(
|
|
||||||
protected open val delegate: JvmDeclarationContainerExtensionVisitor? = null
|
|
||||||
) : KmDeclarationContainerExtensionVisitor {
|
|
||||||
/**
|
|
||||||
* Visits the metadata of a local delegated property used somewhere inside this container (but not in a nested declaration container).
|
|
||||||
* Note that for classes produced by the Kotlin compiler, such properties will have default accessors.
|
|
||||||
*
|
|
||||||
* The order of visited local delegated properties is important. The Kotlin compiler generates the corresponding property's index
|
|
||||||
* at the call site, so that reflection would be able to load the metadata of the property with that index at runtime.
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
* @param flags property flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Property] flags
|
|
||||||
* @param name the name of the property
|
|
||||||
* @param getterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
|
||||||
* and [Flag.PropertyAccessor] flags
|
|
||||||
* @param setterFlags property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
|
||||||
* and [Flag.PropertyAccessor] flags
|
|
||||||
*/
|
|
||||||
public open fun visitLocalDelegatedProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor? =
|
|
||||||
delegate?.visitLocalDelegatedProperty(flags, name, getterFlags, setterFlags)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the name of the module where this container is declared.
|
|
||||||
*/
|
|
||||||
public open fun visitModuleName(name: String) {
|
|
||||||
delegate?.visitModuleName(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a class.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmClassExtensionVisitor @JvmOverloads constructor(
|
|
||||||
delegate: JvmClassExtensionVisitor? = null
|
|
||||||
) : KmClassExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) {
|
|
||||||
override val delegate: JvmClassExtensionVisitor?
|
|
||||||
get() = super.delegate as JvmClassExtensionVisitor?
|
|
||||||
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
public open fun visitAnonymousObjectOriginName(internalName: String) {
|
|
||||||
delegate?.visitAnonymousObjectOriginName(internalName)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM-specific flags of the class, consisting of [JvmFlag.Class] flags.
|
|
||||||
*/
|
|
||||||
public open fun visitJvmFlags(flags: Int) {
|
|
||||||
delegate?.visitJvmFlags(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the class.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmClassExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a package fragment.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmPackageExtensionVisitor @JvmOverloads constructor(
|
|
||||||
delegate: JvmPackageExtensionVisitor? = null
|
|
||||||
) : KmPackageExtensionVisitor, JvmDeclarationContainerExtensionVisitor(delegate) {
|
|
||||||
override val delegate: JvmPackageExtensionVisitor?
|
|
||||||
get() = super.delegate as JvmPackageExtensionVisitor?
|
|
||||||
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the package fragment.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmPackageExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a function.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmFunctionExtensionVisitor @JvmOverloads constructor(
|
|
||||||
private val delegate: JvmFunctionExtensionVisitor? = null
|
|
||||||
) : KmFunctionExtensionVisitor {
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM signature of the function, or null if the JVM signature of this function is unknown.
|
|
||||||
*
|
|
||||||
* Example: `JvmMethodSignature("equals", "(Ljava/lang/Object;)Z")`
|
|
||||||
*
|
|
||||||
* @param signature the signature of the function
|
|
||||||
*/
|
|
||||||
public open fun visit(signature: JvmMethodSignature?) {
|
|
||||||
delegate?.visit(signature)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
public open fun visitLambdaClassOriginName(internalName: String) {
|
|
||||||
delegate?.visitLambdaClassOriginName(internalName)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the function.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmFunctionExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a property.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmPropertyExtensionVisitor @JvmOverloads constructor(
|
|
||||||
private val delegate: JvmPropertyExtensionVisitor? = null
|
|
||||||
) : KmPropertyExtensionVisitor {
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits JVM signatures of field and accessors generated for the property.
|
|
||||||
*
|
|
||||||
* @param jvmFlags JVM-specific flags of the property, consisting of [JvmFlag.Property] flags
|
|
||||||
* @param fieldSignature the signature of the backing field of the property, or `null` if this property has no backing field.
|
|
||||||
* Example: `JvmFieldSignature("X", "Ljava/lang/Object;")`
|
|
||||||
* @param getterSignature the signature of the property getter, or `null` if this property has no getter or its signature is unknown.
|
|
||||||
* Example: `JvmMethodSignature("getX", "()Ljava/lang/Object;")`
|
|
||||||
* @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")`
|
|
||||||
*/
|
|
||||||
public open fun visit(
|
|
||||||
jvmFlags: Int,
|
|
||||||
fieldSignature: JvmFieldSignature?,
|
|
||||||
getterSignature: JvmMethodSignature?,
|
|
||||||
setterSignature: JvmMethodSignature?
|
|
||||||
) {
|
|
||||||
delegate?.visit(jvmFlags, fieldSignature, getterSignature, setterSignature)
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
visit(fieldSignature, getterSignature, setterSignature)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
"Use visit(Flags, JvmFieldSignature?, JvmMethodSignature?, JvmMethodSignature?) instead.",
|
|
||||||
level = DeprecationLevel.ERROR,
|
|
||||||
replaceWith = ReplaceWith("visit(flagsOf(), fieldSignature, getterSignature, setterSignature)", "kotlinx.metadata.flagsOf")
|
|
||||||
)
|
|
||||||
public open fun visit(
|
|
||||||
fieldSignature: JvmFieldSignature?,
|
|
||||||
getterSignature: JvmMethodSignature?,
|
|
||||||
setterSignature: JvmMethodSignature?
|
|
||||||
) {
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
delegate?.visit(fieldSignature, getterSignature, setterSignature)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM signature of a synthetic method which is generated to store annotations on a property in the bytecode.
|
|
||||||
*
|
|
||||||
* Example: `JvmMethodSignature("getX$annotations", "()V")`
|
|
||||||
*
|
|
||||||
* @param signature the signature of the synthetic method
|
|
||||||
*/
|
|
||||||
public open fun visitSyntheticMethodForAnnotations(signature: JvmMethodSignature?) {
|
|
||||||
delegate?.visitSyntheticMethodForAnnotations(signature)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM signature of a synthetic method which is generated when a delegated property's delegate object is
|
|
||||||
* optimized out, e.g. because it is constant; in that case, a copy of that object can be obtained on demand by calling
|
|
||||||
* this method. It takes the property's receivers as arguments.
|
|
||||||
*
|
|
||||||
* Example: `JvmMethodSignature("getX$delegate", "(LMyClass;)LMyDelegate;")`
|
|
||||||
*
|
|
||||||
* @param signature the signature of the synthetic method
|
|
||||||
*/
|
|
||||||
public open fun visitSyntheticMethodForDelegate(signature: JvmMethodSignature?) {
|
|
||||||
delegate?.visitSyntheticMethodForDelegate(signature)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the property.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmPropertyExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a constructor.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmConstructorExtensionVisitor @JvmOverloads constructor(
|
|
||||||
private val delegate: JvmConstructorExtensionVisitor? = null
|
|
||||||
) : KmConstructorExtensionVisitor {
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM signature of the constructor, or null if the JVM signature of this constructor is unknown.
|
|
||||||
*
|
|
||||||
* Example: `JvmMethodSignature("<init>", "(Ljava/lang/Object;)V")`
|
|
||||||
*
|
|
||||||
* @param signature the signature of the constructor
|
|
||||||
*/
|
|
||||||
public open fun visit(signature: JvmMethodSignature?) {
|
|
||||||
delegate?.visit(signature)
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmConstructorExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a type parameter.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor(
|
|
||||||
private val delegate: JvmTypeParameterExtensionVisitor? = null
|
|
||||||
) : KmTypeParameterExtensionVisitor {
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits an annotation on the type parameter.
|
|
||||||
*
|
|
||||||
* @param annotation the annotation on the type parameter
|
|
||||||
*/
|
|
||||||
public open fun visitAnnotation(annotation: KmAnnotation) {
|
|
||||||
delegate?.visitAnnotation(annotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the type parameter.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmTypeParameterExtensionVisitor::class)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit JVM extensions for a type.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public open class JvmTypeExtensionVisitor @JvmOverloads constructor(
|
|
||||||
private val delegate: JvmTypeExtensionVisitor? = null
|
|
||||||
) : KmTypeExtensionVisitor {
|
|
||||||
final override val type: KmExtensionType
|
|
||||||
get() = TYPE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the JVM-specific flags of a type.
|
|
||||||
*
|
|
||||||
* @param isRaw whether the type is seen as a raw type in Java
|
|
||||||
*/
|
|
||||||
public open fun visit(isRaw: Boolean) {
|
|
||||||
delegate?.visit(isRaw)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits an annotation on the type.
|
|
||||||
*
|
|
||||||
* @param annotation the annotation on the type
|
|
||||||
*/
|
|
||||||
public open fun visitAnnotation(annotation: KmAnnotation) {
|
|
||||||
delegate?.visitAnnotation(annotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of JVM extensions for the type parameter.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
public companion object {
|
|
||||||
/**
|
|
||||||
* The type of this extension visitor.
|
|
||||||
*
|
|
||||||
* @see KmExtensionType
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
public val TYPE: KmExtensionType = KmExtensionType(JvmTypeExtensionVisitor::class)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The type flexibility id, signifying that the visited type is a JVM platform type.
|
|
||||||
*
|
|
||||||
* @see KmTypeVisitor.visitFlexibleTypeUpperBound
|
|
||||||
*/
|
|
||||||
public const val PLATFORM_TYPE_ID: String = JvmProtoBufUtil.PLATFORM_TYPE_ID // TODO: move out of deprecated visitor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -42,19 +42,6 @@ public var KmClass.anonymousObjectOriginName: String?
|
|||||||
jvm.anonymousObjectOriginName = value
|
jvm.anonymousObjectOriginName = value
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public var KmClass.jvmFlags: Int
|
|
||||||
get() = jvm.jvmFlags
|
|
||||||
set(value) {
|
|
||||||
jvm.jvmFlags = value
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata of local delegated properties used somewhere inside this package fragment (but not in any class).
|
* Metadata of local delegated properties used somewhere inside this package fragment (but not in any class).
|
||||||
* Note that for classes produced by the Kotlin compiler, such properties will have default accessors.
|
* Note that for classes produced by the Kotlin compiler, such properties will have default accessors.
|
||||||
@@ -97,19 +84,6 @@ public var KmFunction.lambdaClassOriginName: String?
|
|||||||
jvm.lambdaClassOriginName = value
|
jvm.lambdaClassOriginName = value
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public var KmProperty.jvmFlags: Int
|
|
||||||
get() = jvm.jvmFlags
|
|
||||||
set(value) {
|
|
||||||
jvm.jvmFlags = value
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JVM signature of the backing field of the property, or `null` if this property has no backing field.
|
* JVM signature of the backing field of the property, or `null` if this property has no backing field.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("DEPRECATION_ERROR")
|
|
||||||
|
|
||||||
package kotlin.metadata.jvm
|
|
||||||
|
|
||||||
import kotlin.metadata.Flag
|
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags as JF
|
|
||||||
|
|
||||||
private const val prefix = "Flag API is deprecated. Please use"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JVM-specific flags in addition to common flags declared in [Flag].
|
|
||||||
*
|
|
||||||
* @see Flag
|
|
||||||
* @see Flags
|
|
||||||
*/
|
|
||||||
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.hasMethodBodiesInInterface", level = DeprecationLevel.ERROR)
|
|
||||||
public object JvmFlag {
|
|
||||||
/**
|
|
||||||
* JVM-specific property flags in addition to common property flags declared in [Flag.Property].
|
|
||||||
*/
|
|
||||||
@Deprecated("$prefix corresponding extension on KmProperty: KmProperty.isMovedFromInterfaceCompanion", level = DeprecationLevel.ERROR)
|
|
||||||
public object Property {
|
|
||||||
/**
|
|
||||||
* 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].
|
|
||||||
*
|
|
||||||
* Has no effect if the property is not declared in a companion object of some interface.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isMovedFromInterfaceCompanion", level = DeprecationLevel.ERROR)
|
|
||||||
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].
|
|
||||||
*/
|
|
||||||
@Deprecated("$prefix corresponding extensions on KmClass", level = DeprecationLevel.ERROR)
|
|
||||||
public object Class {
|
|
||||||
/**
|
|
||||||
* Applied to an interface compiled with -Xjvm-default=all or all-compatibility.
|
|
||||||
*
|
|
||||||
* Without this flag or a `@JvmDefault` annotation on individual interface methods
|
|
||||||
* the Kotlin compiler moves all interface method bodies into a nested `DefaultImpls`
|
|
||||||
* class.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.hasMethodBodiesInInterface", level = DeprecationLevel.ERROR)
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
* In compatibility mode we generate method bodies directly in the interface,
|
|
||||||
* but we also generate bridges in a nested `DefaultImpls` class for use by
|
|
||||||
* clients compiled without all-compatibility.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isCompiledInCompatibilityMode", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_COMPILED_IN_COMPATIBILITY_MODE: Flag = booleanFlag(JF.IS_COMPILED_IN_COMPATIBILITY_MODE)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun booleanFlag(f: F.BooleanFlagField): Flag =
|
|
||||||
Flag(f.offset, f.bitWidth, 1)
|
|
||||||
}
|
|
||||||
@@ -26,18 +26,6 @@ public sealed class JvmMemberSignature {
|
|||||||
* In case of a field [name] and [descriptor] are concatenated with `:` separator, e.g. `value:Ljava/lang/String;`
|
* In case of a field [name] and [descriptor] are concatenated with `:` separator, e.g. `value:Ljava/lang/String;`
|
||||||
*/
|
*/
|
||||||
abstract override fun toString(): String
|
abstract override fun toString(): String
|
||||||
|
|
||||||
// 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.ERROR)
|
|
||||||
public val desc: String get() = descriptor
|
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
"asString() is deprecated as redundant. Use toString() instead",
|
|
||||||
ReplaceWith("toString()"),
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun asString(): String = toString()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,14 +18,6 @@ public fun ClassName.toJvmInternalName(): String =
|
|||||||
if (this.isLocalClassName()) substring(1)
|
if (this.isLocalClassName()) substring(1)
|
||||||
else replace('.', '$')
|
else replace('.', '$')
|
||||||
|
|
||||||
// Deprecated since 0.6.1, should be error in 0.7.0+
|
|
||||||
@Deprecated(
|
|
||||||
"Renamed to toJvmInternalName() to avoid confusion with String properties",
|
|
||||||
ReplaceWith("toJvmInternalName()"),
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
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.
|
||||||
|
|||||||
@@ -146,40 +146,4 @@ public final class KotlinClassHeader implements Metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: equals, hashCode, etc as in Java Annotation contract?
|
// TODO: equals, hashCode, etc as in Java Annotation contract?
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link KotlinClassMetadata#CLASS_KIND} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int CLASS_KIND = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link KotlinClassMetadata#FILE_FACADE_KIND} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int FILE_FACADE_KIND = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link KotlinClassMetadata#SYNTHETIC_CLASS_KIND} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int SYNTHETIC_CLASS_KIND = 3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link KotlinClassMetadata#MULTI_FILE_CLASS_FACADE_KIND} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int MULTI_FILE_CLASS_FACADE_KIND = 4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link KotlinClassMetadata#MULTI_FILE_CLASS_PART_KIND} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int MULTI_FILE_CLASS_PART_KIND = 5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use {@link kotlinx.metadata.jvm.JvmMetadataVersion#LATEST_STABLE_SUPPORTED} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final int[] COMPATIBLE_METADATA_VERSION = Arrays.copyOf(JvmMetadataVersion.INSTANCE.toArray(), 3);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,19 +2,12 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress(
|
|
||||||
"DEPRECATION_ERROR", // Deprecated .accept implementation
|
|
||||||
"DEPRECATION", // COMPATIBLE_METADATA_VERSION as default param
|
|
||||||
"UNUSED_PARAMETER" // For deprecated Writer.write
|
|
||||||
)
|
|
||||||
|
|
||||||
package kotlin.metadata.jvm
|
package kotlin.metadata.jvm
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.internal.*
|
import kotlin.metadata.internal.*
|
||||||
import kotlin.metadata.jvm.internal.*
|
import kotlin.metadata.jvm.internal.*
|
||||||
import kotlin.metadata.jvm.internal.JvmReadUtils.readMetadataImpl
|
import kotlin.metadata.jvm.internal.JvmReadUtils.readMetadataImpl
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion as CompilerMetadataVersion
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable
|
import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -114,53 +107,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
Metadata(CLASS_KIND, version.toIntArray(), d1, d2, extraInt = flags)
|
Metadata(CLASS_KIND, version.toIntArray(), d1, d2, extraInt = flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a new [KmClass] instance created from this class metadata.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmClass property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmClass"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun toKmClass(): KmClass = KmClass().also { newKm -> kmClass.accept(newKm) } // defensive copy
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Makes the given visitor visit the metadata of this class.
|
|
||||||
*
|
|
||||||
* @param v the visitor that must visit this class
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmClassVisitor): Unit = kmClass.accept(v)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A [KmClassVisitor] that generates the metadata of a Kotlin class.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer : ClassWriter(JvmStringTable()) {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the class that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*/
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeClass(kmClass, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun write(
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0
|
|
||||||
): Class {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinClassMetadata.writeClass.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -206,53 +152,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
Metadata(FILE_FACADE_KIND, version.toIntArray(), d1, d2, extraInt = flags)
|
Metadata(FILE_FACADE_KIND, version.toIntArray(), d1, d2, extraInt = flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new [KmPackage] instance from this file facade metadata.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmPackage property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmPackage"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun toKmPackage(): KmPackage = KmPackage().also { newPkg -> kmPackage.accept(newPkg) }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Makes the given visitor visit metadata of this file facade.
|
|
||||||
*
|
|
||||||
* @param v the visitor that must visit this file facade
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmPackageVisitor): Unit = kmPackage.accept(v)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A [KmPackageVisitor] that generates the metadata of a Kotlin file facade.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer : PackageWriter(JvmStringTable()) {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the file facade that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*/
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeFileFacade(kmPackage, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun write(
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0
|
|
||||||
): FileFacade {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinClassMetadata.writeFileFacade.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -305,67 +204,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
*/
|
*/
|
||||||
public val isLambda: Boolean
|
public val isLambda: Boolean
|
||||||
get() = kmLambda != null
|
get() = kmLambda != null
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new [KmLambda] instance from this synthetic class metadata.
|
|
||||||
* Returns `null` if this synthetic class does not represent a lambda.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmLambda property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmLambda"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
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
|
|
||||||
* (`isLambda` == true).
|
|
||||||
*
|
|
||||||
* Throws [IllegalArgumentException] if this synthetic class does not represent a Kotlin lambda.
|
|
||||||
*
|
|
||||||
* @param v the visitor that must visit this lambda
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmLambdaVisitor) {
|
|
||||||
if (!isLambda) throw IllegalArgumentException(
|
|
||||||
"accept(KmLambdaVisitor) is only possible for synthetic classes which are lambdas (isLambda = true)"
|
|
||||||
)
|
|
||||||
|
|
||||||
kmLambda!!.accept(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A [KmLambdaVisitor] that generates the metadata of a synthetic class. To generate metadata of a Kotlin lambda,
|
|
||||||
* call [Writer.visitFunction] and [Writer.visitEnd] on a newly created instance of this writer. If these methods are not called,
|
|
||||||
* the resulting metadata will represent a _non-lambda_ synthetic class.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
WRITER_API_MESSAGE + ": KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " +
|
|
||||||
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer : LambdaWriter(JvmStringTable()) {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the synthetic class that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
WRITER_API_MESSAGE + ": KotlinClassMetadata.writeLambda(kmLambda, metadataVersion, extraInt) " +
|
|
||||||
"or KotlinClassMetadata.writeSyntheticClass(metadataVersion, extraInt) for a non-lambda synthetic class",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
@JvmOverloads
|
|
||||||
public fun write(
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0
|
|
||||||
): SyntheticClass {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinClassMetadata.writeLambda or KotlinClassMetadata.writeSyntheticClass.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -430,37 +268,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
partClassNames.toTypedArray<String>(), extraInt = flags
|
partClassNames.toTypedArray<String>(), extraInt = flags
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A writer that generates the metadata of a multi-file class facade.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the multi-file class facade that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param partClassNames JVM internal names of the part classes which this multi-file class combines
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassFacade(partClassNames, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
@JvmOverloads
|
|
||||||
public fun write(
|
|
||||||
partClassNames: List<String>,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0
|
|
||||||
): MultiFileClassFacade {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinClassMetadata.writeMultiFileClassFacade.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -516,57 +323,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new [KmPackage] instance from this multi-file class part metadata.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmPackage property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmPackage"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun toKmPackage(): KmPackage = KmPackage().also { newKmp -> kmPackage.accept(newKmp) }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Makes the given visitor visit metadata of this multi-file class part.
|
|
||||||
*
|
|
||||||
* @param v the visitor that must visit this multi-file class part
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmPackageVisitor) {
|
|
||||||
kmPackage.accept(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A [KmPackageVisitor] that generates the metadata of a multi-file class part.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer : PackageWriter(JvmStringTable()) {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the multi-file class part that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param facadeClassName JVM internal name of the corresponding multi-file class facade
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"$WRITER_API_MESSAGE, such as KotlinClassMetadata.writeMultiFileClassPart(kmPackage, facadeClassName, metadataVersion, extraInt)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
@JvmOverloads
|
|
||||||
public fun write(
|
|
||||||
facadeClassName: String,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0
|
|
||||||
): MultiFileClassPart {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinClassMetadata.writeMultifileClassPart.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -597,13 +353,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
flags
|
flags
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@PublishedApi
|
|
||||||
@Deprecated("This declaration is intended for binary compatibility only", level = DeprecationLevel.HIDDEN)
|
|
||||||
internal companion object {
|
|
||||||
@JvmField // For binary compatibility with previous `data object Unknown`
|
|
||||||
public val INSTANCE: Unknown = Unknown(Metadata(kind = 99, metadataVersion = JvmMetadataVersion.LATEST_STABLE_SUPPORTED.toIntArray()), true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -627,152 +376,6 @@ public sealed class KotlinClassMetadata {
|
|||||||
return readStrict(metadata).apply(transformer).write()
|
return readStrict(metadata).apply(transformer).write()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes contents of [kmClass] as the class metadata.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [kmClass] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated("Use a KotlinClassMetadata.Class instance and its write() member function", level = DeprecationLevel.ERROR)
|
|
||||||
public fun writeClass(
|
|
||||||
kmClass: KmClass,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = Class(kmClass, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes [kmPackage] contents as the file facade metadata.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [kmPackage] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated("Use a KotlinClassMetadata.FileFacade instance and its write() member function", level = DeprecationLevel.ERROR)
|
|
||||||
public fun writeFileFacade(
|
|
||||||
kmPackage: KmPackage,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = FileFacade(kmPackage, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes [kmLambda] as the synthetic class metadata.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [kmLambda] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated("Use a KotlinClassMetadata.SyntheticClass instance and its write() member function", level = DeprecationLevel.ERROR)
|
|
||||||
public fun writeLambda(
|
|
||||||
kmLambda: KmLambda,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = SyntheticClass(kmLambda, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes synthetic class metadata.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated("Use a KotlinClassMetadata.SyntheticClass instance and its write() member function", level = DeprecationLevel.ERROR)
|
|
||||||
public fun writeSyntheticClass(
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = SyntheticClass(null, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes metadata of the multi-file class facade.
|
|
||||||
*
|
|
||||||
* @param partClassNames JVM internal names of the part classes which this multi-file class combines
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated(
|
|
||||||
"Use a KotlinClassMetadata.MultiFileClassFacade instance and its write() member function",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun writeMultiFileClassFacade(
|
|
||||||
partClassNames: List<String>, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = MultiFileClassFacade(partClassNames, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the metadata of the multi-file class part.
|
|
||||||
*
|
|
||||||
* @param facadeClassName JVM internal name of the corresponding multi-file class facade
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default. Cannot be less (lexicographically) than `[1, 4]`
|
|
||||||
* @param extraInt the value of the class-level flags to be written to the metadata (see [Metadata.extraInt]),
|
|
||||||
* 0 by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [kmPackage] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
@Deprecated(
|
|
||||||
"Use a KotlinClassMetadata.MultiFileClassPart instance and its write() member function",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun writeMultiFileClassPart(
|
|
||||||
kmPackage: KmPackage,
|
|
||||||
facadeClassName: String,
|
|
||||||
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
|
|
||||||
extraInt: Int = 0,
|
|
||||||
): Metadata = MultiFileClassPart(kmPackage, facadeClassName, JvmMetadataVersion(metadataVersion), extraInt).write()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads and parses the given annotation data of a Kotlin JVM class file and returns the correct type of [KotlinClassMetadata] encoded by
|
|
||||||
* this annotation, if metadata version is supported.
|
|
||||||
*
|
|
||||||
* [annotationData] may be obtained reflectively, constructed manually or with helper [kotlinx.metadata.jvm.Metadata] function,
|
|
||||||
* or equivalent [KotlinClassHeader] can be used.
|
|
||||||
*
|
|
||||||
* Metadata version is supported if it is greater or equal than 1.1, and less or equal than [COMPATIBLE_METADATA_VERSION] + 1 minor version.
|
|
||||||
* Note that metadata version is 1.1 for Kotlin < 1.4, and is equal to the language version starting from Kotlin 1.4.
|
|
||||||
* For example, if the latest Kotlin version is 1.7.0, the latest kotlinx-metadata-jvm can read binaries produced by Kotlin
|
|
||||||
* compilers from 1.0 to 1.8.* inclusively.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if the metadata version is unsupported
|
|
||||||
*
|
|
||||||
* @see COMPATIBLE_METADATA_VERSION
|
|
||||||
*/
|
|
||||||
@JvmStatic
|
|
||||||
@Deprecated(
|
|
||||||
"read() throws an error if metadata version is too high. Use either readStrict() if you want to retain this behavior, or readLenient() if you want to try to read newer metadata.",
|
|
||||||
ReplaceWith("KotlinClassMetadata.readStrict(annotationData)"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun read(annotationData: Metadata): KotlinClassMetadata = readMetadataImpl(annotationData, lenient = false)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads and parses the given annotation data of a Kotlin JVM class file and returns the correct type of [KotlinClassMetadata] encoded by
|
* Reads and parses the given annotation data of a Kotlin JVM class file and returns the correct type of [KotlinClassMetadata] encoded by
|
||||||
* this annotation, if the metadata version is supported.
|
* this annotation, if the metadata version is supported.
|
||||||
@@ -867,28 +470,5 @@ public sealed class KotlinClassMetadata {
|
|||||||
* @see JvmMultifileClass
|
* @see JvmMultifileClass
|
||||||
*/
|
*/
|
||||||
public const val MULTI_FILE_CLASS_PART_KIND: Int = 5
|
public const val MULTI_FILE_CLASS_PART_KIND: Int = 5
|
||||||
|
|
||||||
/**
|
|
||||||
* The latest stable metadata version supported by this version of the library.
|
|
||||||
* The library can read in strict mode Kotlin metadata produced by Kotlin compilers from 1.0 up to and including this version + 1 minor.
|
|
||||||
*
|
|
||||||
* In other words, a metadata version is supported if it is greater or equal than 1.1, and less or equal than [COMPATIBLE_METADATA_VERSION] + 1 minor version.
|
|
||||||
* Note that a metadata version is 1.1 for Kotlin < 1.4, and is equal to the language version starting from Kotlin 1.4.
|
|
||||||
*
|
|
||||||
* For example, if the latest supported stable Kotlin version is 1.7.0, kotlinx-metadata-jvm can read binaries produced by Kotlin compilers from 1.0
|
|
||||||
* to 1.8.* inclusively. In this case, this property will have the value `[1, 7, 0]`.
|
|
||||||
*
|
|
||||||
* @see Metadata.metadataVersion
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("Use JvmMetadataVersion.LATEST_STABLE_SUPPORTED instead", ReplaceWith("JvmMetadataVersion.LATEST_STABLE_SUPPORTED"), DeprecationLevel.ERROR)
|
|
||||||
public val COMPATIBLE_METADATA_VERSION: IntArray = CompilerMetadataVersion.INSTANCE.toArray().copyOf()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal const val VISITOR_API_MESSAGE =
|
|
||||||
"Visitor API is deprecated as excessive and cumbersome. Please use nodes (such as KmClass) and their properties."
|
|
||||||
|
|
||||||
internal const val WRITER_API_MESSAGE =
|
|
||||||
"Visitor Writer API is deprecated as excessive and cumbersome. Please use member functions of KotlinClassMetadata.Companion"
|
|
||||||
|
|||||||
@@ -3,20 +3,12 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress(
|
|
||||||
"DEPRECATION", // COMPATIBLE_METADATA_VERSION
|
|
||||||
"DEPRECATION_ERROR", // KmModule.annotations
|
|
||||||
"UNUSED_PARAMETER" // For deprecated Writer.write
|
|
||||||
)
|
|
||||||
|
|
||||||
package kotlin.metadata.jvm
|
package kotlin.metadata.jvm
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.jvm.KotlinClassMetadata.Companion.COMPATIBLE_METADATA_VERSION
|
|
||||||
import kotlin.metadata.jvm.internal.JvmReadUtils.readModuleMetadataImpl
|
import kotlin.metadata.jvm.internal.JvmReadUtils.readModuleMetadataImpl
|
||||||
import kotlin.metadata.jvm.internal.JvmReadUtils.throwIfNotCompatible
|
import kotlin.metadata.jvm.internal.JvmReadUtils.throwIfNotCompatible
|
||||||
import kotlin.metadata.jvm.internal.wrapIntoMetadataExceptionWhenNeeded
|
import kotlin.metadata.jvm.internal.wrapIntoMetadataExceptionWhenNeeded
|
||||||
import kotlin.metadata.jvm.internal.wrapWriteIntoIAE
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf
|
import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
|
||||||
@@ -46,16 +38,6 @@ public class KotlinModuleMetadata public constructor(
|
|||||||
*/
|
*/
|
||||||
public var version: JvmMetadataVersion,
|
public var version: JvmMetadataVersion,
|
||||||
) {
|
) {
|
||||||
/**
|
|
||||||
* Visits metadata of this module with a new [KmModule] instance and returns that instance.
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmModule property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmModule"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun toKmModule(): KmModule = KmModule().apply { kmModule.accept(this) }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encodes and writes this metadata of the Kotlin module file.
|
* Encodes and writes this metadata of the Kotlin module file.
|
||||||
*
|
*
|
||||||
@@ -99,38 +81,6 @@ public class KotlinModuleMetadata public constructor(
|
|||||||
return b.build().serializeToByteArray(CompilerMetadataVersion(version.toIntArray(), false), 0)
|
return b.build().serializeToByteArray(CompilerMetadataVersion(version.toIntArray(), false), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public class Writer {
|
|
||||||
/**
|
|
||||||
* Returns the metadata of the module file that was written with this writer.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun write(metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): ByteArray {
|
|
||||||
error("This method is no longer implemented. Migrate to KotlinModuleMetadata.write.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Makes the given visitor visit the metadata of this module file.
|
|
||||||
*
|
|
||||||
* @param v the visitor that must visit this module file
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmModuleVisitor): Unit = kmModule.accept(v)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collection of methods for reading and writing [KotlinModuleMetadata].
|
* Collection of methods for reading and writing [KotlinModuleMetadata].
|
||||||
*/
|
*/
|
||||||
@@ -158,95 +108,19 @@ public class KotlinModuleMetadata public constructor(
|
|||||||
KotlinModuleMetadata(module, JvmMetadataVersion(result.version.toArray()))
|
KotlinModuleMetadata(module, JvmMetadataVersion(result.version.toArray()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the metadata of the Kotlin module file.
|
|
||||||
*
|
|
||||||
* @param metadataVersion metadata version to be written to the metadata (see [Metadata.metadataVersion]),
|
|
||||||
* [KotlinClassMetadata.COMPATIBLE_METADATA_VERSION] by default
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if [kmModule] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
|
|
||||||
*/
|
|
||||||
@UnstableMetadataApi
|
|
||||||
@Deprecated("Use a KotlinModuleMetadata instance and its write() member function", level = DeprecationLevel.ERROR)
|
|
||||||
@JvmStatic
|
|
||||||
@JvmOverloads
|
|
||||||
public fun write(kmModule: KmModule, metadataVersion: JvmMetadataVersion = JvmMetadataVersion.LATEST_STABLE_SUPPORTED): ByteArray = wrapWriteIntoIAE {
|
|
||||||
return KotlinModuleMetadata(kmModule, metadataVersion).write()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit Kotlin JVM module files.
|
|
||||||
*
|
|
||||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@UnstableMetadataApi
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
* Packages are separated by '/' in the names of file facades.
|
|
||||||
*
|
|
||||||
* @param fqName the fully qualified name of the package, separated by '.'
|
|
||||||
* @param fileFacades the list of single-file facades in this package
|
|
||||||
* @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
|
|
||||||
*/
|
|
||||||
public open fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
|
|
||||||
delegate?.visitPackageParts(fqName, fileFacades, multiFileClassParts)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the annotation on the module.
|
|
||||||
*
|
|
||||||
* @param annotation annotation on the module
|
|
||||||
*/
|
|
||||||
public open fun visitAnnotation(annotation: KmAnnotation) {
|
|
||||||
delegate?.visitAnnotation(annotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits an `@OptionalExpectation`-annotated annotation class declared in this module.
|
|
||||||
* Such classes are not materialized to bytecode on JVM, but the Kotlin compiler stores their metadata in the module file on JVM,
|
|
||||||
* and loads it during compilation of dependent modules, in order to avoid reporting "unresolved reference" errors on usages.
|
|
||||||
*
|
|
||||||
* Multiplatform projects are an experimental feature of Kotlin, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*/
|
|
||||||
public open fun visitOptionalAnnotationClass(): KmClassVisitor? =
|
|
||||||
delegate?.visitOptionalAnnotationClass()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of the module.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: JvmPackageName
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Kotlin JVM module file (`.kotlin_module` extension).
|
* Represents a Kotlin JVM module file (`.kotlin_module` extension).
|
||||||
*/
|
*/
|
||||||
@UnstableMetadataApi
|
@UnstableMetadataApi
|
||||||
public class KmModule : KmModuleVisitor() {
|
public class KmModule {
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
*/
|
*/
|
||||||
public val packageParts: MutableMap<String, KmPackageParts> = LinkedHashMap()
|
public val packageParts: MutableMap<String, KmPackageParts> = LinkedHashMap()
|
||||||
|
|
||||||
/**
|
|
||||||
* Annotations on the module.
|
|
||||||
*
|
|
||||||
* Currently, Kotlin does not provide functionality to specify annotations on modules.
|
|
||||||
*/
|
|
||||||
@Deprecated("This list is always empty and will be removed", level = DeprecationLevel.ERROR)
|
|
||||||
public val annotations: MutableList<KmAnnotation> = ArrayList(0)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `@OptionalExpectation`-annotated annotation classes declared in this module.
|
* `@OptionalExpectation`-annotated annotation classes declared in this module.
|
||||||
* Such classes are not materialized to bytecode on JVM, but the Kotlin compiler stores their metadata in the module file on JVM,
|
* Such classes are not materialized to bytecode on JVM, but the Kotlin compiler stores their metadata in the module file on JVM,
|
||||||
@@ -256,34 +130,6 @@ public class KmModule : KmModuleVisitor() {
|
|||||||
* may change in a subsequent release.
|
* may change in a subsequent release.
|
||||||
*/
|
*/
|
||||||
public val optionalAnnotationClasses: MutableList<KmClass> = ArrayList(0)
|
public val optionalAnnotationClasses: MutableList<KmClass> = ArrayList(0)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitPackageParts(fqName: String, fileFacades: List<String>, multiFileClassParts: Map<String, String>) {
|
|
||||||
packageParts[fqName] = KmPackageParts(fileFacades.toMutableList(), multiFileClassParts.toMutableMap())
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
|
||||||
annotations.add(annotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitOptionalAnnotationClass(): KmClass =
|
|
||||||
KmClass().also(optionalAnnotationClasses::add)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this module.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this module.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmModuleVisitor) {
|
|
||||||
for ((fqName, parts) in packageParts) {
|
|
||||||
visitor.visitPackageParts(fqName, parts.fileFacades, parts.multiFileClassParts)
|
|
||||||
}
|
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
|
||||||
optionalAnnotationClasses.forEach { visitor.visitOptionalAnnotationClass()?.let(it::accept) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+54
-115
@@ -2,8 +2,6 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION","DEPRECATION_ERROR") // inheritance of deprecated visitors will be removed with visitors
|
|
||||||
|
|
||||||
package kotlin.metadata.jvm.internal
|
package kotlin.metadata.jvm.internal
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
@@ -11,104 +9,68 @@ import kotlin.metadata.internal.extensions.*
|
|||||||
import kotlin.metadata.jvm.*
|
import kotlin.metadata.jvm.*
|
||||||
|
|
||||||
internal val KmClass.jvm: JvmClassExtension
|
internal val KmClass.jvm: JvmClassExtension
|
||||||
get() = visitExtensions(JvmClassExtensionVisitor.TYPE) as JvmClassExtension
|
get() = getExtension(JvmClassExtension.TYPE) as JvmClassExtension
|
||||||
|
|
||||||
internal val KmPackage.jvm: JvmPackageExtension
|
internal val KmPackage.jvm: JvmPackageExtension
|
||||||
get() = visitExtensions(JvmPackageExtensionVisitor.TYPE) as JvmPackageExtension
|
get() = getExtension(JvmPackageExtension.TYPE) as JvmPackageExtension
|
||||||
|
|
||||||
internal val KmFunction.jvm: JvmFunctionExtension
|
internal val KmFunction.jvm: JvmFunctionExtension
|
||||||
get() = visitExtensions(JvmFunctionExtensionVisitor.TYPE) as JvmFunctionExtension
|
get() = getExtension(JvmFunctionExtension.TYPE) as JvmFunctionExtension
|
||||||
|
|
||||||
internal val KmProperty.jvm: JvmPropertyExtension
|
internal val KmProperty.jvm: JvmPropertyExtension
|
||||||
get() = visitExtensions(JvmPropertyExtensionVisitor.TYPE) as JvmPropertyExtension
|
get() = getExtension(JvmPropertyExtension.TYPE) as JvmPropertyExtension
|
||||||
|
|
||||||
internal val KmConstructor.jvm: JvmConstructorExtension
|
internal val KmConstructor.jvm: JvmConstructorExtension
|
||||||
get() = visitExtensions(JvmConstructorExtensionVisitor.TYPE) as JvmConstructorExtension
|
get() = getExtension(JvmConstructorExtension.TYPE) as JvmConstructorExtension
|
||||||
|
|
||||||
internal val KmTypeParameter.jvm: JvmTypeParameterExtension
|
internal val KmTypeParameter.jvm: JvmTypeParameterExtension
|
||||||
get() = visitExtensions(JvmTypeParameterExtensionVisitor.TYPE) as JvmTypeParameterExtension
|
get() = getExtension(JvmTypeParameterExtension.TYPE) as JvmTypeParameterExtension
|
||||||
|
|
||||||
internal val KmType.jvm: JvmTypeExtension
|
internal val KmType.jvm: JvmTypeExtension
|
||||||
get() = visitExtensions(JvmTypeExtensionVisitor.TYPE) as JvmTypeExtension
|
get() = getExtension(JvmTypeExtension.TYPE) as JvmTypeExtension
|
||||||
|
|
||||||
|
|
||||||
internal class JvmClassExtension : JvmClassExtensionVisitor(), KmClassExtension {
|
internal class JvmClassExtension : KmClassExtension {
|
||||||
val localDelegatedProperties: MutableList<KmProperty> = ArrayList(0)
|
val localDelegatedProperties: MutableList<KmProperty> = ArrayList(0)
|
||||||
var moduleName: String? = null
|
var moduleName: String? = null
|
||||||
var anonymousObjectOriginName: String? = null
|
var anonymousObjectOriginName: String? = null
|
||||||
var jvmFlags: Int = 0
|
var jvmFlags: Int = 0
|
||||||
|
|
||||||
override fun visitLocalDelegatedProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor =
|
override val type: KmExtensionType
|
||||||
KmProperty(flags, name, getterFlags, setterFlags).also { localDelegatedProperties.add(it) }
|
get() = TYPE
|
||||||
|
|
||||||
override fun visitModuleName(name: String) {
|
companion object {
|
||||||
this.moduleName = name
|
val TYPE: KmExtensionType = KmExtensionType(JvmClassExtension::class)
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitAnonymousObjectOriginName(internalName: String) {
|
|
||||||
this.anonymousObjectOriginName = internalName
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitJvmFlags(flags: Int) {
|
|
||||||
this.jvmFlags = flags
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun accept(visitor: KmClassExtensionVisitor) {
|
|
||||||
require(visitor is JvmClassExtensionVisitor)
|
|
||||||
localDelegatedProperties.forEach {
|
|
||||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") // getter.flags
|
|
||||||
visitor.visitLocalDelegatedProperty(it.flags, it.name, it.getter.flags, it.setterFlags)?.let(it::accept)
|
|
||||||
}
|
|
||||||
moduleName?.let(visitor::visitModuleName)
|
|
||||||
anonymousObjectOriginName?.let(visitor::visitAnonymousObjectOriginName)
|
|
||||||
jvmFlags.takeIf { it != 0 }?.let(visitor::visitJvmFlags)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmPackageExtension : JvmPackageExtensionVisitor(), KmPackageExtension {
|
internal class JvmPackageExtension : KmPackageExtension {
|
||||||
val localDelegatedProperties: MutableList<KmProperty> = ArrayList(0)
|
val localDelegatedProperties: MutableList<KmProperty> = ArrayList(0)
|
||||||
var moduleName: String? = null
|
var moduleName: String? = null
|
||||||
|
|
||||||
override fun visitLocalDelegatedProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor =
|
override val type: KmExtensionType
|
||||||
KmProperty(flags, name, getterFlags, setterFlags).also { localDelegatedProperties.add(it) }
|
get() = TYPE
|
||||||
|
|
||||||
override fun visitModuleName(name: String) {
|
companion object {
|
||||||
this.moduleName = name
|
@JvmField
|
||||||
}
|
val TYPE: KmExtensionType = KmExtensionType(JvmPackageExtension::class)
|
||||||
|
|
||||||
override fun accept(visitor: KmPackageExtensionVisitor) {
|
|
||||||
require(visitor is JvmPackageExtensionVisitor)
|
|
||||||
localDelegatedProperties.forEach {
|
|
||||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") // getter.flags
|
|
||||||
visitor.visitLocalDelegatedProperty(it.flags, it.name, it.getter.flags, it.setterFlags)?.let(it::accept)
|
|
||||||
}
|
|
||||||
moduleName?.let(visitor::visitModuleName)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmFunctionExtension : JvmFunctionExtensionVisitor(), KmFunctionExtension {
|
internal class JvmFunctionExtension : KmFunctionExtension {
|
||||||
var signature: JvmMethodSignature? = null
|
var signature: JvmMethodSignature? = null
|
||||||
var lambdaClassOriginName: String? = null
|
var lambdaClassOriginName: String? = null
|
||||||
|
|
||||||
override fun visit(signature: JvmMethodSignature?) {
|
override val type: KmExtensionType
|
||||||
this.signature = signature
|
get() = TYPE
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitLambdaClassOriginName(internalName: String) {
|
companion object {
|
||||||
this.lambdaClassOriginName = internalName
|
@JvmField
|
||||||
}
|
val TYPE: KmExtensionType = KmExtensionType(JvmFunctionExtension::class)
|
||||||
|
|
||||||
override fun accept(visitor: KmFunctionExtensionVisitor) {
|
|
||||||
require(visitor is JvmFunctionExtensionVisitor)
|
|
||||||
visitor.visit(signature)
|
|
||||||
lambdaClassOriginName?.let(visitor::visitLambdaClassOriginName)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmPropertyExtension : JvmPropertyExtensionVisitor(), KmPropertyExtension {
|
internal class JvmPropertyExtension : KmPropertyExtension {
|
||||||
var jvmFlags: Int = 0
|
var jvmFlags: Int = 0
|
||||||
var fieldSignature: JvmFieldSignature? = null
|
var fieldSignature: JvmFieldSignature? = null
|
||||||
var getterSignature: JvmMethodSignature? = null
|
var getterSignature: JvmMethodSignature? = null
|
||||||
@@ -116,78 +78,55 @@ internal class JvmPropertyExtension : JvmPropertyExtensionVisitor(), KmPropertyE
|
|||||||
var syntheticMethodForAnnotations: JvmMethodSignature? = null
|
var syntheticMethodForAnnotations: JvmMethodSignature? = null
|
||||||
var syntheticMethodForDelegate: JvmMethodSignature? = null
|
var syntheticMethodForDelegate: JvmMethodSignature? = null
|
||||||
|
|
||||||
override fun visit(
|
override val type: KmExtensionType
|
||||||
jvmFlags: Int,
|
get() = TYPE
|
||||||
fieldSignature: JvmFieldSignature?,
|
|
||||||
getterSignature: JvmMethodSignature?,
|
|
||||||
setterSignature: JvmMethodSignature?
|
|
||||||
) {
|
|
||||||
this.jvmFlags = jvmFlags
|
|
||||||
this.fieldSignature = fieldSignature
|
|
||||||
this.getterSignature = getterSignature
|
|
||||||
this.setterSignature = setterSignature
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitSyntheticMethodForAnnotations(signature: JvmMethodSignature?) {
|
companion object {
|
||||||
this.syntheticMethodForAnnotations = signature
|
@JvmField
|
||||||
}
|
val TYPE: KmExtensionType = KmExtensionType(JvmPropertyExtension::class)
|
||||||
|
|
||||||
override fun visitSyntheticMethodForDelegate(signature: JvmMethodSignature?) {
|
|
||||||
this.syntheticMethodForDelegate = signature
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun accept(visitor: KmPropertyExtensionVisitor) {
|
|
||||||
require(visitor is JvmPropertyExtensionVisitor)
|
|
||||||
visitor.visit(jvmFlags, fieldSignature, getterSignature, setterSignature)
|
|
||||||
visitor.visitSyntheticMethodForAnnotations(syntheticMethodForAnnotations)
|
|
||||||
visitor.visitSyntheticMethodForDelegate(syntheticMethodForDelegate)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmConstructorExtension : JvmConstructorExtensionVisitor(), KmConstructorExtension {
|
internal class JvmConstructorExtension : KmConstructorExtension {
|
||||||
var signature: JvmMethodSignature? = null
|
var signature: JvmMethodSignature? = null
|
||||||
|
|
||||||
override fun visit(signature: JvmMethodSignature?) {
|
override val type: KmExtensionType
|
||||||
this.signature = signature
|
get() = TYPE
|
||||||
}
|
|
||||||
|
|
||||||
override fun accept(visitor: KmConstructorExtensionVisitor) {
|
companion object {
|
||||||
require(visitor is JvmConstructorExtensionVisitor)
|
@JvmField
|
||||||
visitor.visit(signature)
|
val TYPE: KmExtensionType = KmExtensionType(JvmConstructorExtension::class)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmTypeParameterExtension : JvmTypeParameterExtensionVisitor(), KmTypeParameterExtension {
|
internal class JvmTypeParameterExtension : KmTypeParameterExtension {
|
||||||
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
||||||
|
|
||||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
override val type: KmExtensionType
|
||||||
annotations.add(annotation)
|
get() = TYPE
|
||||||
}
|
|
||||||
|
|
||||||
override fun accept(visitor: KmTypeParameterExtensionVisitor) {
|
companion object {
|
||||||
require(visitor is JvmTypeParameterExtensionVisitor)
|
@JvmField
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
val TYPE: KmExtensionType = KmExtensionType(JvmTypeParameterExtension::class)
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JvmTypeExtension : JvmTypeExtensionVisitor(), KmTypeExtension {
|
internal class JvmTypeExtension : KmTypeExtension {
|
||||||
var isRaw: Boolean = false
|
var isRaw: Boolean = false
|
||||||
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
||||||
|
|
||||||
override fun visit(isRaw: Boolean) {
|
override val type: KmExtensionType
|
||||||
this.isRaw = isRaw
|
get() = TYPE
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
companion object {
|
||||||
annotations.add(annotation)
|
@JvmField
|
||||||
}
|
val TYPE: KmExtensionType = KmExtensionType(JvmTypeExtension::class)
|
||||||
|
|
||||||
override fun accept(visitor: KmTypeExtensionVisitor) {
|
/**
|
||||||
require(visitor is JvmTypeExtensionVisitor)
|
* The type flexibility id, signifying that the visited type is a JVM platform type.
|
||||||
visitor.visit(isRaw)
|
*
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
* @see KmTypeVisitor.visitFlexibleTypeUpperBound
|
||||||
visitor.visitEnd()
|
*/
|
||||||
|
const val PLATFORM_TYPE_ID: String = JvmProtoBufUtil.PLATFORM_TYPE_ID // TODO: move out of deprecated visitor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-4
@@ -223,13 +223,9 @@ internal class JvmMetadataExtensions : MetadataExtensions {
|
|||||||
|
|
||||||
override fun createPackageExtension(): KmPackageExtension = JvmPackageExtension()
|
override fun createPackageExtension(): KmPackageExtension = JvmPackageExtension()
|
||||||
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
override fun createModuleFragmentExtensions(): KmModuleFragmentExtension =
|
override fun createModuleFragmentExtensions(): KmModuleFragmentExtension =
|
||||||
object : KmModuleFragmentExtension {
|
object : KmModuleFragmentExtension {
|
||||||
override val type: KmExtensionType = KmExtensionType(KmModuleFragmentExtension::class)
|
override val type: KmExtensionType = KmExtensionType(KmModuleFragmentExtension::class)
|
||||||
|
|
||||||
override fun accept(visitor: KmModuleFragmentExtensionVisitor) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createFunctionExtension(): KmFunctionExtension = JvmFunctionExtension()
|
override fun createFunctionExtension(): KmFunctionExtension = JvmFunctionExtension()
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package kotlin.metadata.jvm.internal
|
package kotlin.metadata.jvm.internal
|
||||||
|
|
||||||
import kotlin.metadata.KmAnnotation
|
|
||||||
import kotlin.metadata.KmClass
|
import kotlin.metadata.KmClass
|
||||||
import kotlin.metadata.KmLambda
|
import kotlin.metadata.KmLambda
|
||||||
import kotlin.metadata.KmPackage
|
import kotlin.metadata.KmPackage
|
||||||
@@ -69,11 +68,6 @@ internal object JvmReadUtils {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (annotation in data.moduleData.annotations) {
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
v.annotations.add(KmAnnotation(annotation, emptyMap()))
|
|
||||||
}
|
|
||||||
|
|
||||||
for (classProto in data.moduleData.optionalAnnotations) {
|
for (classProto in data.moduleData.optionalAnnotations) {
|
||||||
v.optionalAnnotationClasses.add(classProto.toKmClass(data.moduleData.nameResolver, false))
|
v.optionalAnnotationClasses.add(classProto.toKmClass(data.moduleData.nameResolver, false))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kotlin.metadata.test
|
||||||
|
|
||||||
|
import kotlin.metadata.internal.FlagImpl
|
||||||
|
import org.jetbrains.kotlin.metadata.ProtoBuf.Visibility as ProtoVisibility
|
||||||
|
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
|
||||||
|
|
||||||
|
fun Flag(field: F.FlagField<*>, value: Int) = FlagImpl(field.offset, field.bitWidth, value)
|
||||||
|
|
||||||
|
fun Flag(field: F.BooleanFlagField) = Flag(field, 1)
|
||||||
|
|
||||||
|
// Reduced copy of old Flag.kt for testing purposes.
|
||||||
|
class Flag private constructor() {
|
||||||
|
|
||||||
|
companion object Common {
|
||||||
|
/**
|
||||||
|
* A visibility flag, signifying that the corresponding declaration is `internal`.
|
||||||
|
*/
|
||||||
|
val IS_INTERNAL = Flag(F.VISIBILITY, ProtoVisibility.INTERNAL_VALUE)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A visibility flag, signifying that the corresponding declaration is `private`.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val IS_PRIVATE = Flag(F.VISIBILITY, ProtoVisibility.PRIVATE_VALUE)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A visibility flag, signifying that the corresponding declaration is `public`.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val IS_PUBLIC = Flag(F.VISIBILITY, ProtoVisibility.PUBLIC_VALUE)
|
||||||
|
}
|
||||||
|
|
||||||
|
object Class {
|
||||||
|
/**
|
||||||
|
* Signifies that the corresponding class is `data`.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val IS_DATA = Flag(F.IS_DATA)
|
||||||
|
}
|
||||||
|
|
||||||
|
object Constructor {
|
||||||
|
/**
|
||||||
|
* Signifies that the corresponding constructor has non-stable parameter names, i.e. cannot be called with named arguments.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val HAS_NON_STABLE_PARAMETER_NAMES = Flag(F.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES)
|
||||||
|
}
|
||||||
|
|
||||||
|
object Function {
|
||||||
|
/**
|
||||||
|
* Signifies that the corresponding function is `operator`.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val IS_OPERATOR = Flag(F.IS_OPERATOR)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signifies that the corresponding function has non-stable parameter names, i.e. cannot be called with named arguments.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val HAS_NON_STABLE_PARAMETER_NAMES = Flag(F.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES)
|
||||||
|
}
|
||||||
|
|
||||||
|
object Type {
|
||||||
|
/**
|
||||||
|
* Signifies that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation.
|
||||||
|
*/
|
||||||
|
@JvmField
|
||||||
|
val IS_NULLABLE = FlagImpl(0, 1, 1)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,10 +7,11 @@ package kotlin.metadata.test
|
|||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import kotlin.metadata.internal.FlagImpl
|
||||||
|
import kotlin.metadata.internal._flagAccess
|
||||||
import kotlin.reflect.KMutableProperty0
|
import kotlin.reflect.KMutableProperty0
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
class FlagDelegatesTest {
|
class FlagDelegatesTest {
|
||||||
private class Private
|
private class Private
|
||||||
|
|
||||||
@@ -26,29 +27,29 @@ class FlagDelegatesTest {
|
|||||||
assertEquals(Visibility.PRIVATE, p1.visibility)
|
assertEquals(Visibility.PRIVATE, p1.visibility)
|
||||||
assertEquals(Visibility.PUBLIC, p2.visibility)
|
assertEquals(Visibility.PUBLIC, p2.visibility)
|
||||||
|
|
||||||
assertTrue(Flag.IS_PRIVATE(p1.flags))
|
assertTrue(Flag.IS_PRIVATE(_flagAccess(p1)))
|
||||||
assertTrue(Flag.IS_PUBLIC(p2.flags))
|
assertTrue(Flag.IS_PUBLIC(_flagAccess(p2)))
|
||||||
|
|
||||||
p1.visibility = Visibility.PUBLIC
|
p1.visibility = Visibility.PUBLIC
|
||||||
p2.visibility = Visibility.INTERNAL
|
p2.visibility = Visibility.INTERNAL
|
||||||
|
|
||||||
assertFalse(Flag.IS_PRIVATE(p1.flags))
|
assertFalse(Flag.IS_PRIVATE(_flagAccess(p1)))
|
||||||
assertFalse(Flag.IS_PUBLIC(p2.flags))
|
assertFalse(Flag.IS_PUBLIC(_flagAccess(p2)))
|
||||||
|
|
||||||
assertTrue(Flag.IS_PUBLIC(p1.flags))
|
assertTrue(Flag.IS_PUBLIC(_flagAccess(p1)))
|
||||||
assertTrue(Flag.IS_INTERNAL(p2.flags))
|
assertTrue(Flag.IS_INTERNAL(_flagAccess(p2)))
|
||||||
|
|
||||||
val f = assertNotNull(p2.functions.find { it.name == "f" })
|
val f = assertNotNull(p2.functions.find { it.name == "f" })
|
||||||
assertEquals(Visibility.PUBLIC, f.visibility)
|
assertEquals(Visibility.PUBLIC, f.visibility)
|
||||||
f.visibility = Visibility.PRIVATE
|
f.visibility = Visibility.PRIVATE
|
||||||
assertFalse(Flag.IS_PUBLIC(f.flags))
|
assertFalse(Flag.IS_PUBLIC(_flagAccess(f)))
|
||||||
assertTrue(Flag.IS_PRIVATE(f.flags))
|
assertTrue(Flag.IS_PRIVATE(_flagAccess(f)))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testBooleanFlags() {
|
fun testBooleanFlags() {
|
||||||
val klass = Public::class.java.readMetadataAsKmClass()
|
val klass = Public::class.java.readMetadataAsKmClass()
|
||||||
fun doTest(prop: KMutableProperty0<Boolean>, flags: () -> Int, rawFlag: Flag) {
|
fun doTest(prop: KMutableProperty0<Boolean>, flags: () -> Int, rawFlag: FlagImpl) {
|
||||||
assertFalse(prop.get())
|
assertFalse(prop.get())
|
||||||
assertFalse(rawFlag(flags()))
|
assertFalse(rawFlag(flags()))
|
||||||
|
|
||||||
@@ -59,14 +60,14 @@ class FlagDelegatesTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
doTest(klass::isData, klass::flags, Flag.Class.IS_DATA)
|
doTest(klass::isData, { _flagAccess(klass) }, Flag.Class.IS_DATA)
|
||||||
val f = klass.functions.single { it.name == "f" }
|
val f = klass.functions.single { it.name == "f" }
|
||||||
doTest(f::isOperator, f::flags, Flag.Function.IS_OPERATOR)
|
doTest(f::isOperator, { _flagAccess(f) }, Flag.Function.IS_OPERATOR)
|
||||||
val rt = f.returnType
|
val rt = f.returnType
|
||||||
doTest(rt::isNullable, rt::flags, Flag.Type.IS_NULLABLE)
|
doTest(rt::isNullable, { _flagAccess(rt) }, Flag.Type.IS_NULLABLE)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNUSED_PARAMETER")
|
@Suppress("UNUSED_PARAMETER", "unused")
|
||||||
class PropertiesContainer {
|
class PropertiesContainer {
|
||||||
val defaultVal: String = ""
|
val defaultVal: String = ""
|
||||||
|
|
||||||
@@ -121,7 +122,7 @@ class FlagDelegatesTest {
|
|||||||
setterParamCheck: (KmValueParameter?) -> Unit = { assertNull(it, "Should not be a setter parameter for $name") },
|
setterParamCheck: (KmValueParameter?) -> Unit = { assertNull(it, "Should not be a setter parameter for $name") },
|
||||||
) {
|
) {
|
||||||
with(propMap.getValue(name)) {
|
with(propMap.getValue(name)) {
|
||||||
assertEquals(listOf(isVarProp, true, isVarProp), listOf(isVar, hasGetter, hasSetter), "for $name")
|
assertEquals(listOf(isVarProp, isVarProp), listOf(isVar, setter != null), "for $name")
|
||||||
assertEquals(visibility, getter.visibility, "for $name")
|
assertEquals(visibility, getter.visibility, "for $name")
|
||||||
assertEquals(getterNotDefault, getter.isNotDefault, "for $name")
|
assertEquals(getterNotDefault, getter.isNotDefault, "for $name")
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import org.jetbrains.org.objectweb.asm.Opcodes
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.net.URLClassLoader
|
import java.net.URLClassLoader
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
import kotlin.metadata.internal._flagAccess
|
||||||
import kotlin.reflect.full.primaryConstructor
|
import kotlin.reflect.full.primaryConstructor
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
@@ -146,7 +147,6 @@ class MetadataSmokeTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
fun unstableParameterNames() {
|
fun unstableParameterNames() {
|
||||||
@Suppress("unused", "UNUSED_PARAMETER")
|
@Suppress("unused", "UNUSED_PARAMETER")
|
||||||
class Test(a: String, b: Int, c: Boolean) {
|
class Test(a: String, b: Int, c: Boolean) {
|
||||||
@@ -155,8 +155,8 @@ class MetadataSmokeTest {
|
|||||||
|
|
||||||
val classWithStableParameterNames = Test::class.java.readMetadataAsClass()
|
val classWithStableParameterNames = Test::class.java.readMetadataAsClass()
|
||||||
|
|
||||||
classWithStableParameterNames.kmClass.constructors.forEach { assertFalse(Flag.Constructor.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
classWithStableParameterNames.kmClass.constructors.forEach { assertFalse(Flag.Constructor.HAS_NON_STABLE_PARAMETER_NAMES(_flagAccess(it))) }
|
||||||
classWithStableParameterNames.kmClass.functions.forEach { assertFalse(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
classWithStableParameterNames.kmClass.functions.forEach { assertFalse(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES(_flagAccess(it))) }
|
||||||
|
|
||||||
classWithStableParameterNames.kmClass.constructors.forEach { assertFalse(it.hasNonStableParameterNames) }
|
classWithStableParameterNames.kmClass.constructors.forEach { assertFalse(it.hasNonStableParameterNames) }
|
||||||
classWithStableParameterNames.kmClass.functions.forEach { assertFalse(it.hasNonStableParameterNames) }
|
classWithStableParameterNames.kmClass.functions.forEach { assertFalse(it.hasNonStableParameterNames) }
|
||||||
@@ -168,8 +168,8 @@ class MetadataSmokeTest {
|
|||||||
|
|
||||||
val classWithUnstableParameterNames = newMetadata.readAsKmClass()
|
val classWithUnstableParameterNames = newMetadata.readAsKmClass()
|
||||||
|
|
||||||
classWithUnstableParameterNames.constructors.forEach { assertTrue(Flag.Constructor.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
classWithUnstableParameterNames.constructors.forEach { assertTrue(Flag.Constructor.HAS_NON_STABLE_PARAMETER_NAMES(_flagAccess(it))) }
|
||||||
classWithUnstableParameterNames.functions.forEach { assertTrue(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES(it.flags)) }
|
classWithUnstableParameterNames.functions.forEach { assertTrue(Flag.Function.HAS_NON_STABLE_PARAMETER_NAMES(_flagAccess(it))) }
|
||||||
|
|
||||||
classWithUnstableParameterNames.constructors.forEach { assertTrue(it.hasNonStableParameterNames) }
|
classWithUnstableParameterNames.constructors.forEach { assertTrue(it.hasNonStableParameterNames) }
|
||||||
classWithUnstableParameterNames.functions.forEach { assertTrue(it.hasNonStableParameterNames) }
|
classWithUnstableParameterNames.functions.forEach { assertTrue(it.hasNonStableParameterNames) }
|
||||||
|
|||||||
+20
-23
@@ -2,45 +2,42 @@
|
|||||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // Extension visitors
|
|
||||||
|
|
||||||
package kotlinx.metadata.klib.impl
|
package kotlinx.metadata.klib.impl
|
||||||
|
|
||||||
import kotlinx.metadata.klib.*
|
import kotlinx.metadata.klib.*
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.internal.common.KmModuleFragment
|
import kotlin.metadata.internal.common.KmModuleFragment
|
||||||
import kotlin.metadata.internal.common.KmModuleFragmentExtensionVisitor
|
|
||||||
import kotlin.metadata.internal.extensions.*
|
import kotlin.metadata.internal.extensions.*
|
||||||
|
|
||||||
internal val KmFunction.klibExtensions: KlibFunctionExtension
|
internal val KmFunction.klibExtensions: KlibFunctionExtension
|
||||||
get() = visitExtensions(KlibFunctionExtensionVisitor.TYPE) as KlibFunctionExtension
|
get() = getExtension(KlibFunctionExtensionVisitor.TYPE) as KlibFunctionExtension
|
||||||
|
|
||||||
internal val KmClass.klibExtensions: KlibClassExtension
|
internal val KmClass.klibExtensions: KlibClassExtension
|
||||||
get() = visitExtensions(KlibClassExtensionVisitor.TYPE) as KlibClassExtension
|
get() = getExtension(KlibClassExtensionVisitor.TYPE) as KlibClassExtension
|
||||||
|
|
||||||
internal val KmType.klibExtensions: KlibTypeExtension
|
internal val KmType.klibExtensions: KlibTypeExtension
|
||||||
get() = visitExtensions(KlibTypeExtensionVisitor.TYPE) as KlibTypeExtension
|
get() = getExtension(KlibTypeExtensionVisitor.TYPE) as KlibTypeExtension
|
||||||
|
|
||||||
internal val KmProperty.klibExtensions: KlibPropertyExtension
|
internal val KmProperty.klibExtensions: KlibPropertyExtension
|
||||||
get() = visitExtensions(KlibPropertyExtensionVisitor.TYPE) as KlibPropertyExtension
|
get() = getExtension(KlibPropertyExtensionVisitor.TYPE) as KlibPropertyExtension
|
||||||
|
|
||||||
internal val KmConstructor.klibExtensions: KlibConstructorExtension
|
internal val KmConstructor.klibExtensions: KlibConstructorExtension
|
||||||
get() = visitExtensions(KlibConstructorExtensionVisitor.TYPE) as KlibConstructorExtension
|
get() = getExtension(KlibConstructorExtensionVisitor.TYPE) as KlibConstructorExtension
|
||||||
|
|
||||||
internal val KmTypeParameter.klibExtensions: KlibTypeParameterExtension
|
internal val KmTypeParameter.klibExtensions: KlibTypeParameterExtension
|
||||||
get() = visitExtensions(KlibTypeParameterExtensionVisitor.TYPE) as KlibTypeParameterExtension
|
get() = getExtension(KlibTypeParameterExtensionVisitor.TYPE) as KlibTypeParameterExtension
|
||||||
|
|
||||||
internal val KmPackage.klibExtensions: KlibPackageExtension
|
internal val KmPackage.klibExtensions: KlibPackageExtension
|
||||||
get() = visitExtensions(KlibPackageExtensionVisitor.TYPE) as KlibPackageExtension
|
get() = getExtension(KlibPackageExtensionVisitor.TYPE) as KlibPackageExtension
|
||||||
|
|
||||||
internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
|
internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
|
||||||
get() = visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as KlibModuleFragmentExtension
|
get() = getExtension(KlibModuleFragmentExtensionVisitor.TYPE) as KlibModuleFragmentExtension
|
||||||
|
|
||||||
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
|
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
|
||||||
get() = visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as KlibTypeAliasExtension
|
get() = getExtension(KlibTypeAliasExtensionVisitor.TYPE) as KlibTypeAliasExtension
|
||||||
|
|
||||||
internal val KmValueParameter.klibExtensions: KlibValueParameterExtension
|
internal val KmValueParameter.klibExtensions: KlibValueParameterExtension
|
||||||
get() = visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as KlibValueParameterExtension
|
get() = getExtension(KlibValueParameterExtensionVisitor.TYPE) as KlibValueParameterExtension
|
||||||
|
|
||||||
internal class KlibFunctionExtension : KlibFunctionExtensionVisitor(), KmFunctionExtension {
|
internal class KlibFunctionExtension : KlibFunctionExtensionVisitor(), KmFunctionExtension {
|
||||||
|
|
||||||
@@ -60,7 +57,7 @@ internal class KlibFunctionExtension : KlibFunctionExtensionVisitor(), KmFunctio
|
|||||||
this.file = file
|
this.file = file
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmFunctionExtensionVisitor) {
|
fun accept(visitor: KmFunctionExtension) {
|
||||||
require(visitor is KlibFunctionExtensionVisitor)
|
require(visitor is KlibFunctionExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
uniqId?.let(visitor::visitUniqId)
|
uniqId?.let(visitor::visitUniqId)
|
||||||
@@ -91,7 +88,7 @@ internal class KlibClassExtension : KlibClassExtensionVisitor(), KmClassExtensio
|
|||||||
enumEntries += entry
|
enumEntries += entry
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmClassExtensionVisitor) {
|
fun accept(visitor: KmClassExtension) {
|
||||||
require(visitor is KlibClassExtensionVisitor)
|
require(visitor is KlibClassExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
enumEntries.forEach(visitor::visitEnumEntry)
|
enumEntries.forEach(visitor::visitEnumEntry)
|
||||||
@@ -108,7 +105,7 @@ internal class KlibTypeExtension : KlibTypeExtensionVisitor(), KmTypeExtension {
|
|||||||
annotations += annotation
|
annotations += annotation
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmTypeExtensionVisitor) {
|
fun accept(visitor: KmTypeExtension) {
|
||||||
require(visitor is KlibTypeExtensionVisitor)
|
require(visitor is KlibTypeExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
}
|
}
|
||||||
@@ -147,7 +144,7 @@ internal class KlibPropertyExtension : KlibPropertyExtensionVisitor(), KmPropert
|
|||||||
this.compileTimeValue = value
|
this.compileTimeValue = value
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmPropertyExtensionVisitor) {
|
fun accept(visitor: KmPropertyExtension) {
|
||||||
require(visitor is KlibPropertyExtensionVisitor)
|
require(visitor is KlibPropertyExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
getterAnnotations.forEach(visitor::visitGetterAnnotation)
|
getterAnnotations.forEach(visitor::visitGetterAnnotation)
|
||||||
@@ -171,7 +168,7 @@ internal class KlibConstructorExtension : KlibConstructorExtensionVisitor(), KmC
|
|||||||
this.uniqId = uniqId
|
this.uniqId = uniqId
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmConstructorExtensionVisitor) {
|
fun accept(visitor: KmConstructorExtension) {
|
||||||
require(visitor is KlibConstructorExtensionVisitor)
|
require(visitor is KlibConstructorExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
uniqId?.let(visitor::visitUniqId)
|
uniqId?.let(visitor::visitUniqId)
|
||||||
@@ -191,7 +188,7 @@ internal class KlibTypeParameterExtension : KlibTypeParameterExtensionVisitor(),
|
|||||||
this.uniqId = uniqId
|
this.uniqId = uniqId
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmTypeParameterExtensionVisitor) {
|
fun accept(visitor: KmTypeParameterExtension) {
|
||||||
require(visitor is KlibTypeParameterExtensionVisitor)
|
require(visitor is KlibTypeParameterExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
uniqId?.let(visitor::visitUniqId)
|
uniqId?.let(visitor::visitUniqId)
|
||||||
@@ -206,7 +203,7 @@ internal class KlibPackageExtension : KlibPackageExtensionVisitor(), KmPackageEx
|
|||||||
fqName = name
|
fqName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmPackageExtensionVisitor) {
|
fun accept(visitor: KmPackageExtension) {
|
||||||
require(visitor is KlibPackageExtensionVisitor)
|
require(visitor is KlibPackageExtensionVisitor)
|
||||||
fqName?.let(visitor::visitFqName)
|
fqName?.let(visitor::visitFqName)
|
||||||
}
|
}
|
||||||
@@ -230,7 +227,7 @@ internal class KlibModuleFragmentExtension : KlibModuleFragmentExtensionVisitor(
|
|||||||
this.className += className
|
this.className += className
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmModuleFragmentExtensionVisitor) {
|
fun accept(visitor: KmModuleFragmentExtension) {
|
||||||
require(visitor is KlibModuleFragmentExtensionVisitor)
|
require(visitor is KlibModuleFragmentExtensionVisitor)
|
||||||
moduleFragmentFiles.forEach(visitor::visitFile)
|
moduleFragmentFiles.forEach(visitor::visitFile)
|
||||||
fqName?.let(visitor::visitFqName)
|
fqName?.let(visitor::visitFqName)
|
||||||
@@ -245,7 +242,7 @@ internal class KlibTypeAliasExtension : KlibTypeAliasExtensionVisitor(), KmTypeA
|
|||||||
this.uniqId = uniqId
|
this.uniqId = uniqId
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmTypeAliasExtensionVisitor) {
|
fun accept(visitor: KmTypeAliasExtension) {
|
||||||
require(visitor is KlibTypeAliasExtensionVisitor)
|
require(visitor is KlibTypeAliasExtensionVisitor)
|
||||||
uniqId?.let(visitor::visitUniqId)
|
uniqId?.let(visitor::visitUniqId)
|
||||||
}
|
}
|
||||||
@@ -258,7 +255,7 @@ internal class KlibValueParameterExtension : KlibValueParameterExtensionVisitor(
|
|||||||
annotations += annotation
|
annotations += annotation
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun accept(visitor: KmValueParameterExtensionVisitor) {
|
fun accept(visitor: KmValueParameterExtension) {
|
||||||
require(visitor is KlibValueParameterExtensionVisitor)
|
require(visitor is KlibValueParameterExtensionVisitor)
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
annotations.forEach(visitor::visitAnnotation)
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-11
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.serialization.StringTableImpl
|
import org.jetbrains.kotlin.serialization.StringTableImpl
|
||||||
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
internal class KlibMetadataExtensions : MetadataExtensions {
|
internal class KlibMetadataExtensions : MetadataExtensions {
|
||||||
|
|
||||||
private fun ReadContext.getSourceFile(index: Int) =
|
private fun ReadContext.getSourceFile(index: Int) =
|
||||||
@@ -28,7 +27,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
strings.getStringIndex(file.name)
|
strings.getStringIndex(file.name)
|
||||||
|
|
||||||
override fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext) {
|
override fun readClassExtensions(kmClass: KmClass, proto: ProtoBuf.Class, c: ReadContext) {
|
||||||
val extension = kmClass.visitExtensions(KlibClassExtensionVisitor.TYPE) as? KlibClassExtensionVisitor ?: return
|
val extension = kmClass.getExtension(KlibClassExtensionVisitor.TYPE) as? KlibClassExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.classAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.classAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -49,7 +48,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readPackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package, c: ReadContext) {
|
override fun readPackageExtensions(kmPackage: KmPackage, proto: ProtoBuf.Package, c: ReadContext) {
|
||||||
val extension = kmPackage.visitExtensions(KlibPackageExtensionVisitor.TYPE) as? KlibPackageExtensionVisitor ?: return
|
val extension = kmPackage.getExtension(KlibPackageExtensionVisitor.TYPE) as? KlibPackageExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtensionOrNull(KlibMetadataProtoBuf.packageFqName)?.let {
|
proto.getExtensionOrNull(KlibMetadataProtoBuf.packageFqName)?.let {
|
||||||
val fqName = (c.strings as NameResolverImpl).getPackageFqName(it)
|
val fqName = (c.strings as NameResolverImpl).getPackageFqName(it)
|
||||||
@@ -58,7 +57,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readModuleFragmentExtensions(kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment, c: ReadContext) {
|
override fun readModuleFragmentExtensions(kmModuleFragment: KmModuleFragment, proto: ProtoBuf.PackageFragment, c: ReadContext) {
|
||||||
val extension = kmModuleFragment.visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as? KlibModuleFragmentExtensionVisitor ?: return
|
val extension = kmModuleFragment.getExtension(KlibModuleFragmentExtensionVisitor.TYPE) as? KlibModuleFragmentExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.packageFragmentFiles)
|
proto.getExtension(KlibMetadataProtoBuf.packageFragmentFiles)
|
||||||
.map { c.getSourceFile(it) }
|
.map { c.getSourceFile(it) }
|
||||||
@@ -70,7 +69,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext) {
|
override fun readFunctionExtensions(kmFunction: KmFunction, proto: ProtoBuf.Function, c: ReadContext) {
|
||||||
val extension = kmFunction.visitExtensions(KlibFunctionExtensionVisitor.TYPE) as? KlibFunctionExtensionVisitor ?: return
|
val extension = kmFunction.getExtension(KlibFunctionExtensionVisitor.TYPE) as? KlibFunctionExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.functionAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.functionAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -85,7 +84,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext) {
|
override fun readPropertyExtensions(kmProperty: KmProperty, proto: ProtoBuf.Property, c: ReadContext) {
|
||||||
val extension = kmProperty.visitExtensions(KlibPropertyExtensionVisitor.TYPE) as? KlibPropertyExtensionVisitor ?: return
|
val extension = kmProperty.getExtension(KlibPropertyExtensionVisitor.TYPE) as? KlibPropertyExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.propertyAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.propertyAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -106,7 +105,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
override fun readConstructorExtensions(kmConstructor: KmConstructor, proto: ProtoBuf.Constructor, c: ReadContext) {
|
||||||
val extension = kmConstructor.visitExtensions(KlibConstructorExtensionVisitor.TYPE) as? KlibConstructorExtensionVisitor ?: return
|
val extension = kmConstructor.getExtension(KlibConstructorExtensionVisitor.TYPE) as? KlibConstructorExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.constructorAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.constructorAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -117,7 +116,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readTypeParameterExtensions(kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
override fun readTypeParameterExtensions(kmTypeParameter: KmTypeParameter, proto: ProtoBuf.TypeParameter, c: ReadContext) {
|
||||||
val extension = kmTypeParameter.visitExtensions(KlibTypeParameterExtensionVisitor.TYPE) as? KlibTypeParameterExtensionVisitor ?: return
|
val extension = kmTypeParameter.getExtension(KlibTypeParameterExtensionVisitor.TYPE) as? KlibTypeParameterExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.typeParameterAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.typeParameterAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -128,7 +127,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readTypeExtensions(kmType: KmType, proto: ProtoBuf.Type, c: ReadContext) {
|
override fun readTypeExtensions(kmType: KmType, proto: ProtoBuf.Type, c: ReadContext) {
|
||||||
val extension = kmType.visitExtensions(KlibTypeExtensionVisitor.TYPE) as? KlibTypeExtensionVisitor ?: return
|
val extension = kmType.getExtension(KlibTypeExtensionVisitor.TYPE) as? KlibTypeExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.typeAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.typeAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
@@ -136,7 +135,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext) {
|
override fun readTypeAliasExtensions(kmTypeAlias: KmTypeAlias, proto: ProtoBuf.TypeAlias, c: ReadContext) {
|
||||||
val extension = kmTypeAlias.visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as? KlibTypeAliasExtensionVisitor ?: return
|
val extension = kmTypeAlias.getExtension(KlibTypeAliasExtensionVisitor.TYPE) as? KlibTypeAliasExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.typeAliasUniqId).let { descriptorUniqId ->
|
proto.getExtension(KlibMetadataProtoBuf.typeAliasUniqId).let { descriptorUniqId ->
|
||||||
extension.visitUniqId(descriptorUniqId.readUniqId())
|
extension.visitUniqId(descriptorUniqId.readUniqId())
|
||||||
@@ -144,7 +143,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {
|
override fun readValueParameterExtensions(kmValueParameter: KmValueParameter, proto: ProtoBuf.ValueParameter, c: ReadContext) {
|
||||||
val extension = kmValueParameter.visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as? KlibValueParameterExtensionVisitor ?: return
|
val extension = kmValueParameter.getExtension(KlibValueParameterExtensionVisitor.TYPE) as? KlibValueParameterExtensionVisitor ?: return
|
||||||
|
|
||||||
proto.getExtension(KlibMetadataProtoBuf.parameterAnnotation).forEach { annotation ->
|
proto.getExtension(KlibMetadataProtoBuf.parameterAnnotation).forEach { annotation ->
|
||||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||||
|
|||||||
+11
-13
@@ -2,14 +2,12 @@
|
|||||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // Extension visitors
|
|
||||||
|
|
||||||
package kotlinx.metadata.klib
|
package kotlinx.metadata.klib
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.internal.common.KmModuleFragmentExtensionVisitor
|
import kotlin.metadata.internal.extensions.*
|
||||||
|
|
||||||
abstract class KlibFunctionExtensionVisitor : KmFunctionExtensionVisitor {
|
abstract class KlibFunctionExtensionVisitor : KmFunctionExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -25,7 +23,7 @@ abstract class KlibFunctionExtensionVisitor : KmFunctionExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibClassExtensionVisitor : KmClassExtensionVisitor {
|
abstract class KlibClassExtensionVisitor : KmClassExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -43,7 +41,7 @@ abstract class KlibClassExtensionVisitor : KmClassExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibTypeExtensionVisitor : KmTypeExtensionVisitor {
|
abstract class KlibTypeExtensionVisitor : KmTypeExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -55,7 +53,7 @@ abstract class KlibTypeExtensionVisitor : KmTypeExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibPropertyExtensionVisitor : KmPropertyExtensionVisitor {
|
abstract class KlibPropertyExtensionVisitor : KmPropertyExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -77,7 +75,7 @@ abstract class KlibPropertyExtensionVisitor : KmPropertyExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibConstructorExtensionVisitor : KmConstructorExtensionVisitor {
|
abstract class KlibConstructorExtensionVisitor : KmConstructorExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -91,7 +89,7 @@ abstract class KlibConstructorExtensionVisitor : KmConstructorExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibTypeParameterExtensionVisitor : KmTypeParameterExtensionVisitor {
|
abstract class KlibTypeParameterExtensionVisitor : KmTypeParameterExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
@@ -105,7 +103,7 @@ abstract class KlibTypeParameterExtensionVisitor : KmTypeParameterExtensionVisit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibPackageExtensionVisitor : KmPackageExtensionVisitor {
|
abstract class KlibPackageExtensionVisitor : KmPackageExtension {
|
||||||
|
|
||||||
abstract fun visitFqName(name: String)
|
abstract fun visitFqName(name: String)
|
||||||
|
|
||||||
@@ -117,7 +115,7 @@ abstract class KlibPackageExtensionVisitor : KmPackageExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibModuleFragmentExtensionVisitor : KmModuleFragmentExtensionVisitor {
|
abstract class KlibModuleFragmentExtensionVisitor : KmModuleFragmentExtension {
|
||||||
|
|
||||||
abstract fun visitFile(file: KlibSourceFile)
|
abstract fun visitFile(file: KlibSourceFile)
|
||||||
|
|
||||||
@@ -133,7 +131,7 @@ abstract class KlibModuleFragmentExtensionVisitor : KmModuleFragmentExtensionVis
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibTypeAliasExtensionVisitor : KmTypeAliasExtensionVisitor {
|
abstract class KlibTypeAliasExtensionVisitor : KmTypeAliasExtension {
|
||||||
|
|
||||||
abstract fun visitUniqId(uniqId: UniqId)
|
abstract fun visitUniqId(uniqId: UniqId)
|
||||||
|
|
||||||
@@ -145,7 +143,7 @@ abstract class KlibTypeAliasExtensionVisitor : KmTypeAliasExtensionVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KlibValueParameterExtensionVisitor : KmValueParameterExtensionVisitor {
|
abstract class KlibValueParameterExtensionVisitor : KmValueParameterExtension {
|
||||||
|
|
||||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||||
|
|
||||||
|
|||||||
@@ -159,23 +159,7 @@ public sealed class KmAnnotationArgument {
|
|||||||
*
|
*
|
||||||
* @property className FQ name of the referenced class.
|
* @property className FQ name of the referenced class.
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION_ERROR")
|
public data class KClassValue(val className: ClassName) : KmAnnotationArgument() {
|
||||||
public data class KClassValue @Deprecated(
|
|
||||||
"Use single-argument constructor instead or ArrayKClassValue",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
) constructor(
|
|
||||||
val className: ClassName,
|
|
||||||
@Deprecated(
|
|
||||||
"Use ArrayKClassValue instead",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
) val arrayDimensionCount: Int
|
|
||||||
) : KmAnnotationArgument() {
|
|
||||||
public constructor(className: ClassName) : this(className, 0)
|
|
||||||
|
|
||||||
init {
|
|
||||||
require(arrayDimensionCount == 0) { "KClassValue must not have array dimensions. For Array<X>::class, use ArrayKClassValue." }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString(): String = "KClassValue($className)"
|
override fun toString(): String = "KClassValue($className)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
@file:JvmName("Attributes")
|
@file:JvmName("Attributes")
|
||||||
|
|
||||||
package kotlin.metadata
|
package kotlin.metadata
|
||||||
@@ -295,18 +294,6 @@ public var KmProperty.kind: MemberKind by memberKindDelegate(KmProperty::flags)
|
|||||||
*/
|
*/
|
||||||
public var KmProperty.isVar: Boolean by propertyBooleanFlag(FlagImpl(ProtoFlags.IS_VAR))
|
public var KmProperty.isVar: Boolean by propertyBooleanFlag(FlagImpl(ProtoFlags.IS_VAR))
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates that the corresponding property has a getter.
|
|
||||||
*/
|
|
||||||
@Deprecated("Kotlin properties always have getters", ReplaceWith("true"), DeprecationLevel.ERROR)
|
|
||||||
public var KmProperty.hasGetter: Boolean by propertyBooleanFlag(FlagImpl(ProtoFlags.HAS_GETTER))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates that the corresponding property has a setter.
|
|
||||||
*/
|
|
||||||
@Deprecated("Check .setter for nullability instead", ReplaceWith("this.setter != null"), DeprecationLevel.ERROR)
|
|
||||||
public var KmProperty.hasSetter: Boolean by propertyBooleanFlag(FlagImpl(ProtoFlags.HAS_SETTER))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that the corresponding property is `const`.
|
* Indicates that the corresponding property is `const`.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,10 +24,3 @@ public typealias ClassName = String // Not a value class because of Java usages
|
|||||||
* 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).
|
||||||
*/
|
*/
|
||||||
public fun ClassName.isLocalClassName(): Boolean = this.startsWith(".")
|
public fun ClassName.isLocalClassName(): Boolean = this.startsWith(".")
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
"Renamed to isLocalClassName() to avoid confusion with String properties",
|
|
||||||
ReplaceWith("isLocalClassName()"),
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public val ClassName.isLocal: Boolean get() = isLocalClassName()
|
|
||||||
|
|||||||
@@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kotlin.metadata
|
||||||
|
|
||||||
|
import kotlin.contracts.ExperimentalContracts
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a contract of a Kotlin function.
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public class KmContract {
|
||||||
|
/**
|
||||||
|
* Effects of this contract.
|
||||||
|
*/
|
||||||
|
public val effects: MutableList<KmEffect> = ArrayList(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an effect (a part of the contract of a Kotlin function).
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*
|
||||||
|
* @property type type of the effect
|
||||||
|
* @property invocationKind optional number of invocations of the lambda parameter of this function,
|
||||||
|
* specified further in the effect expression
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public class KmEffect(
|
||||||
|
public var type: KmEffectType,
|
||||||
|
public var invocationKind: KmEffectInvocationKind?,
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
public var conclusion: KmEffectExpression? = null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an effect expression, the contents of an effect (a part of the contract of a Kotlin function).
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*
|
||||||
|
* Various effect expression attributes can be read and manipulated via extension properties,
|
||||||
|
* such as [KmEffectExpression.isNegated].
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public class KmEffectExpression {
|
||||||
|
internal var flags: Int = 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
public var parameterIndex: Int? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant value used in the effect expression.
|
||||||
|
*/
|
||||||
|
public var constantValue: KmConstantValue? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type used as the target of an `is`-expression in the effect expression.
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
* and elements of the list.
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
* and elements of the list.
|
||||||
|
*/
|
||||||
|
public val orArguments: MutableList<KmEffectExpression> = ArrayList(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a constant value used in an effect expression.
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*
|
||||||
|
* @property value the constant value. May be `true`, `false` or `null`
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public data class KmConstantValue(val value: Any?)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type of an effect (a part of the contract of a Kotlin function).
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public enum class KmEffectType {
|
||||||
|
/**
|
||||||
|
* Represents `returns(value)` contract effect:
|
||||||
|
* a situation when a function returns normally with the specified return value.
|
||||||
|
* Return value is stored in the [KmEffect.constructorArguments].
|
||||||
|
*/
|
||||||
|
RETURNS_CONSTANT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents `callsInPlace` contract effect:
|
||||||
|
* A situation when the referenced lambda is invoked in place (optionally) specified number of times.
|
||||||
|
*
|
||||||
|
* Referenced lambda is stored in the [KmEffect.constructorArguments].
|
||||||
|
* Number of invocations, if specified, is stored in [KmEffect.invocationKind].
|
||||||
|
*/
|
||||||
|
CALLS,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents `returnsNotNull` contract effect:
|
||||||
|
* a situation when a function returns normally with any value that is not null.
|
||||||
|
*/
|
||||||
|
RETURNS_NOT_NULL,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of invocations of a lambda parameter specified by an effect (a part of the contract of a Kotlin function).
|
||||||
|
*
|
||||||
|
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
||||||
|
* may change in a subsequent release.
|
||||||
|
*/
|
||||||
|
@ExperimentalContracts
|
||||||
|
public enum class KmEffectInvocationKind {
|
||||||
|
/**
|
||||||
|
* A function parameter will be invoked one time or not invoked at all.
|
||||||
|
*/
|
||||||
|
AT_MOST_ONCE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function parameter will be invoked exactly one time.
|
||||||
|
*/
|
||||||
|
EXACTLY_ONCE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function parameter will be invoked one or more times.
|
||||||
|
*/
|
||||||
|
AT_LEAST_ONCE,
|
||||||
|
}
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
@file:Suppress("DEPRECATION_ERROR")
|
|
||||||
|
|
||||||
package kotlin.metadata
|
|
||||||
|
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A type of the extension visitor expected by the code that uses the visitor API.
|
|
||||||
*
|
|
||||||
* Each declaration which can have platform-specific extensions in the metadata has a method `visitExtensions` in its visitor, e.g.:
|
|
||||||
*
|
|
||||||
* open fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor?
|
|
||||||
*
|
|
||||||
* The client code is supposed to return the extension visitor corresponding to the given type, or to return `null` if the type is
|
|
||||||
* of no interest to that code. Each platform-specific extension visitor has a [KmExtensionType] instance declared in the `TYPE` property
|
|
||||||
* its companion object. For example, to load JVM extensions on a function, one could do:
|
|
||||||
* ```
|
|
||||||
* override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? {
|
|
||||||
* if (type != JvmFunctionExtensionVisitor.TYPE) return null
|
|
||||||
*
|
|
||||||
* return object : JvmFunctionExtensionVisitor() {
|
|
||||||
* ...
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
* ```
|
|
||||||
* 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, level = DeprecationLevel.ERROR)
|
|
||||||
public class KmExtensionType(private val klass: KClass<out KmExtensionVisitor>) {
|
|
||||||
override fun equals(other: Any?): Boolean =
|
|
||||||
other is KmExtensionType && klass == other.klass
|
|
||||||
|
|
||||||
override fun hashCode(): Int =
|
|
||||||
klass.hashCode()
|
|
||||||
|
|
||||||
override fun toString(): String =
|
|
||||||
klass.java.name
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A base interface for all extension visitors.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmExtensionVisitor {
|
|
||||||
/**
|
|
||||||
* Type of this extension visitor.
|
|
||||||
*/
|
|
||||||
public val type: KmExtensionType
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a declaration container, such as a class or a package fragment.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmDeclarationContainerExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a class.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmClassExtensionVisitor : KmDeclarationContainerExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a package fragment.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmPackageExtensionVisitor : KmDeclarationContainerExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a function.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmFunctionExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a property.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmPropertyExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a constructor.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmConstructorExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a type parameter.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmTypeParameterExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a type.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmTypeExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a type alias.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmTypeAliasExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a value parameter.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmValueParameterExtensionVisitor : KmExtensionVisitor
|
|
||||||
@@ -1,611 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package kotlin.metadata
|
|
||||||
|
|
||||||
import kotlin.metadata.internal.IgnoreInApiDump
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.*
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Class.Kind as ClassKind
|
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.Flags as F
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Modality as ProtoModality
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.Visibility as ProtoVisibility
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf.MemberKind as ProtoMemberKind
|
|
||||||
|
|
||||||
private const val prefix = "Flag API is deprecated. Please use"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a boolean flag that is either present or not in a Kotlin declaration. A "flag" is a boolean trait that is either present
|
|
||||||
* or not in a declaration. To check whether the flag is present in the bitmask, call [Flag.invoke] on the flag, passing the bitmask
|
|
||||||
* as the argument:
|
|
||||||
*
|
|
||||||
* override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor? {
|
|
||||||
* if (Flag.Function.IS_INLINE(flags)) {
|
|
||||||
* ...
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* To construct a bitmask out of several flags, call [flagsOf] on the needed flags:
|
|
||||||
*
|
|
||||||
* v.visitFunction(flagsOf(Flag.Function.IS_DECLARATION, Flag.Function.IS_INLINE), "foo")
|
|
||||||
*
|
|
||||||
* Flags common to multiple kinds of Kotlin declarations ("common flags") are declared in [Flag.Common].
|
|
||||||
* 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
|
|
||||||
* in the same bitmask. Among common flags, there are the following flag groups:
|
|
||||||
* * visibility flags: [IS_INTERNAL], [IS_PRIVATE], [IS_PROTECTED], [IS_PUBLIC], [IS_PRIVATE_TO_THIS], [IS_LOCAL]
|
|
||||||
* * modality flags: [IS_FINAL], [IS_OPEN], [IS_ABSTRACT], [IS_SEALED]
|
|
||||||
*
|
|
||||||
* Some declaration-specific flags form other flag groups, see the documentation of the corresponding containers for more information.
|
|
||||||
*
|
|
||||||
* @see Flags
|
|
||||||
* @see flagsOf
|
|
||||||
*/
|
|
||||||
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
public class Flag public constructor(internal val offset: Int, internal val bitWidth: Int, internal val value: Int) {
|
|
||||||
|
|
||||||
// Implementation copies FlagImpl to avoid reusing of deprecated declarations.
|
|
||||||
@IgnoreInApiDump
|
|
||||||
internal constructor(field: F.FlagField<*>, value: Int) : this(field.offset, field.bitWidth, value)
|
|
||||||
|
|
||||||
@IgnoreInApiDump
|
|
||||||
internal constructor(field: F.BooleanFlagField) : this(field, 1)
|
|
||||||
|
|
||||||
internal operator fun plus(flags: Int): Int =
|
|
||||||
(flags and (((1 shl bitWidth) - 1) shl offset).inv()) + (value shl offset)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the flag is present in the given bitmask.
|
|
||||||
*/
|
|
||||||
public operator fun invoke(flags: Int): Boolean = (flags ushr offset) and ((1 shl bitWidth) - 1) == value
|
|
||||||
|
|
||||||
/** @suppress deprecated */
|
|
||||||
@Deprecated("$prefix corresponding extensions on Km nodes, such as KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public companion object Common {
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding declaration has at least one annotation.
|
|
||||||
*
|
|
||||||
* This flag is useful for reading Kotlin metadata on JVM efficiently. On JVM, most of the annotations are written not to the Kotlin
|
|
||||||
* metadata, but directly on the corresponding declarations in the class file. This flag can be used as an optimization to avoid
|
|
||||||
* reading annotations from the class file (which can be slow) in case when a declaration has no annotations.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix corresponding extension on a node, e.g. KmClass.hasAnnotations", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_ANNOTATIONS: Flag = Flag(F.HAS_ANNOTATIONS)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is `internal`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INTERNAL: Flag = Flag(F.VISIBILITY, ProtoVisibility.INTERNAL_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is `private`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_PRIVATE: Flag = Flag(F.VISIBILITY, ProtoVisibility.PRIVATE_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is `protected`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_PROTECTED: Flag = Flag(F.VISIBILITY, ProtoVisibility.PROTECTED_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is `public`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_PUBLIC: Flag = Flag(F.VISIBILITY, ProtoVisibility.PUBLIC_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is "private-to-this", which is a non-denotable visibility of
|
|
||||||
* private members in Kotlin which are callable only on the same instance of the declaring class.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_PRIVATE_TO_THIS: Flag = Flag(F.VISIBILITY, ProtoVisibility.PRIVATE_TO_THIS_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visibility flag, signifying that the corresponding declaration is local, i.e. declared inside a code block
|
|
||||||
* and not visible from the outside.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix visibility extension on a node, e.g. KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_LOCAL: Flag = Flag(F.VISIBILITY, ProtoVisibility.LOCAL_VALUE)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A modality flag, signifying that the corresponding declaration is `final`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_FINAL: Flag = Flag(F.MODALITY, ProtoModality.FINAL_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A modality flag, signifying that the corresponding declaration is `open`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_OPEN: Flag = Flag(F.MODALITY, ProtoModality.OPEN_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A modality flag, signifying that the corresponding declaration is `abstract`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality or KmFunction.modality", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_ABSTRACT: Flag = Flag(F.MODALITY, ProtoModality.ABSTRACT_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A modality flag, signifying that the corresponding declaration is `sealed`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix modality extension on a node, e.g. KmClass.modality", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SEALED: Flag = Flag(F.MODALITY, ProtoModality.SEALED_VALUE)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin classes, including interfaces, objects, enum classes and annotation classes.
|
|
||||||
*
|
|
||||||
* In addition to the common flag groups, the following flag groups exist for class flags:
|
|
||||||
* * class kind flags: [IS_CLASS], [IS_INTERFACE], [IS_ENUM_CLASS], [IS_ENUM_ENTRY], [IS_ANNOTATION_CLASS], [IS_OBJECT],
|
|
||||||
* [IS_COMPANION_OBJECT]
|
|
||||||
*/
|
|
||||||
@Deprecated("$prefix corresponding extension on a KmClass", level = DeprecationLevel.ERROR)
|
|
||||||
public object Class {
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is a usual `class`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_CLASS: Flag = Flag(F.CLASS_KIND, ClassKind.CLASS_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is an `interface`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INTERFACE: Flag = Flag(F.CLASS_KIND, ClassKind.INTERFACE_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is an `enum class`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_ENUM_CLASS: Flag = Flag(F.CLASS_KIND, ClassKind.ENUM_CLASS_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is an enum entry.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_ENUM_ENTRY: Flag = Flag(F.CLASS_KIND, ClassKind.ENUM_ENTRY_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is an `annotation class`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_ANNOTATION_CLASS: Flag = Flag(F.CLASS_KIND, ClassKind.ANNOTATION_CLASS_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is a non-companion `object`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_OBJECT: Flag = Flag(F.CLASS_KIND, ClassKind.OBJECT_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class kind flag, signifying that the corresponding class is a `companion object`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_COMPANION_OBJECT: Flag = Flag(F.CLASS_KIND, ClassKind.COMPANION_OBJECT_VALUE)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is `inner`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isInner", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INNER: Flag = Flag(F.IS_INNER)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is `data`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isData", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DATA: Flag = Flag(F.IS_DATA)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is `external`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isExternal", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXTERNAL: Flag = Flag(F.IS_EXTERNAL_CLASS)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is `expect`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isExpect", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXPECT: Flag = Flag(F.IS_EXPECT_CLASS)
|
|
||||||
|
|
||||||
@JvmField
|
|
||||||
@Deprecated(
|
|
||||||
"Use IS_VALUE instead, which returns true if the class is either a pre-1.5 inline class, or a 1.5+ value class.",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
@Suppress("unused")
|
|
||||||
public val IS_INLINE: Flag = Flag(F.IS_VALUE_CLASS)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is either a pre-Kotlin-1.5 `inline` class, or a 1.5+ `value` class.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isValue", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_VALUE: Flag = Flag(F.IS_VALUE_CLASS)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding class is a functional interface, i.e. marked with the keyword `fun`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.isFun", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_FUN: Flag = Flag(F.IS_FUN_INTERFACE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding enum class has ".entries" property in bytecode.
|
|
||||||
* Always `false` for not enum classes.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmClass.hasEnumEntries", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_ENUM_ENTRIES: Flag = Flag(F.HAS_ENUM_ENTRIES)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin constructors.
|
|
||||||
*/
|
|
||||||
public object Constructor {
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("Use IS_SECONDARY which holds inverted value instead.", level = DeprecationLevel.ERROR)
|
|
||||||
@Suppress("unused")
|
|
||||||
public val IS_PRIMARY: Flag = Flag(F.IS_SECONDARY, 0)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding constructor is secondary, i.e. declared not in the class header, but in the class body.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmConstructor.isSecondary", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SECONDARY: Flag = Flag(F.IS_SECONDARY)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding constructor has non-stable parameter names, i.e. cannot be called with named arguments.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmConstructor.hasNonStableParameterNames", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_NON_STABLE_PARAMETER_NAMES: Flag = Flag(F.IS_CONSTRUCTOR_WITH_NON_STABLE_PARAMETER_NAMES)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin functions.
|
|
||||||
*
|
|
||||||
* 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]
|
|
||||||
*/
|
|
||||||
public object Function {
|
|
||||||
/**
|
|
||||||
* A member kind flag, signifying that the corresponding function is explicitly declared in the containing class.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DECLARATION: Flag = Flag(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
|
|
||||||
* signature exists in a supertype. This flag is not written by the Kotlin compiler and its effects are unspecified.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_FAKE_OVERRIDE: Flag = Flag(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
|
|
||||||
* by interface delegation (delegation "by").
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DELEGATION: Flag = Flag(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
|
|
||||||
* by the compiler and has no declaration in the source code.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SYNTHESIZED: Flag = Flag(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `operator`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isOperator", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_OPERATOR: Flag = Flag(F.IS_OPERATOR)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `infix`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isInfix", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INFIX: Flag = Flag(F.IS_INFIX)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `inline`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isInline", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INLINE: Flag = Flag(F.IS_INLINE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `tailrec`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isTailrec", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_TAILREC: Flag = Flag(F.IS_TAILREC)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `external`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isExternalFunction", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXTERNAL: Flag = Flag(F.IS_EXTERNAL_FUNCTION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `suspend`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isSuspend", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SUSPEND: Flag = Flag(F.IS_SUSPEND)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function is `expect`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isExpectFunction", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXPECT: Flag = Flag(F.IS_EXPECT_FUNCTION)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding function has non-stable parameter names, i.e. cannot be called with named arguments.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmFunction.isFunctionWithNonStableParameterNames", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_NON_STABLE_PARAMETER_NAMES: Flag = Flag(F.IS_FUNCTION_WITH_NON_STABLE_PARAMETER_NAMES)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin properties.
|
|
||||||
*
|
|
||||||
* 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]
|
|
||||||
*/
|
|
||||||
public object Property {
|
|
||||||
/**
|
|
||||||
* A member kind flag, signifying that the corresponding property is explicitly declared in the containing class.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DECLARATION: Flag = Flag(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
|
|
||||||
* signature exists in a supertype. This flag is not written by the Kotlin compiler and its effects are unspecified.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_FAKE_OVERRIDE: Flag = Flag(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
|
|
||||||
* by interface delegation (delegation "by").
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DELEGATION: Flag = Flag(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
|
|
||||||
* by the compiler and has no declaration in the source code.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.kind", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SYNTHESIZED: Flag = Flag(F.MEMBER_KIND, ProtoMemberKind.SYNTHESIZED_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is `var`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isVar", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_VAR: Flag = Flag(F.IS_VAR)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property has a getter.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.hasGetter", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_GETTER: Flag = Flag(F.HAS_GETTER)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property has a setter.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.hasSetter", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_SETTER: Flag = Flag(F.HAS_SETTER)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is `const`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isConst", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_CONST: Flag = Flag(F.IS_CONST)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is `lateinit`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isLateinit", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_LATEINIT: Flag = Flag(F.IS_LATEINIT)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property has a constant value. On JVM, this flag allows an optimization similarly to
|
|
||||||
* [F.HAS_ANNOTATIONS]: constant values of properties are written to the bytecode directly, and this flag can be used to avoid
|
|
||||||
* reading the value from the bytecode in case there isn't one.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.hasConstant", level = DeprecationLevel.ERROR)
|
|
||||||
public val HAS_CONSTANT: Flag = Flag(F.HAS_CONSTANT)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is `external`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isExternal", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXTERNAL: Flag = Flag(F.IS_EXTERNAL_PROPERTY)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is a delegated property.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isDelegated", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DELEGATED: Flag = Flag(F.IS_DELEGATED)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property is `expect`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmProperty.isExpect", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXPECT: Flag = Flag(F.IS_EXPECT_PROPERTY)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin property getters and setters.
|
|
||||||
*/
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmPropertyAccessorAttributes.isNotDefault", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_NOT_DEFAULT: Flag = Flag(F.IS_NOT_DEFAULT)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property accessor is `external`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmPropertyAccessorAttributes.isExternal", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_EXTERNAL: Flag = Flag(F.IS_EXTERNAL_ACCESSOR)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding property accessor is `inline`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmPropertyAccessorAttributes.isInline", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_INLINE: Flag = Flag(F.IS_INLINE_ACCESSOR)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin types.
|
|
||||||
*/
|
|
||||||
public object Type {
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding type is marked as nullable, i.e. has a question mark at the end of its notation.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmType.isNullable", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_NULLABLE: Flag = Flag(0, 1, 1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding type is `suspend`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmType.isSuspend", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_SUSPEND: Flag = Flag(F.SUSPEND_TYPE.offset + 1, F.SUSPEND_TYPE.bitWidth, 1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding type is
|
|
||||||
* [definitely non-null](https://kotlinlang.org/docs/whatsnew17.html#stable-definitely-non-nullable-types).
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmType.isDefinitelyNonNull", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_DEFINITELY_NON_NULL: Flag = Flag(F.DEFINITELY_NOT_NULL_TYPE.offset + 1, F.DEFINITELY_NOT_NULL_TYPE.bitWidth, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin type parameters.
|
|
||||||
*/
|
|
||||||
public object TypeParameter {
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding type parameter is `reified`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmTypeParameter.isReified", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_REIFIED: Flag = Flag(0, 1, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin value parameters.
|
|
||||||
*/
|
|
||||||
public object ValueParameter {
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
* parameter in the derived method does _not_ declare the default value ([DECLARES_DEFAULT_VALUE] == false), but the parameter is
|
|
||||||
* still optional at the call site because the default value from the base method is used.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmValueParameter.declaresDefaultValue", level = DeprecationLevel.ERROR)
|
|
||||||
public val DECLARES_DEFAULT_VALUE: Flag = Flag(F.DECLARES_DEFAULT_VALUE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding value parameter is `crossinline`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmValueParameter.isCrossinline", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_CROSSINLINE: Flag = Flag(F.IS_CROSSINLINE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding value parameter is `noinline`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmValueParameter.isNoinline", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_NOINLINE: Flag = Flag(F.IS_NOINLINE)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container of flags applicable to Kotlin effect expressions.
|
|
||||||
*
|
|
||||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*/
|
|
||||||
public object EffectExpression {
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding effect expression should be negated to compute the proposition or the conclusion of an effect.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmEffectExpression.isNegated", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_NEGATED: Flag = Flag(F.IS_NEGATED)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signifies that the corresponding effect expression checks whether a value of some variable is `null`.
|
|
||||||
*/
|
|
||||||
@JvmField
|
|
||||||
@Deprecated("$prefix KmEffectExpression.isNullCheckPredicate", level = DeprecationLevel.ERROR)
|
|
||||||
public val IS_NULL_CHECK_PREDICATE: Flag = Flag(F.IS_NULL_CHECK_PREDICATE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:JvmName("FlagsKt")
|
|
||||||
|
|
||||||
package kotlin.metadata
|
|
||||||
|
|
||||||
import kotlin.metadata.internal.FlagImpl
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Declaration flags are represented as bitmasks of this type.
|
|
||||||
*
|
|
||||||
* @see Flag
|
|
||||||
*/
|
|
||||||
@Deprecated(
|
|
||||||
"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"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public typealias Flags = Int
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Combines several flags into an integer bitmask.
|
|
||||||
*
|
|
||||||
* Note that in case several mutually exclusive flags are passed (for example, several visibility flags), the resulting bitmask will
|
|
||||||
* hold the value of the latest flag. For example, `flagsOf(Flag.IS_PRIVATE, Flag.IS_PUBLIC, Flag.IS_INTERNAL)` is the same as
|
|
||||||
* `flagsOf(Flag.IS_INTERNAL)`.
|
|
||||||
*/
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
@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",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun flagsOf(vararg flags: Flag): Int =
|
|
||||||
flags.fold(0) { acc, flag -> flag + acc }
|
|
||||||
@@ -40,13 +40,8 @@ public interface KmDeclarationContainer {
|
|||||||
* Precise kind of the class can be obtained via [KmClass.kind].
|
* Precise kind of the class can be obtained via [KmClass.kind].
|
||||||
* 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", "DEPRECATION_ERROR")
|
public class KmClass : KmDeclarationContainer {
|
||||||
public class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
internal var flags: Int = 0
|
||||||
/**
|
|
||||||
* Class flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag and [Flag.Class] flags.
|
|
||||||
*/
|
|
||||||
@Deprecated("$flagAccessPrefix KmClass, such as KmClass.visibility", level = DeprecationLevel.ERROR)
|
|
||||||
public var flags: Int = 0
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the class.
|
* Name of the class.
|
||||||
@@ -126,105 +121,6 @@ public class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
|||||||
|
|
||||||
internal val extensions: List<KmClassExtension> =
|
internal val extensions: List<KmClassExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createClassExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createClassExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visit(flags: Int, name: ClassName) {
|
|
||||||
this.flags = flags
|
|
||||||
this.name = name
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
|
||||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitSupertype(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).addTo(supertypes)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor =
|
|
||||||
KmFunction(flags, name).addTo(functions)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor =
|
|
||||||
KmProperty(flags, name, getterFlags, setterFlags).addTo(properties)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeAlias(flags: Int, name: String): KmTypeAliasVisitor =
|
|
||||||
KmTypeAlias(flags, name).addTo(typeAliases)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitConstructor(flags: Int): KmConstructorVisitor =
|
|
||||||
KmConstructor(flags).addTo(constructors)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitCompanionObject(name: String) {
|
|
||||||
this.companionObject = name
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitNestedClass(name: String) {
|
|
||||||
nestedClasses.add(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitEnumEntry(name: String) {
|
|
||||||
enumEntries.add(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitSealedSubclass(name: ClassName) {
|
|
||||||
sealedSubclasses.add(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitInlineClassUnderlyingPropertyName(name: String) {
|
|
||||||
inlineClassUnderlyingPropertyName = name
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitInlineClassUnderlyingType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { inlineClassUnderlyingType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@ExperimentalContextReceivers
|
|
||||||
override fun visitContextReceiverType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).addTo(contextReceiverTypes)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
|
||||||
KmVersionRequirement().addTo(versionRequirements)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmClassExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this class.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this class
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@OptIn(ExperimentalContextReceivers::class)
|
|
||||||
public fun accept(visitor: KmClassVisitor) {
|
|
||||||
visitor.visit(flags, name)
|
|
||||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
|
||||||
supertypes.forEach { visitor.visitSupertype(it.flags)?.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) }
|
|
||||||
typeAliases.forEach { visitor.visitTypeAlias(it.flags, it.name)?.let(it::accept) }
|
|
||||||
constructors.forEach { visitor.visitConstructor(it.flags)?.let(it::accept) }
|
|
||||||
companionObject?.let(visitor::visitCompanionObject)
|
|
||||||
nestedClasses.forEach(visitor::visitNestedClass)
|
|
||||||
enumEntries.forEach(visitor::visitEnumEntry)
|
|
||||||
sealedSubclasses.forEach(visitor::visitSealedSubclass)
|
|
||||||
inlineClassUnderlyingPropertyName?.let(visitor::visitInlineClassUnderlyingPropertyName)
|
|
||||||
inlineClassUnderlyingType?.let { visitor.visitInlineClassUnderlyingType(it.flags)?.let(it::accept) }
|
|
||||||
contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) }
|
|
||||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -232,8 +128,7 @@ public class KmClass : KmClassVisitor(), KmDeclarationContainer {
|
|||||||
* Package fragments are produced from single file facades and multi-file class parts.
|
* Package fragments are produced from single file facades and multi-file class parts.
|
||||||
* Note that a package fragment does not contain any classes, as classes are not a part of file facades and have their own metadata.
|
* 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", "DEPRECATION_ERROR")
|
public class KmPackage : KmDeclarationContainer {
|
||||||
public class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
|
|
||||||
/**
|
/**
|
||||||
* Functions in the package fragment.
|
* Functions in the package fragment.
|
||||||
*/
|
*/
|
||||||
@@ -251,62 +146,16 @@ public class KmPackage : KmPackageVisitor(), KmDeclarationContainer {
|
|||||||
|
|
||||||
internal val extensions: List<KmPackageExtension> =
|
internal val extensions: List<KmPackageExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPackageExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPackageExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor =
|
|
||||||
KmFunction(flags, name).addTo(functions)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitProperty(flags: Int, name: String, getterFlags: Int, setterFlags: Int): KmPropertyVisitor =
|
|
||||||
KmProperty(flags, name, getterFlags, setterFlags).addTo(properties)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeAlias(flags: Int, name: String): KmTypeAliasVisitor =
|
|
||||||
KmTypeAlias(flags, name).addTo(typeAliases)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmPackageExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this package fragment.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this package fragment
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmPackageVisitor) {
|
|
||||||
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) }
|
|
||||||
typeAliases.forEach { visitor.visitTypeAlias(it.flags, it.name)?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a synthetic class generated for a Kotlin lambda.
|
* Represents a synthetic class generated for a Kotlin lambda.
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmLambda {
|
||||||
public class KmLambda : KmLambdaVisitor() {
|
|
||||||
/**
|
/**
|
||||||
* Signature of the synthetic anonymous function, representing the lambda.
|
* Signature of the synthetic anonymous function, representing the lambda.
|
||||||
*/
|
*/
|
||||||
public lateinit var function: KmFunction
|
public lateinit var function: KmFunction
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitFunction(flags: Int, name: String): KmFunctionVisitor =
|
|
||||||
KmFunction(flags, name).also { function = it }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this lambda.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this lambda
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmLambdaVisitor) {
|
|
||||||
visitor.visitFunction(function.flags, function.name)?.let(function::accept)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -315,11 +164,7 @@ public class KmLambda : KmLambdaVisitor() {
|
|||||||
* Various constructor attributes can be read and manipulated via extension properties,
|
* Various constructor attributes can be read and manipulated via extension properties,
|
||||||
* such as [KmConstructor.visibility] or [KmConstructor.isSecondary].
|
* such as [KmConstructor.visibility] or [KmConstructor.isSecondary].
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmConstructor internal constructor(internal var flags: Int) {
|
||||||
public class KmConstructor @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
|
||||||
@Deprecated("$flagAccessPrefix KmConstructor, such as KmConstructor.visibility", level = DeprecationLevel.ERROR) public var flags: Int,
|
|
||||||
) :
|
|
||||||
KmConstructorVisitor() {
|
|
||||||
public constructor() : this(0)
|
public constructor() : this(0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -334,31 +179,6 @@ public class KmConstructor @Deprecated(flagsCtorDeprecated, level = DeprecationL
|
|||||||
|
|
||||||
internal val extensions: List<KmConstructorExtension> =
|
internal val extensions: List<KmConstructorExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createConstructorExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createConstructorExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor =
|
|
||||||
KmValueParameter(flags, name).addTo(valueParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
|
||||||
KmVersionRequirement().addTo(versionRequirements)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmConstructorExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this constructor.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this class
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmConstructorVisitor) {
|
|
||||||
valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) }
|
|
||||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -369,11 +189,7 @@ public class KmConstructor @Deprecated(flagsCtorDeprecated, level = DeprecationL
|
|||||||
*
|
*
|
||||||
* @property name the name of the function
|
* @property name the name of the function
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmFunction internal constructor(internal var flags: Int, public var name: String) {
|
||||||
public class KmFunction @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
|
||||||
@Deprecated("$flagAccessPrefix KmFunction, such as KmFunction.visibility", level = DeprecationLevel.ERROR) public var flags: Int,
|
|
||||||
public var name: String,
|
|
||||||
) : KmFunctionVisitor() {
|
|
||||||
|
|
||||||
public constructor(name: String) : this(0, name)
|
public constructor(name: String) : this(0, name)
|
||||||
|
|
||||||
@@ -416,59 +232,6 @@ public class KmFunction @Deprecated(flagsCtorDeprecated, level = DeprecationLeve
|
|||||||
|
|
||||||
internal val extensions: List<KmFunctionExtension> =
|
internal val extensions: List<KmFunctionExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createFunctionExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createFunctionExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
|
||||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitReceiverParameterType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { receiverParameterType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@ExperimentalContextReceivers
|
|
||||||
override fun visitContextReceiverType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).addTo(contextReceiverTypes)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitValueParameter(flags: Int, name: String): KmValueParameterVisitor =
|
|
||||||
KmValueParameter(flags, name).addTo(valueParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitReturnType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { returnType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
|
||||||
KmVersionRequirement().addTo(versionRequirements)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@ExperimentalContracts
|
|
||||||
override fun visitContract(): KmContractVisitor =
|
|
||||||
KmContract().also { contract = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this function.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this function
|
|
||||||
*/
|
|
||||||
@OptIn(ExperimentalContextReceivers::class)
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmFunctionVisitor) {
|
|
||||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
|
||||||
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
|
|
||||||
contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) }
|
|
||||||
valueParameters.forEach { visitor.visitValueParameter(it.flags, it.name)?.let(it::accept) }
|
|
||||||
visitor.visitReturnType(returnType.flags)?.let(returnType::accept)
|
|
||||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
|
||||||
@OptIn(ExperimentalContracts::class) contract?.let { visitor.visitContract()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -491,14 +254,12 @@ public class KmPropertyAccessorAttributes internal constructor(internal var flag
|
|||||||
*
|
*
|
||||||
* @property name the name of the property
|
* @property name the name of the property
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmProperty internal constructor(
|
||||||
public class KmProperty @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
internal var flags: Int,
|
||||||
@Deprecated("$flagAccessPrefix KmProperty, such as KmProperty.visibility", level = DeprecationLevel.ERROR) public var flags: Int,
|
|
||||||
public var name: String,
|
public var name: String,
|
||||||
getterFlags: Int,
|
getterFlags: Int,
|
||||||
setterFlags: Int,
|
setterFlags: Int,
|
||||||
) : KmPropertyVisitor() {
|
) {
|
||||||
|
|
||||||
public constructor(name: String) : this(0, name, 0, 0)
|
public constructor(name: String) : this(0, name, 0, 0)
|
||||||
|
|
||||||
// needed for reading/writing flags back to protobuf as a whole pack
|
// needed for reading/writing flags back to protobuf as a whole pack
|
||||||
@@ -527,41 +288,6 @@ public class KmProperty @Deprecated(flagsCtorDeprecated, level = DeprecationLeve
|
|||||||
field = new
|
field = new
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A legacy accessor for getter attributes.
|
|
||||||
*
|
|
||||||
* Property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
|
||||||
* and [Flag.PropertyAccessor] flags.
|
|
||||||
*/
|
|
||||||
@Deprecated("$flagAccessPrefix KmProperty.getter, such as KmProperty.getter.isNotDefault", level = DeprecationLevel.ERROR)
|
|
||||||
public var getterFlags: Int
|
|
||||||
get() = getter.flags
|
|
||||||
set(value) {
|
|
||||||
getter.flags = value
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A legacy accessor to setter attributes.
|
|
||||||
*
|
|
||||||
* Property accessor flags, consisting of [Flag.HAS_ANNOTATIONS], visibility flag, modality flag
|
|
||||||
* and [Flag.PropertyAccessor] flags.
|
|
||||||
*
|
|
||||||
* Note that, for compatibility reasons, flags are present even the property is `val` and `setter` is null.
|
|
||||||
* In that case, flags for hasAnnotation, visibility and modality are copied from properties' flag, which may lead
|
|
||||||
* to incorrect results. For example, when property is annotated, [setterFlags] will also return true for [Flag.Common.HAS_ANNOTATIONS],
|
|
||||||
* even though there is no setter nor annotations on it.
|
|
||||||
*
|
|
||||||
* Setting this property when setter is absent changes the value, but does not create new [setter].
|
|
||||||
* This behavior is for compatibility only and will be removed in future versions.
|
|
||||||
*/
|
|
||||||
@Deprecated("$flagAccessPrefix KmProperty.setter, such as KmProperty.setter.isNotDefault", level = DeprecationLevel.ERROR)
|
|
||||||
public var setterFlags: Int = setterFlags // It's either the correct flags from deserializer, or always 0 in the case of hand-created property
|
|
||||||
get() = setter?.flags ?: field
|
|
||||||
set(value) {
|
|
||||||
setter?.flags = value
|
|
||||||
field = value
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type parameters of the property.
|
* Type parameters of the property.
|
||||||
*/
|
*/
|
||||||
@@ -603,53 +329,6 @@ public class KmProperty @Deprecated(flagsCtorDeprecated, level = DeprecationLeve
|
|||||||
|
|
||||||
internal val extensions: List<KmPropertyExtension> =
|
internal val extensions: List<KmPropertyExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPropertyExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createPropertyExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
|
||||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitReceiverParameterType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { receiverParameterType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
@ExperimentalContextReceivers
|
|
||||||
override fun visitContextReceiverType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).addTo(contextReceiverTypes)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitSetterParameter(flags: Int, name: String): KmValueParameterVisitor =
|
|
||||||
KmValueParameter(flags, name).also { setterParameter = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitReturnType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { returnType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
|
||||||
KmVersionRequirement().addTo(versionRequirements)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmPropertyExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this property.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this property
|
|
||||||
*/
|
|
||||||
@OptIn(ExperimentalContextReceivers::class)
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmPropertyVisitor) {
|
|
||||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
|
||||||
receiverParameterType?.let { visitor.visitReceiverParameterType(it.flags)?.let(it::accept) }
|
|
||||||
contextReceiverTypes.forEach { visitor.visitContextReceiverType(it.flags)?.let(it::accept) }
|
|
||||||
setterParameter?.let { visitor.visitSetterParameter(it.flags, it.name)?.let(it::accept) }
|
|
||||||
visitor.visitReturnType(returnType.flags)?.let(returnType::accept)
|
|
||||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -660,11 +339,10 @@ public class KmProperty @Deprecated(flagsCtorDeprecated, level = DeprecationLeve
|
|||||||
*
|
*
|
||||||
* @property name the name of the type alias
|
* @property name the name of the type alias
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmTypeAlias internal constructor(
|
||||||
public class KmTypeAlias @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
internal var flags: Int,
|
||||||
@Deprecated("$flagAccessPrefix KmTypeAlias, such as KmTypeAlias.visibility", level = DeprecationLevel.ERROR) public var flags: Int,
|
|
||||||
public var name: String,
|
public var name: String,
|
||||||
) : KmTypeAliasVisitor() {
|
) {
|
||||||
|
|
||||||
public constructor(name: String) : this(0, name)
|
public constructor(name: String) : this(0, name)
|
||||||
|
|
||||||
@@ -696,47 +374,6 @@ public class KmTypeAlias @Deprecated(flagsCtorDeprecated, level = DeprecationLev
|
|||||||
|
|
||||||
internal val extensions: List<KmTypeAliasExtension> =
|
internal val extensions: List<KmTypeAliasExtension> =
|
||||||
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createTypeAliasExtension)
|
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createTypeAliasExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeParameter(flags: Int, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor =
|
|
||||||
KmTypeParameter(flags, name, id, variance).addTo(typeParameters)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitUnderlyingType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { underlyingType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExpandedType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { expandedType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
|
||||||
annotations.add(annotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmTypeAliasExtensionVisitor? =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersionRequirement(): KmVersionRequirementVisitor =
|
|
||||||
KmVersionRequirement().addTo(versionRequirements)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this type alias.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this type alias
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmTypeAliasVisitor) {
|
|
||||||
typeParameters.forEach { visitor.visitTypeParameter(it.flags, it.name, it.id, it.variance)?.let(it::accept) }
|
|
||||||
visitor.visitUnderlyingType(underlyingType.flags)?.let(underlyingType::accept)
|
|
||||||
visitor.visitExpandedType(expandedType.flags)?.let(expandedType::accept)
|
|
||||||
annotations.forEach(visitor::visitAnnotation)
|
|
||||||
versionRequirements.forEach { visitor.visitVersionRequirement()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -747,14 +384,10 @@ public class KmTypeAlias @Deprecated(flagsCtorDeprecated, level = DeprecationLev
|
|||||||
*
|
*
|
||||||
* @property name the name of the value parameter
|
* @property name the name of the value parameter
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmValueParameter internal constructor(
|
||||||
public class KmValueParameter @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
internal var flags: Int,
|
||||||
@Deprecated(
|
|
||||||
"$flagAccessPrefix KmValueParameter, such as KmValueParameter.declaresDefaultValue",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
) public var flags: Int,
|
|
||||||
public var name: String,
|
public var name: String,
|
||||||
) : KmValueParameterVisitor() {
|
) {
|
||||||
|
|
||||||
public constructor(name: String) : this(0, name)
|
public constructor(name: String) : this(0, name)
|
||||||
|
|
||||||
@@ -771,31 +404,6 @@ public class KmValueParameter @Deprecated(flagsCtorDeprecated, level = Deprecati
|
|||||||
|
|
||||||
internal val extensions: List<KmValueParameterExtension> =
|
internal val extensions: List<KmValueParameterExtension> =
|
||||||
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createValueParameterExtension)
|
MetadataExtensions.INSTANCES.mapNotNull(MetadataExtensions::createValueParameterExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { type = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVarargElementType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { varargElementType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmValueParameterExtensionVisitor? =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this value parameter.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this value parameter
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmValueParameterVisitor) {
|
|
||||||
visitor.visitType(type.flags)?.let(type::accept)
|
|
||||||
varargElementType?.let { visitor.visitVarargElementType(it.flags)?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -809,16 +417,12 @@ public class KmValueParameter @Deprecated(flagsCtorDeprecated, level = Deprecati
|
|||||||
* the name is not enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
|
* the name is not enough (e.g. `class A<T> { fun <T> foo(t: T) }`)
|
||||||
* @property variance the declaration-site variance of the type parameter
|
* @property variance the declaration-site variance of the type parameter
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmTypeParameter internal constructor(
|
||||||
public class KmTypeParameter @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
internal var flags: Int,
|
||||||
@Deprecated(
|
|
||||||
"$flagAccessPrefix KmTypeParameter, such as KmTypeParameter.isReified",
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
) public var flags: Int,
|
|
||||||
public var name: String,
|
public var name: String,
|
||||||
public var id: Int,
|
public var id: Int,
|
||||||
public var variance: KmVariance,
|
public var variance: KmVariance,
|
||||||
) : KmTypeParameterVisitor() {
|
) {
|
||||||
|
|
||||||
public 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)
|
||||||
|
|
||||||
@@ -829,26 +433,6 @@ public class KmTypeParameter @Deprecated(flagsCtorDeprecated, level = Deprecatio
|
|||||||
|
|
||||||
internal val extensions: List<KmTypeParameterExtension> =
|
internal val extensions: List<KmTypeParameterExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeParameterExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeParameterExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitUpperBound(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).addTo(upperBounds)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmTypeParameterExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this type parameter.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this type parameter
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmTypeParameterVisitor) {
|
|
||||||
upperBounds.forEach { visitor.visitUpperBound(it.flags)?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -857,10 +441,9 @@ public class KmTypeParameter @Deprecated(flagsCtorDeprecated, level = Deprecatio
|
|||||||
* Various type attributes can be read and manipulated via extension properties,
|
* Various type attributes can be read and manipulated via extension properties,
|
||||||
* such as [KmType.isNullable].
|
* such as [KmType.isNullable].
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmType internal constructor(
|
||||||
public class KmType @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ERROR) constructor(
|
internal var flags: Int,
|
||||||
@Deprecated("$flagAccessPrefix KmType, such as KmType.isNullable", level = DeprecationLevel.ERROR) public var flags: Int,
|
) {
|
||||||
) : KmTypeVisitor() {
|
|
||||||
|
|
||||||
public constructor() : this(0)
|
public constructor() : this(0)
|
||||||
|
|
||||||
@@ -906,75 +489,6 @@ public class KmType @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ER
|
|||||||
|
|
||||||
internal val extensions: List<KmTypeExtension> =
|
internal val extensions: List<KmTypeExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeExtension)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createTypeExtension)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitClass(name: ClassName) {
|
|
||||||
classifier = KmClassifier.Class(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeAlias(name: ClassName) {
|
|
||||||
classifier = KmClassifier.TypeAlias(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitTypeParameter(id: Int) {
|
|
||||||
classifier = KmClassifier.TypeParameter(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitArgument(flags: Int, variance: KmVariance): KmTypeVisitor =
|
|
||||||
KmType(flags).also { arguments.add(KmTypeProjection(variance, it)) }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitStarProjection() {
|
|
||||||
arguments.add(KmTypeProjection.STAR)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitAbbreviatedType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { abbreviatedType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitOuterType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { outerType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitFlexibleTypeUpperBound(flags: Int, typeFlexibilityId: String?): KmTypeVisitor =
|
|
||||||
KmType(flags).also { flexibleTypeUpperBound = KmFlexibleTypeUpperBound(it, typeFlexibilityId) }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmTypeExtensionVisitor =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this type.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this type
|
|
||||||
* @throws IllegalArgumentException if type metadata is inconsistent
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmTypeVisitor) {
|
|
||||||
when (val classifier = classifier) {
|
|
||||||
is KmClassifier.Class -> visitor.visitClass(classifier.name)
|
|
||||||
is KmClassifier.TypeParameter -> visitor.visitTypeParameter(classifier.id)
|
|
||||||
is KmClassifier.TypeAlias -> visitor.visitTypeAlias(classifier.name)
|
|
||||||
}
|
|
||||||
arguments.forEach { argument ->
|
|
||||||
if (argument == KmTypeProjection.STAR) visitor.visitStarProjection()
|
|
||||||
else {
|
|
||||||
val (variance, type) = argument
|
|
||||||
if (variance == null || type == null)
|
|
||||||
throw InconsistentKotlinMetadataException("Variance and type must be set for non-star type projection")
|
|
||||||
visitor.visitArgument(type.flags, variance)?.let(type::accept)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
abbreviatedType?.let { visitor.visitAbbreviatedType(it.flags)?.let(it::accept) }
|
|
||||||
outerType?.let { visitor.visitOuterType(it.flags)?.let(it::accept) }
|
|
||||||
flexibleTypeUpperBound?.let { visitor.visitFlexibleTypeUpperBound(it.type.flags, it.typeFlexibilityId)?.let(it.type::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -983,8 +497,7 @@ public class KmType @Deprecated(flagsCtorDeprecated, level = DeprecationLevel.ER
|
|||||||
* Version requirement is an internal feature of the Kotlin compiler and the standard Kotlin library,
|
* Version requirement is an internal feature of the Kotlin compiler and the standard Kotlin library,
|
||||||
* enabled, for example, with the internal [kotlin.internal.RequireKotlin] annotation.
|
* enabled, for example, with the internal [kotlin.internal.RequireKotlin] annotation.
|
||||||
*/
|
*/
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
public class KmVersionRequirement {
|
||||||
public class KmVersionRequirement : KmVersionRequirementVisitor() {
|
|
||||||
/**
|
/**
|
||||||
* Kind of the version that this declaration requires.
|
* Kind of the version that this declaration requires.
|
||||||
*/
|
*/
|
||||||
@@ -1010,31 +523,6 @@ public class KmVersionRequirement : KmVersionRequirementVisitor() {
|
|||||||
*/
|
*/
|
||||||
public lateinit var version: KmVersion
|
public lateinit var version: KmVersion
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visit(kind: KmVersionRequirementVersionKind, level: KmVersionRequirementLevel, errorCode: Int?, message: String?) {
|
|
||||||
this.kind = kind
|
|
||||||
this.level = level
|
|
||||||
this.errorCode = errorCode
|
|
||||||
this.message = message
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitVersion(major: Int, minor: Int, patch: Int) {
|
|
||||||
this.version = KmVersion(major, minor, patch)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this version requirement.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this version requirement
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmVersionRequirementVisitor) {
|
|
||||||
visitor.visit(kind, level, errorCode, message)
|
|
||||||
visitor.visitVersion(version.major, version.minor, version.patch)
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the String representation of this KmVersionRequirement object, consisting of
|
* Returns the String representation of this KmVersionRequirement object, consisting of
|
||||||
* [kind], [level], [version], [errorCode], and [message].
|
* [kind], [level], [version], [errorCode], and [message].
|
||||||
@@ -1044,169 +532,6 @@ public class KmVersionRequirement : KmVersionRequirementVisitor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a contract of a Kotlin function.
|
|
||||||
*
|
|
||||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*/
|
|
||||||
@ExperimentalContracts
|
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
|
||||||
public class KmContract : KmContractVisitor() {
|
|
||||||
/**
|
|
||||||
* Effects of this contract.
|
|
||||||
*/
|
|
||||||
public val effects: MutableList<KmEffect> = ArrayList(1)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitEffect(type: KmEffectType, invocationKind: KmEffectInvocationKind?): KmEffectVisitor =
|
|
||||||
KmEffect(type, invocationKind).addTo(effects)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this contract.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this contract
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmContractVisitor) {
|
|
||||||
effects.forEach { visitor.visitEffect(it.type, it.invocationKind)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an effect (a part of the contract of a Kotlin function).
|
|
||||||
*
|
|
||||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*
|
|
||||||
* @property type type of the effect
|
|
||||||
* @property invocationKind optional number of invocations of the lambda parameter of this function,
|
|
||||||
* specified further in the effect expression
|
|
||||||
*/
|
|
||||||
@ExperimentalContracts
|
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
|
||||||
public class KmEffect(
|
|
||||||
public var type: KmEffectType,
|
|
||||||
public var invocationKind: KmEffectInvocationKind?
|
|
||||||
) : KmEffectVisitor() {
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
public var conclusion: KmEffectExpression? = null
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitConstructorArgument(): KmEffectExpressionVisitor =
|
|
||||||
KmEffectExpression().addTo(constructorArguments)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitConclusionOfConditionalEffect(): KmEffectExpressionVisitor =
|
|
||||||
KmEffectExpression().also { conclusion = it }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this effect.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this effect
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmEffectVisitor) {
|
|
||||||
constructorArguments.forEach { visitor.visitConstructorArgument()?.let(it::accept) }
|
|
||||||
conclusion?.let { visitor.visitConclusionOfConditionalEffect()?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an effect expression, the contents of an effect (a part of the contract of a Kotlin function).
|
|
||||||
*
|
|
||||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*
|
|
||||||
* Various effect expression attributes can be read and manipulated via extension properties,
|
|
||||||
* such as [KmEffectExpression.isNegated].
|
|
||||||
*/
|
|
||||||
@ExperimentalContracts
|
|
||||||
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
|
|
||||||
public class KmEffectExpression : KmEffectExpressionVisitor() {
|
|
||||||
/**
|
|
||||||
* Effect expression flags, consisting of [Flag.EffectExpression] flags.
|
|
||||||
*/
|
|
||||||
@Deprecated("$flagAccessPrefix KmEffectExpression, such as KmEffectExpression.isNegated", level = DeprecationLevel.ERROR)
|
|
||||||
public var flags: Int = flagsOf()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
public var parameterIndex: Int? = null
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constant value used in the effect expression.
|
|
||||||
*/
|
|
||||||
public var constantValue: KmConstantValue? = null
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type used as the target of an `is`-expression in the effect expression.
|
|
||||||
*/
|
|
||||||
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
|
|
||||||
* and elements of the list.
|
|
||||||
*/
|
|
||||||
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
|
|
||||||
* and elements of the list.
|
|
||||||
*/
|
|
||||||
public val orArguments: MutableList<KmEffectExpression> = ArrayList(0)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visit(flags: Int, parameterIndex: Int?) {
|
|
||||||
this.flags = flags
|
|
||||||
this.parameterIndex = parameterIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitConstantValue(value: Any?) {
|
|
||||||
constantValue = KmConstantValue(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitIsInstanceType(flags: Int): KmTypeVisitor =
|
|
||||||
KmType(flags).also { isInstanceType = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitAndArgument(): KmEffectExpressionVisitor =
|
|
||||||
KmEffectExpression().addTo(andArguments)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitOrArgument(): KmEffectExpressionVisitor =
|
|
||||||
KmEffectExpression().addTo(orArguments)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this effect expression.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in this effect expression
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmEffectExpressionVisitor) {
|
|
||||||
visitor.visit(flags, parameterIndex)
|
|
||||||
constantValue?.let { visitor.visitConstantValue(it.value) }
|
|
||||||
isInstanceType?.let { visitor.visitIsInstanceType(it.flags)?.let(it::accept) }
|
|
||||||
andArguments.forEach { visitor.visitAndArgument()?.let(it::accept) }
|
|
||||||
orArguments.forEach { visitor.visitOrArgument()?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
@@ -1265,6 +590,27 @@ public data class KmTypeProjection(var variance: KmVariance?, var type: KmType?)
|
|||||||
*/
|
*/
|
||||||
public data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?)
|
public data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variance applied to a type parameter on the declaration site (*declaration-site variance*),
|
||||||
|
* or to a type in a projection (*use-site variance*).
|
||||||
|
*/
|
||||||
|
public enum class KmVariance {
|
||||||
|
/**
|
||||||
|
* The affected type parameter or type is *invariant*, which means it has no variance applied to it.
|
||||||
|
*/
|
||||||
|
INVARIANT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The affected type parameter or type is *contravariant*. Denoted by the `in` modifier in the source code.
|
||||||
|
*/
|
||||||
|
IN,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The affected type parameter or type is *covariant*. Denoted by the `out` modifier in the source code.
|
||||||
|
*/
|
||||||
|
OUT,
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a version used in a version requirement.
|
* Represents a version used in a version requirement.
|
||||||
*
|
*
|
||||||
@@ -1281,22 +627,57 @@ public data class KmVersion(val major: Int, val minor: Int, val patch: Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a constant value used in an effect expression.
|
* Severity of the diagnostic reported by the compiler when a version requirement is not satisfied.
|
||||||
*
|
|
||||||
* Contracts are an internal feature of the standard Kotlin library, and their behavior and/or binary format
|
|
||||||
* may change in a subsequent release.
|
|
||||||
*
|
|
||||||
* @property value the constant value. May be `true`, `false` or `null`
|
|
||||||
*/
|
*/
|
||||||
@ExperimentalContracts
|
public enum class KmVersionRequirementLevel {
|
||||||
public data class KmConstantValue(val value: Any?)
|
/**
|
||||||
|
* Represents a diagnostic with 'WARNING' severity.
|
||||||
|
*/
|
||||||
|
WARNING,
|
||||||
|
|
||||||
internal fun <T> T.addTo(collection: MutableCollection<T>): T {
|
/**
|
||||||
collection.add(this)
|
* Represents a diagnostic with 'ERROR' severity.
|
||||||
return this
|
*/
|
||||||
|
ERROR,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excludes the declaration from the resolution process completely when the version requirement is not satisfied.
|
||||||
|
*/
|
||||||
|
HIDDEN,
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val flagsCtorDeprecated =
|
/**
|
||||||
"Constructor with flags is deprecated, use constructor without flags and assign them or corresponding extension properties directly."
|
* The kind of the version that is required by a version requirement.
|
||||||
|
*/
|
||||||
|
public enum class KmVersionRequirementVersionKind {
|
||||||
|
/**
|
||||||
|
* Indicates that certain language version is required.
|
||||||
|
*/
|
||||||
|
LANGUAGE_VERSION,
|
||||||
|
|
||||||
private const val flagAccessPrefix = "Flag API is deprecated. Please use corresponding member extensions on"
|
/**
|
||||||
|
* Indicates that certain compiler version is required.
|
||||||
|
*/
|
||||||
|
COMPILER_VERSION,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that certain API version is required.
|
||||||
|
*/
|
||||||
|
API_VERSION,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a version requirement not successfully parsed from the metadata.
|
||||||
|
*
|
||||||
|
* The old metadata format (from Kotlin 1.3 and earlier) did not have enough information for correct parsing of version requirements in some cases,
|
||||||
|
* so a stub of this kind is inserted instead.
|
||||||
|
*
|
||||||
|
* [KmVersionRequirement] with this kind always has [KmVersionRequirementLevel.HIDDEN] level, `256.256.256` [KmVersionRequirement.version],
|
||||||
|
* and `null` [KmVersionRequirement.errorCode] and [KmVersionRequirement.message].
|
||||||
|
*
|
||||||
|
* Version requirements of this kind are being ignored by writers (i.e., are not written back).
|
||||||
|
*
|
||||||
|
* See the following issues for details: [KT-60870](https://youtrack.jetbrains.com/issue/KT-60870), [KT-25120](https://youtrack.jetbrains.com/issue/KT-25120)
|
||||||
|
*/
|
||||||
|
UNKNOWN
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,8 +2,6 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
|
|
||||||
package kotlin.metadata.internal
|
package kotlin.metadata.internal
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
@@ -73,3 +71,11 @@ internal fun valueParameterBooleanFlag(flag: Flag) = BooleanFlagDelegate(KmValue
|
|||||||
|
|
||||||
internal fun <Node> annotationsOn(flags: KMutableProperty1<Node, Int>) = BooleanFlagDelegate(flags, Flag(ProtoFlags.HAS_ANNOTATIONS))
|
internal fun <Node> annotationsOn(flags: KMutableProperty1<Node, Int>) = BooleanFlagDelegate(flags, Flag(ProtoFlags.HAS_ANNOTATIONS))
|
||||||
|
|
||||||
|
// Used for kotlin-metadata-jvm tests:
|
||||||
|
public fun _flagAccess(kmClass: KmClass): Int = kmClass.flags
|
||||||
|
|
||||||
|
public fun _flagAccess(kmFunc: KmFunction): Int = kmFunc.flags
|
||||||
|
|
||||||
|
public fun _flagAccess(kmType: KmType): Int = kmType.flags
|
||||||
|
|
||||||
|
public fun _flagAccess(kmConstr: KmConstructor): Int = kmConstr.flags
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
|
|
||||||
package kotlin.metadata.internal
|
package kotlin.metadata.internal
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // flags will become internal eventually
|
|
||||||
package kotlin.metadata.internal
|
package kotlin.metadata.internal
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
|
|||||||
+3
-87
@@ -2,21 +2,16 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // deprecated .accept implementation
|
|
||||||
|
|
||||||
package kotlin.metadata.internal.common
|
package kotlin.metadata.internal.common
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.VISITOR_API_MESSAGE
|
|
||||||
import kotlin.metadata.internal.toKmPackage
|
import kotlin.metadata.internal.toKmPackage
|
||||||
import kotlin.metadata.internal.toKmClass
|
import kotlin.metadata.internal.toKmClass
|
||||||
import kotlin.metadata.internal.extensions.KmModuleFragmentExtension
|
|
||||||
import kotlin.metadata.internal.extensions.MetadataExtensions
|
|
||||||
import kotlin.metadata.internal.extensions.singleOfType
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.builtins.readBuiltinsPackageFragment
|
import org.jetbrains.kotlin.metadata.builtins.readBuiltinsPackageFragment
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||||
import java.io.ByteArrayInputStream
|
import java.io.ByteArrayInputStream
|
||||||
|
import kotlin.metadata.internal.extensions.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads metadata that is not from annotation nor from `.kotlin_module` file.
|
* Reads metadata that is not from annotation nor from `.kotlin_module` file.
|
||||||
@@ -27,22 +22,11 @@ public class KotlinCommonMetadata private constructor(proto: ProtoBuf.PackageFra
|
|||||||
|
|
||||||
public val kmModuleFragment: KmModuleFragment = readImpl(proto)
|
public val kmModuleFragment: KmModuleFragment = readImpl(proto)
|
||||||
|
|
||||||
@Deprecated(
|
|
||||||
"To avoid excessive copying, use .kmModuleFragment property instead. Note that it returns a view and not a copy.",
|
|
||||||
ReplaceWith("kmModuleFragment"),
|
|
||||||
DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
public fun toKmModuleFragment(): KmModuleFragment =
|
|
||||||
KmModuleFragment().apply { kmModuleFragment.accept(this) }
|
|
||||||
|
|
||||||
// private because there are no use-cases and it is not finished
|
// private because there are no use-cases and it is not finished
|
||||||
private class Writer : KmModuleFragmentVisitor() {
|
private class Writer {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(v: KmModuleFragmentVisitor): Unit = kmModuleFragment.accept(v)
|
|
||||||
|
|
||||||
private fun readImpl(proto: ProtoBuf.PackageFragment): KmModuleFragment {
|
private fun readImpl(proto: ProtoBuf.PackageFragment): KmModuleFragment {
|
||||||
val v = KmModuleFragment()
|
val v = KmModuleFragment()
|
||||||
val strings = NameResolverImpl(proto.strings, proto.qualifiedNames)
|
val strings = NameResolverImpl(proto.strings, proto.qualifiedNames)
|
||||||
@@ -73,7 +57,7 @@ public class KotlinCommonMetadata private constructor(proto: ProtoBuf.PackageFra
|
|||||||
*
|
*
|
||||||
* Can be read with [KotlinCommonMetadata.read].
|
* Can be read with [KotlinCommonMetadata.read].
|
||||||
*/
|
*/
|
||||||
public class KmModuleFragment : KmModuleFragmentVisitor() {
|
public class KmModuleFragment {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top-level functions, type aliases and properties in the module fragment.
|
* Top-level functions, type aliases and properties in the module fragment.
|
||||||
@@ -87,72 +71,4 @@ public class KmModuleFragment : KmModuleFragmentVisitor() {
|
|||||||
|
|
||||||
internal val extensions: List<KmModuleFragmentExtension> =
|
internal val extensions: List<KmModuleFragmentExtension> =
|
||||||
MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions)
|
MetadataExtensions.INSTANCES.map(MetadataExtensions::createModuleFragmentExtensions)
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitPackage(): KmPackageVisitor? =
|
|
||||||
KmPackage().also { pkg = it }
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? =
|
|
||||||
extensions.singleOfType(type)
|
|
||||||
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
override fun visitClass(): KmClassVisitor? =
|
|
||||||
KmClass().addTo(classes)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the given visitor with data in this module fragment.
|
|
||||||
*
|
|
||||||
* @param visitor the visitor which will visit data in the module fragment.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public fun accept(visitor: KmModuleFragmentVisitor) {
|
|
||||||
pkg?.let { visitor.visitPackage()?.let(it::accept) }
|
|
||||||
classes.forEach { visitor.visitClass()?.let(it::accept) }
|
|
||||||
extensions.forEach { visitor.visitExtensions(it.type)?.let(it::accept) }
|
|
||||||
visitor.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit module fragments. The module fragment can have no more than one package, and any number of classes,
|
|
||||||
* and must have at least one declaration.
|
|
||||||
*
|
|
||||||
* When using this class, [visitEnd] must be called exactly once and after calls to all other visit* methods.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public abstract class KmModuleFragmentVisitor @JvmOverloads constructor(private val delegate: KmModuleFragmentVisitor? = null) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits a package within the module fragment.
|
|
||||||
*/
|
|
||||||
public open fun visitPackage(): KmPackageVisitor? =
|
|
||||||
delegate?.visitPackage()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits a class within the module fragment.
|
|
||||||
*/
|
|
||||||
public open fun visitClass(): KmClassVisitor? =
|
|
||||||
delegate?.visitClass()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the extensions of the given type on the module fragment.
|
|
||||||
*
|
|
||||||
* @param type the type of extension visitor to be returned.
|
|
||||||
*/
|
|
||||||
public open fun visitExtensions(type: KmExtensionType): KmModuleFragmentExtensionVisitor? =
|
|
||||||
delegate?.visitExtensions(type)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Visits the end of the module fragment.
|
|
||||||
*/
|
|
||||||
public open fun visitEnd() {
|
|
||||||
delegate?.visitEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A visitor to visit platform-specific extensions for a module fragment.
|
|
||||||
*/
|
|
||||||
@Deprecated(VISITOR_API_MESSAGE, level = DeprecationLevel.ERROR)
|
|
||||||
public interface KmModuleFragmentExtensionVisitor : KmExtensionVisitor
|
|
||||||
|
|||||||
+76
-15
@@ -2,33 +2,94 @@
|
|||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DEPRECATION_ERROR") // deprecated visitors API
|
|
||||||
|
|
||||||
package kotlin.metadata.internal.extensions
|
package kotlin.metadata.internal.extensions
|
||||||
|
|
||||||
import kotlin.metadata.*
|
import kotlin.metadata.*
|
||||||
import kotlin.metadata.internal.common.KmModuleFragmentExtensionVisitor
|
import kotlin.metadata.internal.common.KmModuleFragment
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
public interface KmExtension<V : KmExtensionVisitor> : KmExtensionVisitor {
|
/**
|
||||||
public fun accept(visitor: V)
|
* A type of the extension expected by the code that uses the extensions API.
|
||||||
|
*
|
||||||
|
* Each declaration that can have platform-specific extensions in the metadata has a method `getExtension`, e.g.:
|
||||||
|
* `fun KmFunction.getExtension(type: KmExtensionType): KmFunctionExtension`.
|
||||||
|
*
|
||||||
|
* These functions are used by -jvm and -klib counterparts to retrieve platform-specific metadata
|
||||||
|
* and should not be used in any other way.
|
||||||
|
*/
|
||||||
|
public class KmExtensionType(private val klass: KClass<out KmExtension>) {
|
||||||
|
override fun equals(other: Any?): Boolean =
|
||||||
|
other is KmExtensionType && klass == other.klass
|
||||||
|
|
||||||
|
override fun hashCode(): Int =
|
||||||
|
klass.hashCode()
|
||||||
|
|
||||||
|
override fun toString(): String =
|
||||||
|
klass.java.name
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface KmClassExtension : KmClassExtensionVisitor, KmExtension<KmClassExtensionVisitor>
|
/**
|
||||||
|
* Base interface for all extensions to hold the extension type.
|
||||||
|
*/
|
||||||
|
public interface KmExtension {
|
||||||
|
|
||||||
public interface KmPackageExtension : KmPackageExtensionVisitor, KmExtension<KmPackageExtensionVisitor>
|
/**
|
||||||
|
* Type of this extension.
|
||||||
|
*/
|
||||||
|
public val type: KmExtensionType
|
||||||
|
}
|
||||||
|
|
||||||
public interface KmModuleFragmentExtension : KmModuleFragmentExtensionVisitor, KmExtension<KmModuleFragmentExtensionVisitor>
|
public interface KmClassExtension : KmExtension
|
||||||
|
|
||||||
public interface KmFunctionExtension : KmFunctionExtensionVisitor, KmExtension<KmFunctionExtensionVisitor>
|
public fun KmClass.getExtension(type: KmExtensionType): KmClassExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
public interface KmPropertyExtension : KmPropertyExtensionVisitor, KmExtension<KmPropertyExtensionVisitor>
|
public interface KmPackageExtension : KmExtension
|
||||||
|
|
||||||
public interface KmConstructorExtension : KmConstructorExtensionVisitor, KmExtension<KmConstructorExtensionVisitor>
|
public fun KmPackage.getExtension(type: KmExtensionType): KmPackageExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
public interface KmTypeParameterExtension : KmTypeParameterExtensionVisitor, KmExtension<KmTypeParameterExtensionVisitor>
|
public interface KmModuleFragmentExtension : KmExtension
|
||||||
|
|
||||||
public interface KmTypeExtension : KmTypeExtensionVisitor, KmExtension<KmTypeExtensionVisitor>
|
public fun KmModuleFragment.getExtension(type: KmExtensionType): KmModuleFragmentExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
public interface KmTypeAliasExtension : KmTypeAliasExtensionVisitor, KmExtension<KmTypeAliasExtensionVisitor>
|
public interface KmFunctionExtension : KmExtension
|
||||||
|
|
||||||
public interface KmValueParameterExtension : KmValueParameterExtensionVisitor, KmExtension<KmValueParameterExtensionVisitor>
|
public fun KmFunction.getExtension(type: KmExtensionType): KmFunctionExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmPropertyExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmProperty.getExtension(type: KmExtensionType): KmPropertyExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmConstructorExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmConstructor.getExtension(type: KmExtensionType): KmConstructorExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmTypeParameterExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmTypeParameter.getExtension(type: KmExtensionType): KmTypeParameterExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmTypeExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmType.getExtension(type: KmExtensionType): KmTypeExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmTypeAliasExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmTypeAlias.getExtension(type: KmExtensionType): KmTypeAliasExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
public interface KmValueParameterExtension : KmExtension
|
||||||
|
|
||||||
|
public fun KmValueParameter.getExtension(type: KmExtensionType): KmValueParameterExtension = extensions.singleOfType(type)
|
||||||
|
|
||||||
|
private fun <N : KmExtension> Collection<N>.singleOfType(type: KmExtensionType): N {
|
||||||
|
var result: N? = null
|
||||||
|
for (node in this) {
|
||||||
|
if (node.type != type) continue
|
||||||
|
if (result != null) {
|
||||||
|
throw IllegalStateException("Multiple extensions handle the same extension type: $type")
|
||||||
|
}
|
||||||
|
result = node
|
||||||
|
}
|
||||||
|
if (result == null) {
|
||||||
|
throw IllegalStateException("No extensions handle the extension type: $type")
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
@file:Suppress("DEPRECATION_ERROR") // KmExtensionType will be moved to an internal package
|
|
||||||
package kotlin.metadata.internal.extensions
|
|
||||||
|
|
||||||
import kotlin.metadata.KmExtensionType
|
|
||||||
|
|
||||||
internal fun <N : KmExtension<*>> Collection<N>.singleOfType(type: KmExtensionType): N {
|
|
||||||
var result: N? = null
|
|
||||||
for (node in this) {
|
|
||||||
if (node.type != type) continue
|
|
||||||
if (result != null) {
|
|
||||||
throw IllegalStateException("Multiple extensions handle the same extension type: $type")
|
|
||||||
}
|
|
||||||
result = node
|
|
||||||
}
|
|
||||||
if (result == null) {
|
|
||||||
throw IllegalStateException("No extensions handle the extension type: $type")
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user