KT-13825: write simple name of class to constructor.$metadata$.simpleName.
This commit is contained in:
committed by
Alexey Andreev
parent
bd95d2ef4c
commit
ea18ea0b8c
@@ -6065,6 +6065,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/reflection/light/jsClassOnReifiedType.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/reflection/light/jsClassOnReifiedType.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jsClassSimpleName.kt")
|
||||||
|
public void testJsClassSimpleName() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/reflection/light/jsClassSimpleName.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
class undefined
|
||||||
|
|
||||||
|
class Outer {
|
||||||
|
class Nested
|
||||||
|
|
||||||
|
inner class Inner
|
||||||
|
}
|
||||||
|
|
||||||
|
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.name)
|
||||||
|
assertEquals("undefined", undefined().jsClass.simpleName)
|
||||||
|
assertEquals("Nested", Outer.Nested().jsClass.simpleName)
|
||||||
|
assertEquals("Inner", Outer().Inner().jsClass.simpleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testWithClassReference() {
|
||||||
|
assertEquals("A", jsClass<A>().simpleName)
|
||||||
|
assertEquals("B", jsClass<B>().simpleName)
|
||||||
|
assertEquals("O", jsClass<O>().simpleName)
|
||||||
|
assertEquals("I", jsClass<I>().simpleName)
|
||||||
|
assertEquals("E", jsClass<E>().simpleName)
|
||||||
|
assertEquals("undefined", jsClass<undefined>().simpleName)
|
||||||
|
assertEquals("Nested", jsClass<Outer.Nested>().simpleName)
|
||||||
|
assertEquals("Inner", jsClass<Outer.Inner>().simpleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
val JsClass<*>.simpleName: String
|
||||||
|
get() {
|
||||||
|
val dynClass: dynamic = this
|
||||||
|
return dynClass.`$metadata$`.simpleName as? String ?: ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
testWithInstance()
|
||||||
|
testWithClassReference()
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+4
-1
@@ -225,6 +225,7 @@
|
|||||||
Kotlin.createClass = function (basesFun, constructor, properties, staticProperties) {
|
Kotlin.createClass = function (basesFun, constructor, properties, staticProperties) {
|
||||||
function $o() {
|
function $o() {
|
||||||
var klass = Kotlin.createClassNow(getBases(basesFun), constructor, properties, staticProperties);
|
var klass = Kotlin.createClassNow(getBases(basesFun), constructor, properties, staticProperties);
|
||||||
|
klass.$metadata$.simpleName = $o.className;
|
||||||
Object.defineProperty(this, $o.className, {value: klass});
|
Object.defineProperty(this, $o.className, {value: klass});
|
||||||
if (staticProperties && staticProperties.object_initializer$) {
|
if (staticProperties && staticProperties.object_initializer$) {
|
||||||
staticProperties.object_initializer$(klass);
|
staticProperties.object_initializer$(klass);
|
||||||
@@ -265,7 +266,7 @@
|
|||||||
else {
|
else {
|
||||||
entryObject = entryFactory();
|
entryObject = entryFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
entryObject.ordinal$ = i++;
|
entryObject.ordinal$ = i++;
|
||||||
entryObject.name$ = entryName;
|
entryObject.name$ = entryName;
|
||||||
cls[entryName] = entryObject;
|
cls[entryName] = entryObject;
|
||||||
@@ -302,6 +303,7 @@
|
|||||||
function $o() {
|
function $o() {
|
||||||
var klass = Kotlin.createTraitNow(getBases(basesFun), properties, staticProperties);
|
var klass = Kotlin.createTraitNow(getBases(basesFun), properties, staticProperties);
|
||||||
klass.name = $o.className;
|
klass.name = $o.className;
|
||||||
|
klass.$metadata$.simpleName = $o.className;
|
||||||
Object.defineProperty(this, $o.className, {value: klass});
|
Object.defineProperty(this, $o.className, {value: klass});
|
||||||
return klass;
|
return klass;
|
||||||
}
|
}
|
||||||
@@ -325,6 +327,7 @@
|
|||||||
var obj = Object.create(klass.prototype);
|
var obj = Object.create(klass.prototype);
|
||||||
var metadata = klass.$metadata$;
|
var metadata = klass.$metadata$;
|
||||||
metadata.type = Kotlin.TYPE.OBJECT;
|
metadata.type = Kotlin.TYPE.OBJECT;
|
||||||
|
metadata.simpleName = $o.className;
|
||||||
Object.defineProperty(this, $o.className, {value: obj});
|
Object.defineProperty(this, $o.className, {value: obj});
|
||||||
defineNestedTypes(obj, klass.$metadata$.types);
|
defineNestedTypes(obj, klass.$metadata$.types);
|
||||||
copyProperties(obj, metadata.staticMembers);
|
copyProperties(obj, metadata.staticMembers);
|
||||||
|
|||||||
Reference in New Issue
Block a user