5b01396a11
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
75 lines
1.6 KiB
Kotlin
Vendored
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"
|
|
}
|