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,29 @@
package foo
import kotlin.reflect.KClass
fun check(k: KClass<*>, j: JsClass<*>) {
assertNotEquals(null, k)
assertNotEquals(null, j)
assertEquals(k.js, j)
assertEquals(k, j.kotlin)
assertEquals(j, j.kotlin.js)
assertEquals(k, k.js.kotlin)
}
fun jsClassbyName(name: String) = js("JS_TESTS").foo[name]
fun box(): String {
check(A::class, jsClassbyName("A"))
check(B::class, jsClassbyName("B"))
check(O::class, jsClassbyName("O").constructor)
check(I::class, jsClassbyName("I"))
check(E::class, jsClassbyName("E"))
check(E.X::class, jsClassbyName("E").X.constructor)
check(E.Y::class, jsClassbyName("E").Y.constructor)
// TODO uncomment after KT-13338 is fixed
// check(E.Z::class, jsClassbyName("E").Z.constructor)
return "OK"
}