K2: Don't report BUILDER_INFERENCE_STUB_RECEIVER for members of Any

This commit actually does two things:
- Adds Any scope to stub type
- Makes CheckDispatchReceiver treat stub types
as non-null for the unsafe call check to make such candidates viable

Related to KT-59369
This commit is contained in:
Simon Ogorodnik
2023-11-29 10:13:13 +01:00
committed by Space Team
parent 0ed6256bcc
commit 299d279915
6 changed files with 55 additions and 47 deletions
@@ -23,10 +23,10 @@ fun test() {
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
get()?.<!NONE_APPLICABLE!>equals<!>(1)
get()?.hashCode()
get()?.equals(1)
// there is `String?.equals` extension
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().equals("")<!>
get().equals("")
}
val ret2 = build {
emit(1)
@@ -34,12 +34,12 @@ fun test() {
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
get()?.<!NONE_APPLICABLE!>equals<!>(1)
get()?.hashCode()
get()?.equals(1)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
x?.<!NONE_APPLICABLE!>equals<!>(1)
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.equals("")<!>
x?.hashCode()
x?.equals(1)
x.equals("")
}
val ret3 = build {
emit(1)
@@ -47,11 +47,11 @@ fun test() {
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
get()?.<!NONE_APPLICABLE!>equals<!>(1)
get()?.hashCode()
get()?.equals(1)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
x?.<!NONE_APPLICABLE!>equals<!>(1)
x?.hashCode()
x?.equals(1)
if (get() == null) {}
if (<!FORBIDDEN_IDENTITY_EQUALS_WARNING!>get() === null<!>) {}
@@ -163,11 +163,11 @@ fun test() {
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
get()?.<!NONE_APPLICABLE!>equals<!>(1)
get()?.hashCode()
get()?.equals(1)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
x?.<!NONE_APPLICABLE!>equals<!>(1)
x?.hashCode()
x?.equals(1)
if (get() == null) {}
if (<!FORBIDDEN_IDENTITY_EQUALS_WARNING!>get() === null<!>) {}
@@ -293,11 +293,11 @@ fun test() {
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
get()?.<!NONE_APPLICABLE!>equals<!>(1)
get()?.hashCode()
get()?.equals(1)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
x?.<!NONE_APPLICABLE!>equals<!>(1)
x?.hashCode()
x?.equals(1)
if (get() == null) {}
if (<!FORBIDDEN_IDENTITY_EQUALS_WARNING!>get() === null<!>) {}
@@ -25,27 +25,27 @@ fun <R1 : R2, R2> build4(x: R2, block: TestInterface<R1>.() -> Unit): R1 = TODO(
fun test(a: String?) {
val ret1 = build {
emit(1)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret2 = build2 {
emit(1)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret3 = build3 {
emit(1)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""