Files
kotlin-fork/compiler/testData/codegen/box/reflection/mapping/nonTrivialFunctionNames.kt
T
Alexander Udalov c58314fddf Reflection: improve and optimize kotlinFunction/kotlinProperty
- Make the implementations very similar, to fix KT-54833 where the
  companion object case was forgotten for kotlinProperty.
- Optimize both functions to look up the function/property by name
  first, to cover the most probable case when the JVM name of a
  declaration is equal to its Kotlin name. This fixes KT-55937.

 #KT-54833 Fixed
 #KT-55937 Fixed
2023-01-23 20:43:00 +01:00

40 lines
985 B
Kotlin
Vendored

// WITH_REFLECT
// TARGET_BACKEND: JVM
import kotlin.reflect.KFunction
import kotlin.reflect.jvm.javaMethod
import kotlin.reflect.jvm.kotlinFunction
import kotlin.test.assertEquals
class A {
@JvmName("jvmFoo")
fun foo(s: String): Int = s.length
fun mangled(z: Z): Number = z.value
internal fun internal(s: String): Int = s.length
// Some different members with similar JVM signatures, to check that kotlinFunction doesn't incorrectly resolve into one of these.
private fun jvmFoo(s: String): String = s
private fun `mangled-IQRRRT4`(z: Number) {}
private fun `internal$main`(s: String): String = s
}
@JvmInline
value class Z(val value: Number)
fun test(f: KFunction<*>) {
val javaMethod = f.javaMethod
?: error("javaMethod == null for $f")
assertEquals(f, javaMethod.kotlinFunction, "Incorrect kotlinFunction for $javaMethod")
}
fun box(): String {
test(A::foo)
test(A::mangled)
test(A::internal)
return "OK"
}