[FIR2IR] Rework reordering condition to better handle synthetic class delegation fields
^KT-60243 Merge-request: KT-MR-11125 Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
66bbb9582c
commit
f7269eb384
+96
@@ -0,0 +1,96 @@
|
||||
package foo
|
||||
|
||||
interface Base {
|
||||
abstract fun foo(x: String): String
|
||||
|
||||
}
|
||||
|
||||
class BaseImpl : Base {
|
||||
constructor(s: String) /* primary */ {
|
||||
super/*Any*/()
|
||||
/* <init>() */
|
||||
|
||||
}
|
||||
|
||||
val s: String
|
||||
field = s
|
||||
get
|
||||
|
||||
override fun foo(x: String): String {
|
||||
return "Base: " + <this>.<get-s>() + ":" + x
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var global: String
|
||||
field = ""
|
||||
get
|
||||
set
|
||||
|
||||
open class DerivedBase {
|
||||
constructor() /* primary */ {
|
||||
super/*Any*/()
|
||||
/* <init>() */
|
||||
|
||||
}
|
||||
|
||||
init {
|
||||
{ // BLOCK
|
||||
<set-global>(<set-?> = <get-global>().plus(other = ":DerivedBase"))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun newBase(): Base {
|
||||
{ // BLOCK
|
||||
<set-global>(<set-?> = <get-global>().plus(other = ":newBase"))
|
||||
}
|
||||
return BaseImpl(s = "test")
|
||||
}
|
||||
|
||||
class Derived : DerivedBase, Base {
|
||||
constructor() /* primary */ {
|
||||
super/*DerivedBase*/()
|
||||
/* <init>() */
|
||||
|
||||
}
|
||||
|
||||
private /* final field */ val $$delegate_0: Base = newBase()
|
||||
override fun foo(x: String): String {
|
||||
return <this>.#$$delegate_0.foo(x = x)
|
||||
}
|
||||
|
||||
init {
|
||||
{ // BLOCK
|
||||
<set-global>(<set-?> = <get-global>().plus(other = ":Derived"))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Derived1 : Base, DerivedBase {
|
||||
constructor() /* primary */ {
|
||||
super/*DerivedBase*/()
|
||||
/* <init>() */
|
||||
|
||||
}
|
||||
|
||||
private /* final field */ val $$delegate_0: Base = newBase()
|
||||
override fun foo(x: String): String {
|
||||
return <this>.#$$delegate_0.foo(x = x)
|
||||
}
|
||||
|
||||
init {
|
||||
{ // BLOCK
|
||||
<set-global>(<set-?> = <get-global>().plus(other = ":Derived"))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
var d: Derived = Derived()
|
||||
var d1: Derived1 = Derived1()
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user