[NI] Report unsafe invoke properly for flexible types

`isNullable` check returns `true` for flexible types,
which leads to false positive unsafe invoke error, when
receiver for invoke's property is flexible.
^KT-30695 Fixed
This commit is contained in:
Pavel Kirpichenkov
2020-02-13 17:18:21 +03:00
parent b161839092
commit ba25b0faaf
4 changed files with 48 additions and 1 deletions
@@ -1,3 +1,13 @@
// FILE: JavaClass.java
public class JavaClass {
public static Cls createFlexible() {
return new Cls();
}
}
// FILE: test.kt
class MemberInvokeOwner {
operator fun invoke() {}
}
@@ -23,3 +33,11 @@ fun testNotNullableReceiver(notNullable: Cls) {
notNullable.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
notNullable<!UNNECESSARY_SAFE_CALL!>?.<!>extensionProperty()
}
fun testFlexibleReceiver() {
val flexible = JavaClass.createFlexible()
flexible.extensionProperty()
flexible?.<!UNSAFE_IMPLICIT_INVOKE_CALL!>extensionProperty<!>()
flexible.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
flexible?.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
}