diff --git a/compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt new file mode 100644 index 00000000000..93a1478bb9b --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt @@ -0,0 +1,67 @@ +// WITH_REFLECT +// TARGET_BACKEND: JVM +// IGNORE_BACKEND: JVM_IR + +package root + +import kotlin.reflect.KClass + +inline class IcInt(val x: Int) +inline class IcLong(val l: Long) +inline class IcAny(val a: Any?) +inline class IcOverIc(val o: IcLong) + +fun check(c: KClass<*>, s: String) { + if (c.toString() != s) error("Fail, expected: $s, actual: $c") +} + +fun check(actual: String?, expected: String) { + if (actual != expected) error("Fail, expected: $expected, actual: $actual") +} + +inline fun reifiedCheck(asString: String, simpleName: String) { + check(T::class, asString) + check(T::class.simpleName, simpleName) +} + +fun box(): String { + val i = IcInt(0) + val l = IcLong(0) + val a = IcAny("foo") + val o = IcOverIc(IcLong(0)) + + check(i::class, "class root.IcInt") + check(l::class, "class root.IcLong") + check(a::class, "class root.IcAny") + check(o::class, "class root.IcOverIc") + check(1u::class, "class kotlin.UInt") + + check(i::class.simpleName, "IcInt") + check(l::class.simpleName, "IcLong") + check(a::class.simpleName, "IcAny") + check(o::class.simpleName, "IcOverIc") + check(1u::class.simpleName, "UInt") + + reifiedCheck("class root.IcInt", "IcInt") + reifiedCheck("class root.IcLong", "IcLong") + reifiedCheck("class root.IcAny", "IcAny") + reifiedCheck("class root.IcOverIc", "IcOverIc") + reifiedCheck("class kotlin.UInt", "UInt") + + val arrI = arrayOf(i) + check(arrI[0]::class, "class root.IcInt") + + val arrL = arrayOf(l) + check(arrL[0]::class, "class root.IcLong") + + val arrA = arrayOf(a) + check(arrA[0]::class, "class root.IcAny") + + val arrO = arrayOf(o) + check(arrO[0]::class, "class root.IcOverIc") + + val arrU = arrayOf(1u) + check(arrU[0]::class, "class kotlin.UInt") + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/inlineClasses/javaClassIntrinsicOnInlineClasses.kt b/compiler/testData/codegen/box/inlineClasses/javaClassIntrinsicOnInlineClasses.kt index e245d514c97..a5517dddb74 100644 --- a/compiler/testData/codegen/box/inlineClasses/javaClassIntrinsicOnInlineClasses.kt +++ b/compiler/testData/codegen/box/inlineClasses/javaClassIntrinsicOnInlineClasses.kt @@ -13,6 +13,10 @@ fun check(c: Class<*>, s: String) { if (c.toString() != s) error("Fail, expected: $s, actual: $c") } +inline fun reifiedCheck(asString: String) { + check(T::class.java, asString) +} + fun box(): String { val i = IcInt(0) val l = IcLong(0) @@ -31,6 +35,12 @@ fun box(): String { check(o::class.java, "class root.IcOverIc") check(1u::class.java, "class kotlin.UInt") + reifiedCheck("class root.IcInt") + reifiedCheck("class root.IcLong") + reifiedCheck("class root.IcAny") + reifiedCheck("class root.IcOverIc") + reifiedCheck("class kotlin.UInt") + val arrI = arrayOf(i) check(arrI[0].javaClass, "class root.IcInt") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 014e8b2514c..e06b89f77d8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11810,6 +11810,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/checkUnboxingResultFromTypeVariable.kt"); } + @TestMetadata("classLiteralOnInlineClass.kt") + public void testClassLiteralOnInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt"); + } + @TestMetadata("computablePropertyInsideInlineClass.kt") public void testComputablePropertyInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/computablePropertyInsideInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 8763929b4f3..dcd2ec038c6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11810,6 +11810,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/checkUnboxingResultFromTypeVariable.kt"); } + @TestMetadata("classLiteralOnInlineClass.kt") + public void testClassLiteralOnInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt"); + } + @TestMetadata("computablePropertyInsideInlineClass.kt") public void testComputablePropertyInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/computablePropertyInsideInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 0b10bc032e7..ddcf9464364 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11815,6 +11815,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/checkUnboxingResultFromTypeVariable.kt"); } + @TestMetadata("classLiteralOnInlineClass.kt") + public void testClassLiteralOnInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/classLiteralOnInlineClass.kt"); + } + @TestMetadata("computablePropertyInsideInlineClass.kt") public void testComputablePropertyInsideInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/computablePropertyInsideInlineClass.kt");