diff --git a/libraries/kotlinx-metadata/jvm/ChangeLog.md b/libraries/kotlinx-metadata/jvm/ChangeLog.md index 2219052984f..757fe5a6079 100644 --- a/libraries/kotlinx-metadata/jvm/ChangeLog.md +++ b/libraries/kotlinx-metadata/jvm/ChangeLog.md @@ -7,6 +7,8 @@ - Breaking change: JvmPropertyExtensionVisitor.visit has a new parameter `jvmFlags: Flags` - Correctly write "null" constant value in effect expression of a contract - Rename `desc` parameters to `signature` in JvmFunctionExtensionVisitor, JvmPropertyExtensionVisitor, JvmConstructorExtensionVisitor +- Do not expose KmExtensionType internals +- Add KmExtensionVisitor.type to get dynamic type of an extension visitor ## 0.0.5 diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmExtensions.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmExtensions.kt index 272b539f1b2..719988ef1d7 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmExtensions.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/jvmExtensions.kt @@ -50,6 +50,9 @@ open class JvmClassExtensionVisitor @JvmOverloads constructor( 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. @@ -85,6 +88,9 @@ open class JvmPackageExtensionVisitor @JvmOverloads constructor( 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. */ @@ -109,6 +115,9 @@ open class JvmPackageExtensionVisitor @JvmOverloads constructor( 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 in the JVM-based format, * or null if the JVM signature of this function is unknown. @@ -153,6 +162,9 @@ open class JvmFunctionExtensionVisitor @JvmOverloads constructor( 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. * @@ -225,6 +237,9 @@ open class JvmPropertyExtensionVisitor @JvmOverloads constructor( 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. * @@ -253,6 +268,9 @@ open class JvmConstructorExtensionVisitor @JvmOverloads constructor( 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. * @@ -286,6 +304,9 @@ open class JvmTypeParameterExtensionVisitor @JvmOverloads constructor( 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. * diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt index 8ae6708fa63..bc17cae5d6e 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/extensions.kt @@ -28,12 +28,26 @@ import kotlin.reflect.KClass * * In case an extension visitor of an unrelated type is returned, the code using the visitor API must ignore that visitor. */ -data class KmExtensionType(val klass: KClass) +class KmExtensionType(private val klass: KClass) { + 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. */ -interface KmExtensionVisitor +interface KmExtensionVisitor { + /** + * Type of this extension visitor. + */ + val type: KmExtensionType +} /** * A visitor to visit platform-specific extensions for a declaration container, such as a class or a package fragment.