31 lines
806 B
Kotlin
Vendored
31 lines
806 B
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
|
|
// WITH_RUNTIME
|
|
|
|
// private constructors are transformed into synthetic
|
|
class PrivateConstructor private constructor() {
|
|
class Nested { val a = PrivateConstructor() }
|
|
}
|
|
|
|
fun check(klass: Class<*>) {
|
|
var hasSynthetic = false
|
|
var hasSimple = false
|
|
for (method in klass.getDeclaredConstructors()) {
|
|
if (method.isSynthetic()) {
|
|
hasSynthetic = true
|
|
}
|
|
else {
|
|
hasSimple = true
|
|
}
|
|
}
|
|
if (hasSynthetic && hasSimple) return
|
|
throw AssertionError("Class should have both synthetic and non-synthetic constructor: ($hasSynthetic, $hasSimple)")
|
|
}
|
|
|
|
fun box(): String {
|
|
check(PrivateConstructor::class.java)
|
|
// Also check that synthetic accessors really work
|
|
PrivateConstructor.Nested()
|
|
return "OK"
|
|
}
|