[FIR] Support fields as part of graph of class initialization

^KT-49747 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-11-22 15:41:22 +03:00
committed by teamcityserver
parent 5778cb440f
commit 9c7058c3c5
10 changed files with 343 additions and 2 deletions
@@ -0,0 +1,46 @@
FILE: smartcastInByClause.kt
public final class A : R|kotlin/Any| {
public constructor(path: R|kotlin/String?|, index: R|kotlin/Int|): R|A| {
super<R|kotlin/Any|>()
}
public final val path: R|kotlin/String?| = R|<local>/path|
public get(): R|kotlin/String?|
public final val index: R|kotlin/Int| = R|<local>/index|
public get(): R|kotlin/Int|
}
public abstract interface Base : R|kotlin/Any| {
}
public final class Derived : R|Base| {
public constructor(index: R|kotlin/Int|): R|Derived| {
super<R|kotlin/Any|>()
}
public final val index: R|kotlin/Int| = R|<local>/index|
public get(): R|kotlin/Int|
}
public final fun test(a: R|A?|): R|Base?| {
lval path: R|kotlin/String| = R|<local>/a|?.{ $subj$.R|/A.path| } ?: ^test Null(null)
R|/takeInt|(R|<local>/a|.R|/A.index|)
^test object : R|Base| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
local final field <$$delegate_0>: R|Base| = R|/Derived.Derived|(R|<local>/a|.R|/A.index|)
public final val x: R|kotlin/Int| = R|<local>/a|.R|/A.index|
public get(): R|kotlin/Int|
public final fun foo(): R|kotlin/Unit| {
R|/takeInt|(R|<local>/a|.R|/A.index|)
}
}
}
public final fun takeInt(x: R|kotlin/Int|): R|kotlin/Unit| {
}