From 6abf14087c46e0b5c3015eec48b92162bc63c135 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 13 Jun 2022 22:48:11 +0200 Subject: [PATCH] kotlinx-metadata: add Flag.Type.IS_DEFINITELY_NON_NULL --- libraries/kotlinx-metadata/jvm/ChangeLog.md | 1 + libraries/kotlinx-metadata/src/kotlinx/metadata/Flag.kt | 7 +++++++ .../kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt | 3 +++ libraries/tools/kotlinp/testData/TypeParameters.kt | 2 +- libraries/tools/kotlinp/testData/TypeParameters.txt | 3 ++- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libraries/kotlinx-metadata/jvm/ChangeLog.md b/libraries/kotlinx-metadata/jvm/ChangeLog.md index 9188ae602ad..1874bc9e773 100644 --- a/libraries/kotlinx-metadata/jvm/ChangeLog.md +++ b/libraries/kotlinx-metadata/jvm/ChangeLog.md @@ -3,6 +3,7 @@ ## Next - kotlinx-metadata-jvm can no longer be used on JVM 1.6, and now requires JVM 1.8 or later. +- Add `Flag.Type.IS_DEFINITELY_NON_NULL`. ## 0.4.2 diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/Flag.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/Flag.kt index f4c626d6c76..fea84f218a3 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/Flag.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/Flag.kt @@ -459,6 +459,13 @@ class Flag(private val offset: Int, private val bitWidth: Int, private val value */ @JvmField val IS_SUSPEND = 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 + val IS_DEFINITELY_NON_NULL = Flag(F.DEFINITELY_NOT_NULL_TYPE.offset + 1, F.DEFINITELY_NOT_NULL_TYPE.bitWidth, 1) } /** diff --git a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt index 07c33cac822..af7151006b5 100644 --- a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt +++ b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/printers.kt @@ -369,6 +369,9 @@ private fun printType(flags: Flags, output: (String) -> Unit): KmTypeVisitor = if (Flag.Type.IS_NULLABLE(flags)) { append("?") } + if (Flag.Type.IS_DEFINITELY_NON_NULL(flags)) { + append(" & Any") + } if (abbreviatedType != null) { append(" /* = ").append(abbreviatedType).append(" */") } diff --git a/libraries/tools/kotlinp/testData/TypeParameters.kt b/libraries/tools/kotlinp/testData/TypeParameters.kt index e68d01219de..233ab2e051e 100644 --- a/libraries/tools/kotlinp/testData/TypeParameters.kt +++ b/libraries/tools/kotlinp/testData/TypeParameters.kt @@ -2,7 +2,7 @@ class A { fun a(t: T) {} inner class B { - fun b(t: T, u: U, v: V) where T : Comparable, T : Cloneable {} + fun b(t: T, u: U & Any, v: V) where T : Comparable, T : Cloneable {} fun bb(t: T) {} diff --git a/libraries/tools/kotlinp/testData/TypeParameters.txt b/libraries/tools/kotlinp/testData/TypeParameters.txt index bcd69456bb6..94f88efbdc9 100644 --- a/libraries/tools/kotlinp/testData/TypeParameters.txt +++ b/libraries/tools/kotlinp/testData/TypeParameters.txt @@ -19,8 +19,9 @@ public final inner class A.B : kotlin/Any { // signature: (LA;)V public constructor() + // requires language version 1.7.0 (level=ERROR) // signature: b(Ljava/lang/Comparable;Ljava/lang/Object;Ljava/lang/Object;)V - public final fun & kotlin/Cloneable, T#4 /* U */> b(t: T#3, u: T#4, v: T#2): kotlin/Unit + public final fun & kotlin/Cloneable, T#4 /* U */> b(t: T#3, u: T#4 & Any, v: T#2): kotlin/Unit // signature: bb(Ljava/lang/Object;)V public final fun bb(t: T#0): kotlin/Unit