[FIR] Use tower to resolve delegated constructors, set dispatch receiver

This commit is contained in:
Mikhail Glukhikh
2020-04-10 18:29:14 +03:00
parent 0b8c497d2e
commit 457fb09e3a
60 changed files with 226 additions and 106 deletions
@@ -6,7 +6,7 @@ FILE: objectInnerClass.kt
local final inner class Child : R|<anonymous>.Base| {
public[local] constructor(property: R|B|): R|<anonymous>.Child| {
super<R|<anonymous>.Base|>(R|<local>/property|)
this@R|/anonymous|.super<R|<anonymous>.Base|>(R|<local>/property|)
}
public[local] final fun R|<anonymous>.Base|.zoo(): R|kotlin/Unit| {
@@ -69,7 +69,7 @@ FILE: objectInnerClass.kt
public final val x: R|anonymous| = object : R|Case2.Base| {
private constructor(): R|anonymous| {
super<R|Case2.Base|>(R|/B.B|())
this@R|/Case2|.super<R|Case2.Base|>(R|/B.B|())
}
public[local] final fun R|Case2.Base|.zoo(): R|kotlin/Unit| {
@@ -131,7 +131,7 @@ FILE: objectInnerClass.kt
local final inner class Child : R|Case3.<anonymous>.Base| {
public[local] constructor(property: R|B|): R|Case3.<anonymous>.Child| {
super<R|Case3.<anonymous>.Base|>(R|<local>/property|)
this@R|/anonymous|.super<R|Case3.<anonymous>.Base|>(R|<local>/property|)
}
public[local] final fun R|Case3.<anonymous>.Base|.zoo(): R|kotlin/Unit| {
@@ -0,0 +1,4 @@
class Outer { inner class Inner }
fun test() {
val x = object : <!UNRESOLVED_REFERENCE!>Outer.Inner<!>() { }
}
@@ -0,0 +1,23 @@
FILE: objectDerivedFromInnerClass.kt
public final class Outer : R|kotlin/Any| {
public constructor(): R|Outer| {
super<R|kotlin/Any|>()
}
public final inner class Inner : R|kotlin/Any| {
public constructor(): R|Outer.Inner| {
super<R|kotlin/Any|>()
}
}
}
public final fun test(): R|kotlin/Unit| {
lval x: R|anonymous| = object : R|Outer.Inner| {
private constructor(): R|anonymous| {
super<R|Outer.Inner|>()
}
}
}
@@ -13,7 +13,7 @@ abstract class My<T : Some> {
abstract val z: test.My.T
class Some : T()
class Some : <!UNRESOLVED_REFERENCE!>T<!>()
}
abstract class Your<T : Some> : <!OTHER_ERROR!>T<!>
@@ -38,9 +38,9 @@ interface E {
}
class Test2 : A.APublicI, B.BInner {
<!UNRESOLVED_REFERENCE!>class Test2 : A.APublicI, B.BInner {
}
}<!>
class Test3 : C.CPublicI, <!EXPOSED_SUPER_CLASS!>C<!> {
@@ -50,9 +50,9 @@ class Test4 : E, A.AProtectedI {
}
class Test5 : C.CPublicI, B.BInner {
<!UNRESOLVED_REFERENCE!>class Test5 : C.CPublicI, B.BInner {
}
}<!>
class Test6 : E, <!EXPOSED_SUPER_CLASS!>C.CPublic<!> {