[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
This commit is contained in:
committed by
Space Team
parent
67557ce731
commit
5b01396a11
@@ -0,0 +1,74 @@
|
||||
// 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"
|
||||
}
|
||||
Reference in New Issue
Block a user