5fabb962ae
A set of tests provided. Some external tests fixed accordingly. Companion object creation changed accordingly. Derived classes now can use base class with the private constructor. Refactoring of AccessorForFunctionDescriptor.
43 lines
1.1 KiB
Kotlin
Vendored
43 lines
1.1 KiB
Kotlin
Vendored
// This test checks that synthetic accessors generated by Kotlin compiler have names starting with "access$"
|
|
// This is crucial for some JVM frameworks like Quasar which rely on the bytecode being similar to the one generated by javac
|
|
// See https://youtrack.jetbrains.com/issue/KT-6870
|
|
|
|
class PrivatePropertyGet {
|
|
private val x = 42
|
|
|
|
inner class Inner { val a = x }
|
|
}
|
|
|
|
class PrivatePropertySet {
|
|
private var x = "a"
|
|
|
|
inner class Inner { init { x = "b" } }
|
|
}
|
|
|
|
class PrivateMethod {
|
|
private fun foo() = ""
|
|
|
|
inner class Inner { val a = foo() }
|
|
}
|
|
|
|
fun check(klass: Class<*>) {
|
|
for (method in klass.getDeclaredMethods()) {
|
|
if (method.isSynthetic() && method.getName().startsWith("access$")) return
|
|
}
|
|
|
|
throw AssertionError("No synthetic methods starting with 'access$' found in class $klass")
|
|
}
|
|
|
|
fun box(): String {
|
|
check(javaClass<PrivatePropertyGet>())
|
|
check(javaClass<PrivatePropertySet>())
|
|
check(javaClass<PrivateMethod>())
|
|
|
|
// Also check that synthetic accessors really work
|
|
PrivatePropertyGet().Inner()
|
|
PrivatePropertySet().Inner()
|
|
PrivateMethod().Inner()
|
|
|
|
return "OK"
|
|
}
|