blob: a9d8acea7699fd676174a835642745b80dd74826 [file]
// TARGET_BACKEND: JVM
// CHECK_BYTECODE_LISTING
// WITH_STDLIB
@file:OptIn(ExperimentalVersionOverloading::class, ExperimentalStdlibApi::class)
class ExposedC {
@Suppress("CONFLICT_VERSION_AND_JVM_OVERLOADS_ANNOTATION", "NON_ASCENDING_VERSION_ANNOTATION")
@JvmExposeBoxed("foo_exposed")
@JvmOverloads
fun foo(
a: Float = 1f,
@IntroducedAt("3") a1: UInt = 3u,
@IntroducedAt("2") b : Boolean = true,
) = "$a/$a1/$b"
}
class EverythingC {
@Suppress("CONFLICT_VERSION_AND_JVM_OVERLOADS_ANNOTATION", "NON_ASCENDING_VERSION_ANNOTATION")
@JvmExposeBoxed("foo_exposed")
@JvmName("foo_renamed")
@JvmOverloads
fun foo(
a: Float = 1f,
@IntroducedAt("3") a1: UInt = 3u,
@IntroducedAt("2") b : Boolean = true,
) = "$a/$a1/$b"
}
fun test1(): String {
val c = ExposedC()
val foo0 = ExposedC::class.java.getMethod("foo_exposed")
val foo1 = ExposedC::class.java.getMethod("foo_exposed", Float::class.java)
val foo2 = ExposedC::class.java.getMethod("foo_exposed", Float::class.java, Boolean::class.java)
val foo2a = ExposedC::class.java.getMethod("foo_exposed", Float::class.java, UInt::class.java)
val foo3a = ExposedC::class.java.getMethod("foo_exposed", Float::class.java, UInt::class.java, Boolean::class.java)
val v0 = foo0.invoke(c) as String
val v1 = foo1.invoke(c, 1f) as String
val v2 = foo2.invoke(c, 1f, true) as String
val v2a = foo2a.invoke(c, 1f, 3u) as String
val v3a = foo3a.invoke(c,1f, 3u, true)
val v3 = c.foo(1f, 3u, true)
return if ((v0 == v1) && (v1 == v2) && (v2 == v2a) && (v2a == v3)&& (v3 == v3a)) "O" else " Err2: $v0 $v1 $v2 $v2a $v3 $v3a"
}
fun test2(): String {
val c = EverythingC()
val foo0 = EverythingC::class.java.getMethod("foo_renamed")
val foo1 = EverythingC::class.java.getMethod("foo_renamed", Float::class.java)
val foo2 = EverythingC::class.java.getMethod("foo_renamed", Float::class.java, Boolean::class.java)
val foo2a = EverythingC::class.java.getMethod("foo_renamed", Float::class.java, Int::class.java)
val foo2e = EverythingC::class.java.getMethod("foo_exposed", Float::class.java, UInt::class.java)
val foo3a = EverythingC::class.java.getMethod("foo_renamed", Float::class.java, Int::class.java, Boolean::class.java)
val foo3e = EverythingC::class.java.getMethod("foo_exposed", Float::class.java, UInt::class.java, Boolean::class.java)
val v0 = foo0.invoke(c) as String
val v1 = foo1.invoke(c, 1f) as String
val v2 = foo2.invoke(c, 1f, true) as String
val v2a = foo2a.invoke(c, 1f, 3) as String
val v2e = foo2e.invoke(c, 1f, 3u) as String
val v3a = foo3a.invoke(c, 1f, 3, true)
val v3e = foo3e.invoke(c, 1f, 3u, true)
val v3 = c.foo(1f, 3u, true)
return if ((v0 == v1) && (v1 == v2) && (v2 == v2a) && (v2a == v2e) && (v2e == v3) && (v3 == v3a) && (v3 == v3e)) "K" else " Err2: $v0 $v1 $v2 $v2a $v2e $v3 $v3a $v3e"
}
fun box() : String {
return test1() + test2()
}