PSI2IR: Fix delegated members generation

When generating bodies for members implemented by delegation, invoke
corresponding delegate member, not an interface member. Otherwise we
might lose platform-specific nullability information in case of mixed
Kotlin-Java hierarchies, as in
implicitNotNullOnDelegatedImplementation.kt
This commit is contained in:
Dmitry Petrov
2019-12-30 16:04:24 +03:00
parent cc0b231b3b
commit d622542824
9 changed files with 670 additions and 93 deletions
@@ -0,0 +1,47 @@
// FILE: implicitNotNullOnDelegatedImplementation.kt
interface IFoo {
fun foo(): String
}
class K1 : JFoo()
class K2 : JFoo() {
override fun foo() = super.foo()
}
class K3 : JUnrelatedFoo(), IFoo
class K4 : JUnrelatedFoo(), IFoo {
override fun foo() = super.foo()
}
class TestJFoo : IFoo by JFoo() {
// nullability assertion in 'foo()'
}
class TestK1 : IFoo by K1() {
// nullability assertion in 'foo()'
}
class TestK2 : IFoo by K2() {
// no nullability assertion in 'foo()'
}
class TestK3 : IFoo by K3() {
// no nullability assertion in 'foo()'
}
class TestK4 : IFoo by K4() {
// nullability assertion in 'foo()'
}
// FILE: JFoo.java
public class JFoo implements IFoo {
public String foo() { return null; }
}
// FILE: JUnrelatedFoo.java
public class JUnrelatedFoo {
public String foo() { return null; }
}