JVM_IR KT-45697 reference classes from sources before IR generation

This commit is contained in:
Dmitry Petrov
2021-03-30 17:46:21 +03:00
committed by TeamCityServer
parent 7d211d0d9a
commit 9bf7f3af04
20 changed files with 737 additions and 2 deletions
@@ -0,0 +1,25 @@
// MODULE: lib
// FILE: 2.kt
abstract class A {
private val value = "OK"
fun f() = value
}
abstract class B : A()
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
abstract class A {
private val value = "OK"
fun f() = value
}
abstract class B : A()
@@ -0,0 +1,17 @@
// MODULE: lib
// FILE: 2.kt
fun a() = "OK"
fun b() = a()
// FILE: 3.kt
fun c() = b()
// MODULE: main(lib)
// FILE: 1.kt
fun d() = c()
fun box(): String = d()
// FILE: 2.kt
fun a() = "OK"
fun b() = a()
@@ -0,0 +1,27 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// MODULE: lib
// FILE: 2.kt
abstract class A {
@JvmField val value: String = "OK"
fun f() = value
}
abstract class B : A()
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
abstract class A {
@JvmField val value: String = "OK"
fun f() = value
}
abstract class B : A()
@@ -0,0 +1,33 @@
// MODULE: lib
// FILE: 2.kt
abstract class A {
protected lateinit var value: String
fun f() = value
}
abstract class B : A() {
init {
value = "OK"
}
}
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
abstract class A {
protected lateinit var value: String
fun f() = value
}
abstract class B : A() {
init {
value = "OK"
}
}
@@ -0,0 +1,27 @@
// MODULE: lib
// FILE: 2.kt
abstract class A {
protected val value = "OK"
}
abstract class B : A() {
fun f() = value
}
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
abstract class A {
protected val value = "OK"
}
abstract class B : A() {
fun f() = value
}
@@ -0,0 +1,25 @@
// MODULE: lib
// FILE: 2.kt
abstract class A {
protected val value = "O"
fun f(k: String = "K") = value + k
}
abstract class B : A()
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
abstract class A {
protected val value = "O"
fun f(k: String = "K") = value + k
}
abstract class B : A()
@@ -0,0 +1,27 @@
// MODULE: lib
// FILE: 2.kt
abstract class A {
protected val value = "OK"
}
abstract class B : A() {
val ok get() = value
}
// FILE: 3.kt
abstract class C : B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().ok
// FILE: 2.kt
abstract class A {
protected val value = "OK"
}
abstract class B : A() {
val ok get() = value
}
@@ -0,0 +1,30 @@
// IGNORE_BACKEND: JS_IR
// MODULE: lib
// FILE: 2.kt
class Host {
abstract class B : A()
abstract class A {
private val value = "OK"
fun f() = value
}
}
// FILE: 3.kt
abstract class C : Host.B()
// MODULE: main(lib)
// FILE: 1.kt
class D : C()
fun box(): String = D().f()
// FILE: 2.kt
class Host {
abstract class B : A()
abstract class A {
private val value = "OK"
fun f() = value
}
}
@@ -0,0 +1,18 @@
// IGNORE_BACKEND: JS_IR
// MODULE: lib
// FILE: 2.kt
val a get() = "OK"
val b get() = a
// FILE: 3.kt
val c get() = b
// MODULE: main(lib)
// FILE: 1.kt
val d get() = c
fun box(): String = d
// FILE: 2.kt
val a get() = "OK"
val b get() = a