Return kotlin ctor mapped to a java ctor even if java ctor is synthetic

This allows working with constructors with inline class parameters using
Kotlin reflection, as described in
https://youtrack.jetbrains.com/issue/KT-27429#focus=streamItem-27-3161148-0-0

 #KT-27913
 #KT-27429
This commit is contained in:
Dmitry Petrov
2018-11-19 13:00:15 +03:00
parent 9082f19c00
commit 3efb07bf7b
7 changed files with 46 additions and 2 deletions
@@ -0,0 +1,21 @@
// IGNORE_BACKEND: JVM_IR, JS_IR, JS, NATIVE
// WITH_REFLECT
import kotlin.reflect.full.primaryConstructor
import kotlin.reflect.jvm.javaConstructor
import kotlin.reflect.jvm.kotlinFunction
import kotlin.test.assertEquals
inline class Z(val x: Int)
class Test(val x: Z)
fun box(): String {
val kctor1 = Test::class.primaryConstructor ?: throw AssertionError("No primary constructor")
val jctor1 = kctor1.javaConstructor ?: throw AssertionError("No javaConstructor for $kctor1")
val kctor2 = jctor1.kotlinFunction ?: throw AssertionError("No kotlinFunction for $jctor1")
assertEquals(kctor1, kctor2)
assertEquals("[x]", kctor2.parameters.map { it.name }.toString())
return "OK"
}