From f958483e5637f388c0bde76458be14d650b72220 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 26 Jul 2016 18:41:41 +0300 Subject: [PATCH] Reflection: deprecate KClass.defaultType Its semantics were unclear and its javaType was implemented incorrectly (it should have returned ParameterizedType with star projections for generic type) --- .../box/reflection/classes/defaultType.kt | 27 ------------------- .../codegen/BlackBoxCodegenTestGenerated.java | 6 ----- .../src/kotlin/reflect/KClasses.kt | 3 +++ 3 files changed, 3 insertions(+), 33 deletions(-) delete mode 100644 compiler/testData/codegen/box/reflection/classes/defaultType.kt diff --git a/compiler/testData/codegen/box/reflection/classes/defaultType.kt b/compiler/testData/codegen/box/reflection/classes/defaultType.kt deleted file mode 100644 index 3b2eb42c2cb..00000000000 --- a/compiler/testData/codegen/box/reflection/classes/defaultType.kt +++ /dev/null @@ -1,27 +0,0 @@ -// WITH_REFLECT - -import kotlin.reflect.defaultType -import kotlin.reflect.jvm.javaType -import kotlin.test.assertEquals -import kotlin.test.assertNotEquals - -class Simple -class Generic { - fun thiz() = this -} - -fun simple() = Simple() -fun genericIntString() = Generic() - -fun box(): String { - assertEquals(Simple::class.java, Simple::class.defaultType.javaType) - assertEquals(::simple.returnType, Simple::class.defaultType) - - assertEquals(Generic::class.java, Generic::class.defaultType.javaType) - assertEquals(Generic<*, *>::thiz.returnType, Generic::class.defaultType) - - // Generic != Generic - assertNotEquals(::genericIntString.returnType, Generic::class.defaultType) - - return "OK" -} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index feabd24c36f..992e1d3c689 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11892,12 +11892,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } - @TestMetadata("defaultType.kt") - public void testDefaultType() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/reflection/classes/defaultType.kt"); - doTest(fileName); - } - @TestMetadata("jvmName.kt") public void testJvmName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/reflection/classes/jvmName.kt"); diff --git a/core/reflection.jvm/src/kotlin/reflect/KClasses.kt b/core/reflection.jvm/src/kotlin/reflect/KClasses.kt index 53fac410b1b..abeaa27b671 100644 --- a/core/reflection.jvm/src/kotlin/reflect/KClasses.kt +++ b/core/reflection.jvm/src/kotlin/reflect/KClasses.kt @@ -54,6 +54,9 @@ val KClass<*>.companionObjectInstance: Any? * Returns a type corresponding to the given class with type parameters of that class substituted as the corresponding arguments. * For example, for class `MyMap` [defaultType] would return the type `MyMap`. */ +@Deprecated("This function creates a type which rarely makes sense for generic classes. " + + "For example, such type can only be used in signatures of members of that class. " + + "Use starProjectedType or createType() for clearer semantics.") val KClass<*>.defaultType: KType get() = KTypeImpl((this as KClassImpl<*>).descriptor.defaultType) { jClass }