Make common KClass extend common KClassifier
It already does that in all platforms. Add KClass common API test.
This commit is contained in:
@@ -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.
|
* 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.
|
* @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,
|
* 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).
|
* or `null` if the class has no name (if, for example, it is a class of an anonymous object).
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user