From 010e530ac4b2ca56f3a3df46a9eedc15fd5fc1d5 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 10 Jul 2020 21:21:31 +0300 Subject: [PATCH] Make common KClass extend common KClassifier It already does that in all platforms. Add KClass common API test. --- libraries/stdlib/src/kotlin/reflect/KClass.kt | 4 +- .../stdlib/test/reflection/KClassTest.kt | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 libraries/stdlib/test/reflection/KClassTest.kt diff --git a/libraries/stdlib/src/kotlin/reflect/KClass.kt b/libraries/stdlib/src/kotlin/reflect/KClass.kt index 2d8ee2ed2d7..f675514cffd 100644 --- a/libraries/stdlib/src/kotlin/reflect/KClass.kt +++ b/libraries/stdlib/src/kotlin/reflect/KClass.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -13,7 +13,7 @@ package kotlin.reflect * * @param T the type of the class. */ -public expect interface KClass { +public expect interface KClass : KClassifier { /** * The simple name of the class as it was declared in the source code, * or `null` if the class has no name (if, for example, it is a class of an anonymous object). diff --git a/libraries/stdlib/test/reflection/KClassTest.kt b/libraries/stdlib/test/reflection/KClassTest.kt new file mode 100644 index 00000000000..f99338bd273 --- /dev/null +++ b/libraries/stdlib/test/reflection/KClassTest.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.reflection + +import test.* +import kotlin.reflect.* +import kotlin.test.* + +class KClassTest { + + @Test + fun className() { + assertEquals("KClassTest", KClassTest::class.simpleName) +// assertEquals(null, object {}::class.simpleName) // doesn't work as documented in JDK < 9, see KT-23072 + } + + @Test + fun extendsKClassifier() { + assertStaticAndRuntimeTypeIs(KClassTest::class) + } + + @Test + fun isInstanceCastSafeCast() { + fun checkIsInstance(kclass: KClass, value: Any?, expectedResult: Boolean) { + if (expectedResult) { + assertTrue(kclass.isInstance(value)) + assertSame(value, kclass.safeCast(value)) + assertSame(value, kclass.cast(value)) + } else { + assertFalse(kclass.isInstance(value)) + assertNull(kclass.safeCast(value)) + assertFailsWith { kclass.cast(value) } + } + } + + val numberClass = Number::class + checkIsInstance(numberClass, 1, true) + checkIsInstance(numberClass, 1.0, true) + checkIsInstance(numberClass, null, false) + checkIsInstance(numberClass, "42", false) + } +}