mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-08 15:53:19 +00:00
When called by reflection the bit mask will be generated discounting dispatch/extension receivers. Make sure that the interpretation of the bit mask is consistent for direct and reflective calls. In addition, this also fixes the modifiers on java 8 parameter metadata for the dispatch and extension receivers for these inline class methods.
29 lines
1.0 KiB
Kotlin
Vendored
29 lines
1.0 KiB
Kotlin
Vendored
// IGNORE_BACKEND_FIR: JVM_IR
|
|
// SKIP_JDK6
|
|
// TARGET_BACKEND: JVM
|
|
// WITH_RUNTIME
|
|
// FULL_JDK
|
|
// KOTLIN_CONFIGURATION_FLAGS: +JVM.PARAMETERS_METADATA
|
|
|
|
// FILE: A.kt
|
|
|
|
inline class A(val i: Int) {
|
|
fun f() = i
|
|
}
|
|
|
|
fun A.extension() = this.i
|
|
|
|
fun box(): String {
|
|
val method = Class.forName("A").declaredMethods.single { it.name == "f-impl" }
|
|
val parameters = method.getParameters()
|
|
if (!parameters[0].isSynthetic()) return "wrong modifier on receiver parameter: ${parameters[0].modifiers}"
|
|
|
|
val extensionMethod = Class.forName("AKt").declaredMethods.single { it.name.contains("extension") }
|
|
val extensionMethodParameters = extensionMethod.getParameters()
|
|
if (extensionMethodParameters[0].isSynthetic())
|
|
return "wrong modifier (synthetic) on extension receiver parameter: ${extensionMethodParameters[0].modifiers}"
|
|
if (!extensionMethodParameters[0].isImplicit())
|
|
return "wrong modifier (not implicit) on extension receiver parameter: ${extensionMethodParameters[0].modifiers}"
|
|
|
|
return "OK"
|
|
} |