From 4be7ac930b2ba0c7d4f7c9dca043a8020b0f4557 Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Tue, 30 May 2023 15:10:50 +0200 Subject: [PATCH] Update KClass.isData KDoc to include info about data objects ^KT-58985 Fixed Review: https://jetbrains.team/p/kt/reviews/10385 `isData` returns `true` for `data object`s even if kotlin-reflect version is old (1.2.0), so it looks like we got correct `KClass.isData` behaviour for "free". That's why this behaviour was never covered with tests. This commit updates the documentation and covers the behaviour described in the KDoc with tests. --- .../box/reflection/modifiers/classes.kt | 22 +++++++++++++------ .../stdlib/jvm/src/kotlin/reflect/KClass.kt | 7 +++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/compiler/testData/codegen/box/reflection/modifiers/classes.kt b/compiler/testData/codegen/box/reflection/modifiers/classes.kt index 4ab22934d8c..43c054c8882 100644 --- a/compiler/testData/codegen/box/reflection/modifiers/classes.kt +++ b/compiler/testData/codegen/box/reflection/modifiers/classes.kt @@ -7,9 +7,10 @@ import kotlin.test.assertFalse sealed class S { data class DataClass(val x: Int) : S() + data object DataObject inner class InnerClass companion object - object NonCompanionObject + object RegularObject fun interface FunInterface { fun invoke() } } @@ -34,6 +35,13 @@ fun box(): String { assertFalse(S.DataClass::class.isFun) assertFalse(S.DataClass::class.isValue) + assertFalse(S.DataObject::class.isSealed) + assertTrue(S.DataObject::class.isData) + assertFalse(S.DataObject::class.isInner) + assertFalse(S.DataObject::class.isCompanion) + assertFalse(S.DataObject::class.isFun) + assertFalse(S.DataObject::class.isValue) + assertFalse(S.InnerClass::class.isSealed) assertFalse(S.InnerClass::class.isData) assertTrue(S.InnerClass::class.isInner) @@ -48,12 +56,12 @@ fun box(): String { assertFalse(S.Companion::class.isFun) assertFalse(S.Companion::class.isValue) - assertFalse(S.NonCompanionObject::class.isSealed) - assertFalse(S.NonCompanionObject::class.isData) - assertFalse(S.NonCompanionObject::class.isInner) - assertFalse(S.NonCompanionObject::class.isCompanion) - assertFalse(S.NonCompanionObject::class.isFun) - assertFalse(S.NonCompanionObject::class.isValue) + assertFalse(S.RegularObject::class.isSealed) + assertFalse(S.RegularObject::class.isData) + assertFalse(S.RegularObject::class.isInner) + assertFalse(S.RegularObject::class.isCompanion) + assertFalse(S.RegularObject::class.isFun) + assertFalse(S.RegularObject::class.isValue) assertFalse(S.FunInterface::class.isSealed) assertFalse(S.FunInterface::class.isData) diff --git a/libraries/stdlib/jvm/src/kotlin/reflect/KClass.kt b/libraries/stdlib/jvm/src/kotlin/reflect/KClass.kt index aaa47fd8525..3a2453b32aa 100644 --- a/libraries/stdlib/jvm/src/kotlin/reflect/KClass.kt +++ b/libraries/stdlib/jvm/src/kotlin/reflect/KClass.kt @@ -104,9 +104,10 @@ public actual interface KClass : KDeclarationContainer, KAnnotatedEleme public val isSealed: Boolean /** - * `true` if this class is a data class. - * See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/data-classes.html) - * for more information. + * `true` if this class or object has the `data` keyword. + * For more information, see [data class](https://kotlinlang.org/docs/reference/data-classes.html) and + * [data object](https://kotlinlang.org/docs/object-declarations.html#data-objects) + * in the Kotlin language documentation. */ @SinceKotlin("1.1") public val isData: Boolean