Files
kotlin-fork/compiler/testData/codegen/box/innerNested/inheritedInnerAndNested.kt
T
Dmitriy Novozhilov 5b01396a11 [FIR] Carefully process constructors of inner and nested classes in the tower
If there is an expression receiver, we should process constructors only
  of inner classes. Constructors of nested classes can be called only
  on classifier

^KT-65333 Fixed
2024-02-28 08:08:32 +00:00

75 lines
1.6 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM_IR
// ISSUE: KT-65333
// FILE: BaseClass.java
public class BaseClass {
public class Inner {
public String box() {
return "BaseClass";
}
}
}
// FILE: BaseInterface.java
public interface BaseInterface {
class Inner {
public String box() {
return "BaseInterface";
}
}
}
// FILE: main.kt
class A: BaseClass(), BaseInterface
class B : BaseClass(), BaseInterface {
class Inner {
fun box(): String = "B"
}
}
class C : BaseClass(), BaseInterface {
inner class Inner {
fun box(): String = "C"
}
}
object D : BaseClass(), BaseInterface
object E : BaseClass(), BaseInterface {
class Inner {
fun box(): String = "E"
}
}
object F : BaseClass()
object G : BaseClass() {
class Inner {
fun box(): String = "G"
}
}
object H : BaseInterface
object I : BaseInterface {
class Inner {
fun box(): String = "I"
}
}
fun check(actual: String, expected: String) {
if (expected != actual) {
throw AssertionError("\nExpected: $expected\nActual: $actual\n")
}
}
fun box(): String {
check(A().Inner().box(), "BaseClass")
// check(A.Inner().box(), "BaseInterface")
// check(B().Inner().box(), "BaseInterface")
check(B.Inner().box(), "B")
check(C().Inner().box(), "C")
// check(C.Inner().box(), "BaseInterface")
check(D.Inner().box(), "BaseClass")
check(E.Inner().box(), "E")
check(F.Inner().box(), "BaseClass")
check(G.Inner().box(), "G")
// check(H.Inner().box(), "E")
check(I.Inner().box(), "I")
return "OK"
}