From cc343d7fb3ab27178c0701f9b17a292e8057b80d Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Wed, 6 Mar 2024 20:20:19 +0100 Subject: [PATCH] Add KmFlexibleTypeUpperBound.Companion and JVM_PLATFORM_TYPE_ID extension on it. Because `public JvmTypeExtensionVisitor` was removed, a new place for `const val PLATFORM_TYPE_ID` is required. It is logical to place it as a some kind of constant for Km node; however, because it is platform-specific, there is a need for an empty `KmFlexibleTypeUpperBound.Companion` in metadata common sources and `public val KmFlexibleTypeUpperBound.Companion.PLATFORM_TYPE_ID` extension in kotlin-metadata-jvm sources. See also: KT-63156 --- .../kotlinx-metadata/jvm/api/kotlin-metadata-jvm.api | 5 +++++ .../jvm/src/kotlin/metadata/jvm/JvmExtensions.kt | 9 +++++++++ .../kotlin/metadata/jvm/internal/JvmExtensionNodes.kt | 7 ------- libraries/kotlinx-metadata/src/kotlin/metadata/Nodes.kt | 7 ++++++- .../src/org/jetbrains/kotlin/kotlinp/jvm/JvmKotlinp.kt | 3 +-- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libraries/kotlinx-metadata/jvm/api/kotlin-metadata-jvm.api b/libraries/kotlinx-metadata/jvm/api/kotlin-metadata-jvm.api index d53a8e15482..8eafd60a697 100644 --- a/libraries/kotlinx-metadata/jvm/api/kotlin-metadata-jvm.api +++ b/libraries/kotlinx-metadata/jvm/api/kotlin-metadata-jvm.api @@ -483,6 +483,7 @@ public final class kotlin/metadata/KmEffectType : java/lang/Enum { } public final class kotlin/metadata/KmFlexibleTypeUpperBound { + public static final field Companion Lkotlin/metadata/KmFlexibleTypeUpperBound$Companion; public fun (Lkotlin/metadata/KmType;Ljava/lang/String;)V public final fun component1 ()Lkotlin/metadata/KmType; public final fun component2 ()Ljava/lang/String; @@ -497,6 +498,9 @@ public final class kotlin/metadata/KmFlexibleTypeUpperBound { public fun toString ()Ljava/lang/String; } +public final class kotlin/metadata/KmFlexibleTypeUpperBound$Companion { +} + public final class kotlin/metadata/KmFunction { public field returnType Lkotlin/metadata/KmType; public fun (Ljava/lang/String;)V @@ -730,6 +734,7 @@ public final class kotlin/metadata/jvm/JvmExtensionsKt { public static final fun getAnonymousObjectOriginName (Lkotlin/metadata/KmClass;)Ljava/lang/String; public static final fun getFieldSignature (Lkotlin/metadata/KmProperty;)Lkotlin/metadata/jvm/JvmFieldSignature; public static final fun getGetterSignature (Lkotlin/metadata/KmProperty;)Lkotlin/metadata/jvm/JvmMethodSignature; + public static final fun getJVM_PLATFORM_TYPE_ID (Lkotlin/metadata/KmFlexibleTypeUpperBound$Companion;)Ljava/lang/String; public static final fun getLambdaClassOriginName (Lkotlin/metadata/KmFunction;)Ljava/lang/String; public static final fun getLocalDelegatedProperties (Lkotlin/metadata/KmClass;)Ljava/util/List; public static final fun getLocalDelegatedProperties (Lkotlin/metadata/KmPackage;)Ljava/util/List; diff --git a/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/JvmExtensions.kt b/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/JvmExtensions.kt index a3f76fe8680..3c86a0e2675 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/JvmExtensions.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/JvmExtensions.kt @@ -8,6 +8,7 @@ package kotlin.metadata.jvm +import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import kotlin.metadata.* import kotlin.metadata.jvm.internal.jvm @@ -172,3 +173,11 @@ public var KmType.isRaw: Boolean */ public val KmType.annotations: MutableList get() = jvm.annotations + + +/** + * The type flexibility id, signifying that the visited type is a JVM platform type. + * + * @see KmFlexibleTypeUpperBound.typeFlexibilityId + */ +public val KmFlexibleTypeUpperBound.Companion.JVM_PLATFORM_TYPE_ID: String get() = JvmProtoBufUtil.PLATFORM_TYPE_ID diff --git a/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/internal/JvmExtensionNodes.kt b/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/internal/JvmExtensionNodes.kt index c12b558d1cc..3c3ef73ee8a 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/internal/JvmExtensionNodes.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlin/metadata/jvm/internal/JvmExtensionNodes.kt @@ -121,12 +121,5 @@ internal class JvmTypeExtension : KmTypeExtension { companion object { @JvmField val TYPE: KmExtensionType = KmExtensionType(JvmTypeExtension::class) - - /** - * The type flexibility id, signifying that the visited type is a JVM platform type. - * - * @see KmTypeVisitor.visitFlexibleTypeUpperBound - */ - const val PLATFORM_TYPE_ID: String = JvmProtoBufUtil.PLATFORM_TYPE_ID // TODO: move out of deprecated visitor } } diff --git a/libraries/kotlinx-metadata/src/kotlin/metadata/Nodes.kt b/libraries/kotlinx-metadata/src/kotlin/metadata/Nodes.kt index 65b5c7f61aa..b17781c7f54 100644 --- a/libraries/kotlinx-metadata/src/kotlin/metadata/Nodes.kt +++ b/libraries/kotlinx-metadata/src/kotlin/metadata/Nodes.kt @@ -588,7 +588,12 @@ public data class KmTypeProjection(var variance: KmVariance?, var type: KmType?) * @property typeFlexibilityId id of the kind of flexibility this type has. For example, "kotlin.jvm.PlatformType" for JVM platform types, * or "kotlin.DynamicType" for JS dynamic type */ -public data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?) +public data class KmFlexibleTypeUpperBound(var type: KmType, var typeFlexibilityId: String?) { + /** + * A companion object providing possibility to declare various platform-dependent constant ids as extension properties of it. + */ + public companion object +} /** * Variance applied to a type parameter on the declaration site (*declaration-site variance*), diff --git a/libraries/tools/kotlinp/jvm/src/org/jetbrains/kotlin/kotlinp/jvm/JvmKotlinp.kt b/libraries/tools/kotlinp/jvm/src/org/jetbrains/kotlin/kotlinp/jvm/JvmKotlinp.kt index bc4c7320c5f..b1da82e3799 100644 --- a/libraries/tools/kotlinp/jvm/src/org/jetbrains/kotlin/kotlinp/jvm/JvmKotlinp.kt +++ b/libraries/tools/kotlinp/jvm/src/org/jetbrains/kotlin/kotlinp/jvm/JvmKotlinp.kt @@ -193,8 +193,7 @@ class JvmKotlinp(settings: Settings) : Kotlinp(settings) { override fun isRaw(type: KmType) = type.isRaw override fun renderFlexibleTypeUpperBound(flexibleTypeUpperBound: KmFlexibleTypeUpperBound): String? { - @Suppress("DEPRECATION_ERROR") - return if (flexibleTypeUpperBound.typeFlexibilityId == JvmTypeExtensionVisitor.PLATFORM_TYPE_ID) + return if (flexibleTypeUpperBound.typeFlexibilityId == KmFlexibleTypeUpperBound.JVM_PLATFORM_TYPE_ID) printString { appendType(flexibleTypeUpperBound.type) } else null