mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-09 15:53:37 +00:00
If a class inherits from another class which captures something (outer class instance, receiver parameter, local variables, etc.), the constructor of the former class should contain all the parameters of the super constructor as its own parameters, so that it could make a proper super call. All such parameters are now replicated in the derived constructor with kind = SUPER_CALL_PARAM, except an instance of the outer class (kind = OUTER), which can be taken from the derived's own OUTER when it has one, to prevent multiple passing of the same argument. Previously it worked only when inheriting from inner classes via a special hack (ConstructorFrameMap). Also reuse recently introduced ArgumentGenerator to automatically take care of default and vararg arguments of super constructor #KT-3581 Fixed #KT-5342 Fixed #KT-5343 Fixed
17 lines
349 B
Kotlin
17 lines
349 B
Kotlin
fun box(): String {
|
|
val three = 3
|
|
|
|
open class Local(val one: Int) {
|
|
open fun value() = "$three$one"
|
|
}
|
|
|
|
val four = 4
|
|
|
|
class Derived(val two: Int) : Local(1) {
|
|
override fun value() = super.value() + "$four$two"
|
|
}
|
|
|
|
val result = Derived(2).value()
|
|
return if (result == "3142") "OK" else "Fail: $result"
|
|
}
|