KJS: use cached KClass instead create new each time when getting it from JsClass
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package kotlin.js
|
package kotlin.js
|
||||||
|
|
||||||
|
import getKClass
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.reflect.js.internal.KClassImpl
|
import kotlin.reflect.js.internal.KClassImpl
|
||||||
|
|
||||||
@@ -36,4 +37,4 @@ val <T : Any> KClass<T>.js: JsClass<T>
|
|||||||
get() = (this as KClassImpl<T>).jClass
|
get() = (this as KClassImpl<T>).jClass
|
||||||
|
|
||||||
val <T : Any> JsClass<T>.kotlin: KClass<T>
|
val <T : Any> JsClass<T>.kotlin: KClass<T>
|
||||||
get() = KClassImpl<T>(this)
|
get() = getKClass(this)
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ import kotlin.reflect.KClass
|
|||||||
import kotlin.reflect.js.internal.KClassImpl
|
import kotlin.reflect.js.internal.KClassImpl
|
||||||
|
|
||||||
@JsName("getKClass")
|
@JsName("getKClass")
|
||||||
private fun <T : Any> getKClass(jClass: JsClass<T>): KClass<T> = getOrCreateKClass(jClass)
|
internal fun <T : Any> getKClass(jClass: JsClass<T>): KClass<T> = getOrCreateKClass(jClass)
|
||||||
@JsName("getKClassFromExpression")
|
@JsName("getKClassFromExpression")
|
||||||
private fun <T : Any> getKClassFromExpression(e: T): KClass<T> = getOrCreateKClass(e.jsClass)
|
internal fun <T : Any> getKClassFromExpression(e: T): KClass<T> = getOrCreateKClass(e.jsClass)
|
||||||
|
|
||||||
private fun <T : Any> getOrCreateKClass(jClass: JsClass<T>): KClass<T> {
|
private fun <T : Any> getOrCreateKClass(jClass: JsClass<T>): KClass<T> {
|
||||||
val metadata = jClass.asDynamic().`$metadata$`
|
val metadata = jClass.asDynamic().`$metadata$`
|
||||||
|
|||||||
@@ -18,6 +18,13 @@ fun <T> assertNotEquals(illegal: T, actual: T, message: String? = null) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <T> assertSame(expected: T, actual: T, message: String? = null) {
|
||||||
|
if (expected !== actual) {
|
||||||
|
val msg = if (message == null) "" else (" message = '" + message + "',")
|
||||||
|
fail("Expected same instances, got expected = '$expected', actual = '$actual'")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun <T> assertArrayEquals(expected: Array<out T>, actual: Array<out T>, message: String? = null) {
|
fun <T> assertArrayEquals(expected: Array<out T>, actual: Array<out T>, message: String? = null) {
|
||||||
if (!arraysEqual(expected, actual)) {
|
if (!arraysEqual(expected, actual)) {
|
||||||
val msg = if (message == null) "" else (" message = '" + message + "',")
|
val msg = if (message == null) "" else (" message = '" + message + "',")
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ fun check(k: KClass<*>, j: JsClass<*>) {
|
|||||||
assertNotEquals(null, k)
|
assertNotEquals(null, k)
|
||||||
assertNotEquals(null, j)
|
assertNotEquals(null, j)
|
||||||
|
|
||||||
assertEquals(k.js, j)
|
assertSame(k.js, j)
|
||||||
assertEquals(k, j.kotlin)
|
assertSame(k, j.kotlin)
|
||||||
assertEquals(j, j.kotlin.js)
|
assertSame(j, j.kotlin.js)
|
||||||
assertEquals(k, k.js.kotlin)
|
assertSame(k, k.js.kotlin)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun jsClassbyName(name: String) = js("JS_TESTS").foo[name]
|
fun jsClassbyName(name: String) = js("JS_TESTS").foo[name]
|
||||||
|
|||||||
Reference in New Issue
Block a user