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.
This commit is contained in:
Nikita Bobko
2023-05-30 15:10:50 +02:00
committed by Space Team
parent 13e2a3ae94
commit 4be7ac930b
2 changed files with 19 additions and 10 deletions
@@ -7,9 +7,10 @@ import kotlin.test.assertFalse
sealed class S { sealed class S {
data class DataClass(val x: Int) : S() data class DataClass(val x: Int) : S()
data object DataObject
inner class InnerClass inner class InnerClass
companion object companion object
object NonCompanionObject object RegularObject
fun interface FunInterface { fun invoke() } fun interface FunInterface { fun invoke() }
} }
@@ -34,6 +35,13 @@ fun box(): String {
assertFalse(S.DataClass::class.isFun) assertFalse(S.DataClass::class.isFun)
assertFalse(S.DataClass::class.isValue) 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.isSealed)
assertFalse(S.InnerClass::class.isData) assertFalse(S.InnerClass::class.isData)
assertTrue(S.InnerClass::class.isInner) assertTrue(S.InnerClass::class.isInner)
@@ -48,12 +56,12 @@ fun box(): String {
assertFalse(S.Companion::class.isFun) assertFalse(S.Companion::class.isFun)
assertFalse(S.Companion::class.isValue) assertFalse(S.Companion::class.isValue)
assertFalse(S.NonCompanionObject::class.isSealed) assertFalse(S.RegularObject::class.isSealed)
assertFalse(S.NonCompanionObject::class.isData) assertFalse(S.RegularObject::class.isData)
assertFalse(S.NonCompanionObject::class.isInner) assertFalse(S.RegularObject::class.isInner)
assertFalse(S.NonCompanionObject::class.isCompanion) assertFalse(S.RegularObject::class.isCompanion)
assertFalse(S.NonCompanionObject::class.isFun) assertFalse(S.RegularObject::class.isFun)
assertFalse(S.NonCompanionObject::class.isValue) assertFalse(S.RegularObject::class.isValue)
assertFalse(S.FunInterface::class.isSealed) assertFalse(S.FunInterface::class.isSealed)
assertFalse(S.FunInterface::class.isData) assertFalse(S.FunInterface::class.isData)
@@ -104,9 +104,10 @@ public actual interface KClass<T : Any> : KDeclarationContainer, KAnnotatedEleme
public val isSealed: Boolean public val isSealed: Boolean
/** /**
* `true` if this class is a data class. * `true` if this class or object has the `data` keyword.
* See the [Kotlin language documentation](https://kotlinlang.org/docs/reference/data-classes.html) * For more information, see [data class](https://kotlinlang.org/docs/reference/data-classes.html) and
* for more information. * [data object](https://kotlinlang.org/docs/object-declarations.html#data-objects)
* in the Kotlin language documentation.
*/ */
@SinceKotlin("1.1") @SinceKotlin("1.1")
public val isData: Boolean public val isData: Boolean