Private constructors are now accessed via synthetic constructor with DEFAULT_CONSTRUCTOR_MARKER as an additional argument #KT-6299 Fixed

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.
This commit is contained in:
Mikhail Glukhikh
2015-06-18 19:52:18 +03:00
parent 83ce674a37
commit 5fabb962ae
28 changed files with 393 additions and 68 deletions
@@ -2,10 +2,6 @@
// 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 PrivateConstructor private constructor() {
class Nested { val a = PrivateConstructor() }
}
class PrivatePropertyGet {
private val x = 42
@@ -33,13 +29,11 @@ fun check(klass: Class<*>) {
}
fun box(): String {
check(javaClass<PrivateConstructor>())
check(javaClass<PrivatePropertyGet>())
check(javaClass<PrivatePropertySet>())
check(javaClass<PrivateMethod>())
// Also check that synthetic accessors really work
PrivateConstructor.Nested()
PrivatePropertyGet().Inner()
PrivatePropertySet().Inner()
PrivateMethod().Inner()