diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsBoxTestGenerated.java index 44056278440..6ab24e02dda 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsBoxTestGenerated.java @@ -10208,12 +10208,24 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest { runTest("js/js.translator/testData/box/reflection/kClass.kt"); } + @Test + @TestMetadata("kClassCompanion.kt") + public void testKClassCompanion() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassCompanion.kt"); + } + @Test @TestMetadata("kClassIsInstance.kt") public void testKClassIsInstance() throws Exception { runTest("js/js.translator/testData/box/reflection/kClassIsInstance.kt"); } + @Test + @TestMetadata("kClassLambda.kt") + public void testKClassLambda() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassLambda.kt"); + } + @Test @TestMetadata("kClassOnReifiedType.kt") public void testKClassOnReifiedType() throws Exception { @@ -10244,6 +10256,12 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest { runTest("js/js.translator/testData/box/reflection/kClassSimpleName.kt"); } + @Test + @TestMetadata("kClassSuspendFunction.kt") + public void testKClassSuspendFunction() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassSuspendFunction.kt"); + } + @Test @TestMetadata("kClassToAndFromJsClass.kt") public void testKClassToAndFromJsClass() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6BoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6BoxTestGenerated.java index 19e9988a0e5..a4fcb18c72e 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6BoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6BoxTestGenerated.java @@ -10314,12 +10314,24 @@ public class FirJsES6BoxTestGenerated extends AbstractFirJsES6BoxTest { runTest("js/js.translator/testData/box/reflection/kClass.kt"); } + @Test + @TestMetadata("kClassCompanion.kt") + public void testKClassCompanion() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassCompanion.kt"); + } + @Test @TestMetadata("kClassIsInstance.kt") public void testKClassIsInstance() throws Exception { runTest("js/js.translator/testData/box/reflection/kClassIsInstance.kt"); } + @Test + @TestMetadata("kClassLambda.kt") + public void testKClassLambda() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassLambda.kt"); + } + @Test @TestMetadata("kClassOnReifiedType.kt") public void testKClassOnReifiedType() throws Exception { @@ -10350,6 +10362,12 @@ public class FirJsES6BoxTestGenerated extends AbstractFirJsES6BoxTest { runTest("js/js.translator/testData/box/reflection/kClassSimpleName.kt"); } + @Test + @TestMetadata("kClassSuspendFunction.kt") + public void testKClassSuspendFunction() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassSuspendFunction.kt"); + } + @Test @TestMetadata("kClassToAndFromJsClass.kt") public void testKClassToAndFromJsClass() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsES6TestGenerated.java index 8b9998e17bb..1774e2597a3 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsES6TestGenerated.java @@ -10314,12 +10314,24 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test { runTest("js/js.translator/testData/box/reflection/kClass.kt"); } + @Test + @TestMetadata("kClassCompanion.kt") + public void testKClassCompanion() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassCompanion.kt"); + } + @Test @TestMetadata("kClassIsInstance.kt") public void testKClassIsInstance() throws Exception { runTest("js/js.translator/testData/box/reflection/kClassIsInstance.kt"); } + @Test + @TestMetadata("kClassLambda.kt") + public void testKClassLambda() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassLambda.kt"); + } + @Test @TestMetadata("kClassOnReifiedType.kt") public void testKClassOnReifiedType() throws Exception { @@ -10350,6 +10362,12 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test { runTest("js/js.translator/testData/box/reflection/kClassSimpleName.kt"); } + @Test + @TestMetadata("kClassSuspendFunction.kt") + public void testKClassSuspendFunction() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassSuspendFunction.kt"); + } + @Test @TestMetadata("kClassToAndFromJsClass.kt") public void testKClassToAndFromJsClass() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java index dfac6509e97..e78f86edc6a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java @@ -10208,12 +10208,24 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/reflection/kClass.kt"); } + @Test + @TestMetadata("kClassCompanion.kt") + public void testKClassCompanion() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassCompanion.kt"); + } + @Test @TestMetadata("kClassIsInstance.kt") public void testKClassIsInstance() throws Exception { runTest("js/js.translator/testData/box/reflection/kClassIsInstance.kt"); } + @Test + @TestMetadata("kClassLambda.kt") + public void testKClassLambda() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassLambda.kt"); + } + @Test @TestMetadata("kClassOnReifiedType.kt") public void testKClassOnReifiedType() throws Exception { @@ -10244,6 +10256,12 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/reflection/kClassSimpleName.kt"); } + @Test + @TestMetadata("kClassSuspendFunction.kt") + public void testKClassSuspendFunction() throws Exception { + runTest("js/js.translator/testData/box/reflection/kClassSuspendFunction.kt"); + } + @Test @TestMetadata("kClassToAndFromJsClass.kt") public void testKClassToAndFromJsClass() throws Exception { diff --git a/js/js.translator/testData/box/reflection/kClassCompanion.kt b/js/js.translator/testData/box/reflection/kClassCompanion.kt new file mode 100644 index 00000000000..c3e694d4c33 --- /dev/null +++ b/js/js.translator/testData/box/reflection/kClassCompanion.kt @@ -0,0 +1,33 @@ +class A { + companion object { + fun getSimpleName() = this::class.simpleName + } +} + +class B { + companion object MyCompanion { + fun getSimpleName() = this::class.simpleName + } +} + +fun getSimpleName(x: Any) = x::class.simpleName +inline fun getSimpleNameReified(x: T) = T::class.simpleName + +fun box(): String { + assertEquals("Companion", A.getSimpleName()) + assertEquals("MyCompanion", B.getSimpleName()) + + assertEquals("Companion", A.Companion.getSimpleName()) + assertEquals("MyCompanion", B.MyCompanion.getSimpleName()) + + assertEquals("Companion", getSimpleName(A.Companion)) + assertEquals("MyCompanion", getSimpleName(B.MyCompanion)) + + assertEquals("Companion", getSimpleNameReified(A.Companion)) + assertEquals("MyCompanion", getSimpleNameReified(B.MyCompanion)) + + assertEquals("Companion", A.Companion::class.simpleName) + assertEquals("MyCompanion", B.MyCompanion::class.simpleName) + + return "OK" +} diff --git a/js/js.translator/testData/box/reflection/kClassLambda.kt b/js/js.translator/testData/box/reflection/kClassLambda.kt new file mode 100644 index 00000000000..b472f755147 --- /dev/null +++ b/js/js.translator/testData/box/reflection/kClassLambda.kt @@ -0,0 +1,81 @@ +import kotlin.coroutines.Continuation +import kotlin.coroutines.EmptyCoroutineContext +import kotlin.coroutines.startCoroutine + +class CoroutineStub { + companion object { + fun evaluate(c: suspend () -> Unit) { + c.startCoroutine(object : Continuation { + override val context = EmptyCoroutineContext + override fun resumeWith(result: Result) { + result.getOrThrow() + } + }) + } + } +} + +fun testLabmdaParam(x: () -> Unit) { + assertEquals(x::class.simpleName, "Function0") +} + +fun testSuspendLambaParam(x: suspend () -> Unit) { + assertEquals(x::class.simpleName, "Function1") +} + +inline fun testLabmdaParamGeneric(x: T) { + assertEquals(T::class.simpleName, "Function0") +} + +inline fun testSuspendLambaParamGeneric(x: T) { + assertEquals(T::class.simpleName, "SuspendFunction0") +} + +fun box(): String { + testLabmdaParam({}) + testSuspendLambaParam(suspend {}) + testLabmdaParamGeneric({}) + testSuspendLambaParamGeneric(suspend {}) + + val sx = suspend { + val sy = suspend { + val sz = suspend { + val a = { + val b = { + val c = { + CoroutineStub.evaluate { + val x = suspend { + val y = suspend { + val z = suspend { } + assertEquals(z::class.simpleName, "Function1") + + assertEquals((suspend { })::class.simpleName, "Function1") + assertEquals(({ })::class.simpleName, "Function0") + } + y() + assertEquals(y::class.simpleName, "Function1") + } + x() + assertEquals(x::class.simpleName, "Function1") + } + } + c() + assertEquals(c::class.simpleName, "Function0") + } + b() + assertEquals(b::class.simpleName, "Function0") + } + a() + assertEquals(a::class.simpleName, "Function0") + } + sz() + assertEquals(sz::class.simpleName, "Function1") + } + sy() + assertEquals(sy::class.simpleName, "Function1") + } + assertEquals(sx::class.simpleName, "Function1") + CoroutineStub.evaluate(sx) + + return "OK" +} diff --git a/js/js.translator/testData/box/reflection/kClassSuspendFunction.kt b/js/js.translator/testData/box/reflection/kClassSuspendFunction.kt new file mode 100644 index 00000000000..f466049b095 --- /dev/null +++ b/js/js.translator/testData/box/reflection/kClassSuspendFunction.kt @@ -0,0 +1,31 @@ +suspend fun testB(x: Int) {} + +suspend fun testA() { + testB(123) + testB(456) +} + +class A { + suspend fun testC() { + testA() + } +} + +fun getSimpleName0(x: suspend () -> Unit) = x::class.simpleName +fun getSimpleName1(x: suspend (x: Int) -> Unit) = x::class.simpleName +inline fun getSimpleNameReified(x: T) = T::class.simpleName + +fun box(): String { + assertEquals("Function1", getSimpleName0(::testA)) + assertEquals("Function2", getSimpleName1(::testB)) + assertEquals("Function1", getSimpleName0(A()::testC)) + + assertEquals("KSuspendFunction0", getSimpleNameReified(::testA)) + assertEquals("KSuspendFunction1", getSimpleNameReified(::testB)) + assertEquals("KSuspendFunction0", getSimpleNameReified(A()::testC)) + + assertEquals("Function1", (::testA)::class.simpleName) + assertEquals("Function2", (::testB)::class.simpleName) + assertEquals("Function1", (A()::testC)::class.simpleName) + return "OK" +}