Introduce KClass-based cache for KPackageFragment

* It is a heavy-weight object that is hard to compute
* It is being constructed each type _cached_ method ref is used in equals/hashCode
* Module name is deliberately ignored, corresponding doc is added where appropriate 

#KT-48136

Merge-request: KT-MR-6817
Merged-by: Vsevolod Tolstopyatov <qwwdfsad@gmail.com>
This commit is contained in:
Vsevolod Tolstopyatov
2022-08-08 15:57:56 +00:00
committed by Space
parent 28310eb970
commit c6cbab43f7
8 changed files with 63 additions and 6 deletions
@@ -0,0 +1,13 @@
// TARGET_BACKEND: JVM_IR
// FULL_JDK
// WITH_REFLECT
import kotlin.jvm.internal.*
class A
fun box(): String {
val pckg = Reflection.getOrCreateKotlinPackage(A::class.java)
System.gc()
val pckg2 = Reflection.getOrCreateKotlinPackage(A::class.java)
if (pckg === pckg2) return "OK"
return "Fail"
}
@@ -0,0 +1,13 @@
// TARGET_BACKEND: JVM_IR
// FULL_JDK
// WITH_REFLECT
class A
fun box(): String {
val clz = A::class
System.gc()
val clz2 = A::class
if (clz === clz2) return "OK"
return "Fail"
}