From e34a2077255e2edbaa5b77978d39d63414e5877d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 21 Jan 2020 11:58:59 +0100 Subject: [PATCH] Implement KTypeProjection.toString The implementation is checked by tests on typeOf. #KT-30071 Fixed --- .../jvm/runtime/kotlin/jvm/internal/TypeReference.kt | 5 ++--- libraries/stdlib/src/kotlin/reflect/KType.kt | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/TypeReference.kt b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/TypeReference.kt index 25b4e7162ca..ecc1dea74be 100644 --- a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/TypeReference.kt +++ b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/TypeReference.kt @@ -8,7 +8,6 @@ package kotlin.jvm.internal import kotlin.reflect.* @SinceKotlin("1.4") -@Suppress("NEWER_VERSION_IN_SINCE_KOTLIN", "API_NOT_AVAILABLE" /* See KT-30129 */) // TODO: remove this in 1.4 public class TypeReference( override val classifier: KClassifier, override val arguments: List, @@ -55,8 +54,8 @@ public class TypeReference( else -> "kotlin.Array" } - // TODO: this should be the implementation of KTypeProjection.toString, see KT-30071 - @Suppress("NO_REFLECTION_IN_CLASS_PATH") + // This is based on KTypeProjection.toString, but uses [asString] to avoid adding the + // "reflection not supported" suffix to each type argument. private fun KTypeProjection.asString(): String { if (variance == null) return "*" diff --git a/libraries/stdlib/src/kotlin/reflect/KType.kt b/libraries/stdlib/src/kotlin/reflect/KType.kt index 08ccf4957ec..85e5d0bac10 100644 --- a/libraries/stdlib/src/kotlin/reflect/KType.kt +++ b/libraries/stdlib/src/kotlin/reflect/KType.kt @@ -71,6 +71,13 @@ public data class KTypeProjection constructor( */ public val type: KType? ) { + override fun toString(): String = when (variance) { + null -> "*" + KVariance.INVARIANT -> type.toString() + KVariance.IN -> "in $type" + KVariance.OUT -> "out $type" + } + public companion object { /** * Star projection, denoted by the `*` character.