JS backend: basic support for class literals.

Added:
* the ability to get KClass using class literals (`::class`);
* the ability to get KClass from JsClass and vice versa;
* the ability to get simpleName.

 #KT-13345 Fixed
This commit is contained in:
Zalim Bashorov
2016-10-04 17:39:37 +03:00
parent ace10f46b2
commit 3c520a3ce3
14 changed files with 310 additions and 21 deletions
@@ -0,0 +1,40 @@
package foo
class undefined
class Outer {
class Nested
inner class Inner
}
fun testWithInstance() {
assertEquals("A", A()::class.simpleName)
assertEquals("B", B()::class.simpleName)
assertEquals("O", (O)::class.simpleName)
assertEquals("E", E.X::class.simpleName)
assertEquals("Y", E.Y::class.simpleName)
// TODO uncomment after KT-13338 is fixed
// assertEquals("E", E.Z::class.simpleName)
assertEquals("undefined", undefined()::class.simpleName)
assertEquals("Nested", Outer.Nested()::class.simpleName)
assertEquals("Inner", Outer().Inner()::class.simpleName)
}
fun testWithClassReference() {
assertEquals("A", A::class.simpleName)
assertEquals("B", B::class.simpleName)
assertEquals("O", O::class.simpleName)
assertEquals("I", I::class.simpleName)
assertEquals("E", E::class.simpleName)
assertEquals("undefined", foo.undefined::class.simpleName)
assertEquals("Nested", Outer.Nested::class.simpleName)
assertEquals("Inner", Outer.Inner::class.simpleName)
}
fun box(): String {
testWithInstance()
testWithClassReference()
return "OK"
}