diff options
author | Ilya Gorbunov <ilya.gorbunov@jetbrains.com> | 2020-07-10 21:21:31 +0300 |
---|---|---|
committer | Ilya Gorbunov <ilya.gorbunov@jetbrains.com> | 2020-07-14 18:37:43 +0300 |
commit | 20674b13768b892dd1244618581f4d844d49e143 (patch) | |
tree | 179fb93bd2d7b1e2b3b6dd37668654739b6f060f | |
parent | f57adc266a061a4242784c19250b872a4b5d702e (diff) | |
download | kotlin-20674b13768b892dd1244618581f4d844d49e143.tar.gz |
Make common KClass extend common KClassifier
It already does that in all platforms.
Add KClass common API test.
(cherry picked from commit 010e530ac4b2ca56f3a3df46a9eedc15fd5fc1d5)
-rw-r--r-- | libraries/stdlib/src/kotlin/reflect/KClass.kt | 4 | ||||
-rw-r--r-- | libraries/stdlib/test/reflection/KClassTest.kt | 45 |
2 files changed, 47 insertions, 2 deletions
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<T : Any> { +public expect interface KClass<T : Any> : 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<KClassifier>(KClassTest::class) + } + + @Test + fun isInstanceCastSafeCast() { + fun <T : Any> checkIsInstance(kclass: KClass<T>, 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<ClassCastException> { kclass.cast(value) } + } + } + + val numberClass = Number::class + checkIsInstance(numberClass, 1, true) + checkIsInstance(numberClass, 1.0, true) + checkIsInstance(numberClass, null, false) + checkIsInstance(numberClass, "42", false) + } +} |