diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index a038be1d7ab..12f017e1dbe 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -6884,31 +6884,6 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { runTest("js/js.translator/testData/box/reflection/findAssociatedObject_oldBE.kt"); } - @TestMetadata("jsClass.kt") - public void testJsClass() throws Exception { - runTest("js/js.translator/testData/box/reflection/jsClass.kt"); - } - - @TestMetadata("jsClassName.kt") - public void testJsClassName() throws Exception { - runTest("js/js.translator/testData/box/reflection/jsClassName.kt"); - } - - @TestMetadata("jsClassOnReifiedType.kt") - public void testJsClassOnReifiedType() throws Exception { - runTest("js/js.translator/testData/box/reflection/jsClassOnReifiedType.kt"); - } - - @TestMetadata("jsClassOnReifiedTypeInLambda.kt") - public void testJsClassOnReifiedTypeInLambda() throws Exception { - runTest("js/js.translator/testData/box/reflection/jsClassOnReifiedTypeInLambda.kt"); - } - - @TestMetadata("jsClassSimpleName.kt") - public void testJsClassSimpleName() throws Exception { - runTest("js/js.translator/testData/box/reflection/jsClassSimpleName.kt"); - } - @TestMetadata("kClass.kt") public void testKClass() throws Exception { runTest("js/js.translator/testData/box/reflection/kClass.kt"); diff --git a/js/js.translator/testData/box/reflection/jsClass.kt b/js/js.translator/testData/box/reflection/jsClass.kt deleted file mode 100644 index 6baed2a73c4..00000000000 --- a/js/js.translator/testData/box/reflection/jsClass.kt +++ /dev/null @@ -1,18 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: JS_IR -// DONT_TARGET_EXACT_BACKEND: JS_IR_ES6 -// EXPECTED_REACHABLE_NODES: 1322 -package foo - -@Suppress("DEPRECATION_ERROR") -fun box(): String { - check(jsClass(), A().jsClass) - check(jsClass(), B().jsClass) - check(jsClass(), O.jsClass) - assertNotEquals(null, jsClass()) - check(jsClass(), E.X.jsClass) - check(jsClass(), E.Y.jsClass, shouldBeEqual = false) -// TODO uncomment after KT-13338 is fixed -// check(jsClass(), E.Z.jsClass) - - return "OK" -} diff --git a/js/js.translator/testData/box/reflection/jsClassName.kt b/js/js.translator/testData/box/reflection/jsClassName.kt deleted file mode 100644 index bff34b766b7..00000000000 --- a/js/js.translator/testData/box/reflection/jsClassName.kt +++ /dev/null @@ -1,33 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: JS_IR -// DONT_TARGET_EXACT_BACKEND: JS_IR_ES6 -// EXPECTED_REACHABLE_NODES: 1328 -package foo - -@Suppress("DEPRECATION_ERROR") -fun testWithInstance() { - assertEquals("A", A().jsClass.name) - assertEquals("B", B().jsClass.name) - assertEquals("O", O.jsClass.name) - assertEquals("E", E.X.jsClass.name) - assertEquals("E\$Y", E.Y.jsClass.name) -// TODO uncomment after KT-13338 is fixed -// assertEquals("E", E.Z.jsClass.name) - assertEquals("R", R().jsClass.name) -} - -@Suppress("DEPRECATION_ERROR") -fun testWithClassReference() { - assertEquals("A", jsClass().name) - assertEquals("B", jsClass().name) - assertEquals("O", jsClass().name) - assertEquals("I", jsClass().name) - assertEquals("E", jsClass().name) - assertEquals("R", jsClass().name) -} - -fun box(): String { - testWithInstance() - testWithClassReference() - - return "OK" -} diff --git a/js/js.translator/testData/box/reflection/jsClassOnReifiedType.kt b/js/js.translator/testData/box/reflection/jsClassOnReifiedType.kt deleted file mode 100644 index b164ded1d62..00000000000 --- a/js/js.translator/testData/box/reflection/jsClassOnReifiedType.kt +++ /dev/null @@ -1,20 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: JS_IR -// DONT_TARGET_EXACT_BACKEND: JS_IR_ES6 -// EXPECTED_REACHABLE_NODES: 1318 -package foo - -@Suppress("DEPRECATION_ERROR") -inline fun foo(): JsClass { - val T = 1 - return jsClass() -} - -@Suppress("DEPRECATION_ERROR") -fun box(): String { - check(jsClass(), foo()) - check(jsClass(), foo()) - check(jsClass(), foo()) - check(jsClass(), foo()) - - return "OK" -} diff --git a/js/js.translator/testData/box/reflection/jsClassOnReifiedTypeInLambda.kt b/js/js.translator/testData/box/reflection/jsClassOnReifiedTypeInLambda.kt deleted file mode 100644 index 5118f0b54de..00000000000 --- a/js/js.translator/testData/box/reflection/jsClassOnReifiedTypeInLambda.kt +++ /dev/null @@ -1,20 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: JS_IR -// DONT_TARGET_EXACT_BACKEND: JS_IR_ES6 -// EXPECTED_REACHABLE_NODES: 1320 -package foo - -@Suppress("DEPRECATION_ERROR") -inline fun foo(): () -> JsClass { - val T = 1 - return { jsClass() } -} - -@Suppress("DEPRECATION_ERROR") -fun box(): String { - check(jsClass(), foo()()) - check(jsClass(), foo()()) - check(jsClass(), foo()()) - check(jsClass(), foo()()) - - return "OK" -} diff --git a/js/js.translator/testData/box/reflection/jsClassSimpleName.kt b/js/js.translator/testData/box/reflection/jsClassSimpleName.kt deleted file mode 100644 index e721048977a..00000000000 --- a/js/js.translator/testData/box/reflection/jsClassSimpleName.kt +++ /dev/null @@ -1,51 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: JS_IR -// DONT_TARGET_EXACT_BACKEND: JS_IR_ES6 -// EXPECTED_REACHABLE_NODES: 1331 -package foo - -class undefined - -class Outer { - class Nested - - inner class Inner -} - -@Suppress("DEPRECATION_ERROR") -fun testWithInstance() { - assertEquals("A", A().jsClass.simpleName) - assertEquals("B", B().jsClass.simpleName) - assertEquals("O", O.jsClass.simpleName) - assertEquals("E", E.X.jsClass.simpleName) - assertEquals("Y", E.Y.jsClass.simpleName) -// TODO uncomment after KT-13338 is fixed -// assertEquals("E", E.Z.jsClass.simpleName) - assertEquals("undefined", undefined().jsClass.simpleName) - assertEquals("Nested", Outer.Nested().jsClass.simpleName) - assertEquals("Inner", Outer().Inner().jsClass.simpleName) -} - -@Suppress("DEPRECATION_ERROR") -fun testWithClassReference() { - assertEquals("A", jsClass().simpleName) - assertEquals("B", jsClass().simpleName) - assertEquals("O", jsClass().simpleName) - assertEquals("I", jsClass().simpleName) - assertEquals("E", jsClass().simpleName) - assertEquals("undefined", jsClass().simpleName) - assertEquals("Nested", jsClass().simpleName) - assertEquals("Inner", jsClass().simpleName) -} - -val JsClass<*>.simpleName: String - get() { - val dynClass: dynamic = this - return dynClass.`$metadata$`.simpleName as? String ?: "" - } - -fun box(): String { - testWithInstance() - testWithClassReference() - - return "OK" -} diff --git a/libraries/stdlib/js-ir/src/kotlin/jsClass_js-ir.kt b/libraries/stdlib/js-ir/src/kotlin/jsClass_js-ir.kt new file mode 100644 index 00000000000..1524617027c --- /dev/null +++ b/libraries/stdlib/js-ir/src/kotlin/jsClass_js-ir.kt @@ -0,0 +1,8 @@ +/* + * 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 kotlin.js + +internal external fun jsClass(): JsClass diff --git a/libraries/stdlib/js/src/kotlin/reflect/JsClass.kt b/libraries/stdlib/js/src/kotlin/reflect/JsClass.kt index c063f74db70..8dadbfe6817 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/JsClass.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/JsClass.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. */ @@ -19,18 +19,6 @@ external interface JsClass { val name: String } -@Deprecated("Use class literal and extension property `js` instead.", replaceWith = ReplaceWith("T::class.js"), level = DeprecationLevel.ERROR) -external fun jsClass(): JsClass - -@Deprecated("Use class literal and extension property `js` instead.", replaceWith = ReplaceWith("this::class.js"), level = DeprecationLevel.ERROR) -val T.jsClass: JsClass - get() = when (jsTypeOf(this)) { - "string" -> js("String") - "number" -> js("Number") - "boolean" -> js("Boolean") - else -> js("Object").getPrototypeOf(this).constructor - } - /** * Obtains a constructor reference for the given `KClass`. */