mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-09 00:21:47 +00:00
The main problem here is that moduleName that is being passed to KPackageImpl is useless: as can be seen in ClosureCodegen.generateCallableReferenceDeclarationContainer, the name of the current module is always written to the class file for a callable reference, not the name of the module of the referenced declaration. This resulted in reflection not loading the correct .kotlin_module file and subsequently not finding the required file facade for a top-level function. The commit does not fix the issue with the incorrect module name written in the back-end, but workarounds it. It turns out, reflection can figure out the name of the module of the referenced declaration itself by parsing the header from the given java.lang.Class object for a single-file/multi-file package facade and extract the package_module_name protobuf extension. Similar code was already there in Member.getKPackage() in ReflectJvmMapping.kt but it did not support multi-file classes, of which there are a lot in the standard library; this is now supported #KT-12630 Fixed #KT-14731 Fixed
14 lines
306 B
Kotlin
Vendored
14 lines
306 B
Kotlin
Vendored
// KT-12630 KotlinReflectionInternalError on referencing some functions from stdlib
|
|
|
|
// IGNORE_BACKEND: JS
|
|
// WITH_REFLECT
|
|
|
|
import kotlin.test.*
|
|
|
|
fun box(): String {
|
|
val lazyOf: (String) -> Lazy<String> = ::lazyOf
|
|
assertEquals("fun lazyOf(T): kotlin.Lazy<T>", lazyOf.toString())
|
|
|
|
return "OK"
|
|
}
|