FIR: add UnsafeCall resolution diagnostics

Previously unsafe call is reported as part of InapplicableWrongReceiver.
This makes it difficult for the downstream checkers to report different
diagnostics.
This commit is contained in:
Tianyu Geng
2021-04-08 21:17:01 +03:00
committed by Mikhail Glukhikh
parent 43a2ad0467
commit 6a03f31e50
62 changed files with 283 additions and 283 deletions
+1 -1
View File
@@ -127,7 +127,7 @@ digraph jumps_kt {
} }
51 [label="Variable declaration: lval y: R|kotlin/Int?|"]; 51 [label="Variable declaration: lval y: R|kotlin/Int?|"];
52 [label="Access variable R|<local>/y|"]; 52 [label="Access variable R|<local>/y|"];
53 [label="Function call: R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 53 [label="Function call: R|<local>/y|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
54 [label="Exit block"]; 54 [label="Exit block"];
} }
55 [label="Exit function test_2" style="filled" fillcolor=red]; 55 [label="Exit function test_2" style="filled" fillcolor=red];
@@ -22,7 +22,7 @@ FILE: jumps.kt
} }
} }
R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/y|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
public final fun test_3(x: R|kotlin/Int?|): R|kotlin/Unit| { public final fun test_3(x: R|kotlin/Int?|): R|kotlin/Unit| {
while(Boolean(true)) { while(Boolean(true)) {
@@ -36,7 +36,7 @@ FILE: test.kt
lval bar: R|kotlin/CharSequence?| = R|<local>/x|?.{ $subj$.R|/SomeClass.bar| } lval bar: R|kotlin/CharSequence?| = R|<local>/x|?.{ $subj$.R|/SomeClass.bar| }
when () { when () {
!=(R|<local>/bar|, Null(null)) -> { !=(R|<local>/bar|, Null(null)) -> {
R|<local>/x|.R|/SomeClass.bar|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/CharSequence.length># R|<local>/x|.R|/SomeClass.bar|.<Inapplicable(UNSAFE_CALL): kotlin/CharSequence.length>#
} }
} }
@@ -202,7 +202,7 @@ digraph bangbang_kt {
78 [label="Exit when"]; 78 [label="Exit when"];
} }
79 [label="Access variable R|<local>/a|"]; 79 [label="Access variable R|<local>/a|"];
80 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 80 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
81 [label="Exit block"]; 81 [label="Exit block"];
} }
82 [label="Exit function test_3" style="filled" fillcolor=red]; 82 [label="Exit function test_3" style="filled" fillcolor=red];
@@ -331,14 +331,14 @@ digraph bangbang_kt {
color=blue color=blue
123 [label="Enter block"]; 123 [label="Enter block"];
124 [label="Access variable R|<local>/a|"]; 124 [label="Access variable R|<local>/a|"];
125 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 125 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
126 [label="Exit block"]; 126 [label="Exit block"];
} }
127 [label="Exit when branch result"]; 127 [label="Exit when branch result"];
128 [label="Exit when"]; 128 [label="Exit when"];
} }
129 [label="Access variable R|<local>/a|"]; 129 [label="Access variable R|<local>/a|"];
130 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 130 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
131 [label="Exit block"]; 131 [label="Exit block"];
} }
132 [label="Exit function test_5" style="filled" fillcolor=red]; 132 [label="Exit function test_5" style="filled" fillcolor=red];
@@ -32,7 +32,7 @@ FILE: bangbang.kt
} }
} }
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun test_4(a: R|A?|, b: R|kotlin/Boolean|): R|kotlin/Unit| { public final fun test_4(a: R|A?|, b: R|kotlin/Boolean|): R|kotlin/Unit| {
when () { when () {
@@ -46,11 +46,11 @@ FILE: bangbang.kt
public final fun test_5(a: R|A?|, b: R|kotlin/Boolean|): R|kotlin/Unit| { public final fun test_5(a: R|A?|, b: R|kotlin/Boolean|): R|kotlin/Unit| {
when () { when () {
R|<local>/b| || R|<local>/a|!!.R|/A.foo|() -> { R|<local>/b| || R|<local>/a|!!.R|/A.foo|() -> {
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun <X : R|A?|> test_6(x: R|X|): R|kotlin/Unit| { public final fun <X : R|A?|> test_6(x: R|X|): R|kotlin/Unit| {
R|<local>/x|!!.R|/A.foo|() R|<local>/x|!!.R|/A.foo|()
@@ -17,7 +17,7 @@ FILE: booleanElvisBoundSmartcast.kt
R|<local>/a|.R|/A.foo|() R|<local>/a|.R|/A.foo|()
} }
else -> { else -> {
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
@@ -25,7 +25,7 @@ FILE: booleanElvisBoundSmartcast.kt
public final fun test_2(a: R|A?|): R|kotlin/Unit| { public final fun test_2(a: R|A?|): R|kotlin/Unit| {
when () { when () {
R|<local>/a|?.{ $subj$.R|/A.b| } ?: Boolean(true) -> { R|<local>/a|?.{ $subj$.R|/A.b| } ?: Boolean(true) -> {
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
else -> { else -> {
R|<local>/a|.R|/A.foo|() R|<local>/a|.R|/A.foo|()
@@ -46,7 +46,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
17 [label="Enter block"]; 17 [label="Enter block"];
18 [label="Access variable R|<local>/b|"]; 18 [label="Access variable R|<local>/b|"];
19 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 19 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
20 [label="Exit block"]; 20 [label="Exit block"];
} }
21 [label="Exit when branch result"]; 21 [label="Exit when branch result"];
@@ -130,7 +130,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
50 [label="Enter block"]; 50 [label="Enter block"];
51 [label="Access variable R|<local>/b|"]; 51 [label="Access variable R|<local>/b|"];
52 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 52 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
53 [label="Exit block"]; 53 [label="Exit block"];
} }
54 [label="Exit when branch result"]; 54 [label="Exit when branch result"];
@@ -205,7 +205,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
77 [label="Enter block"]; 77 [label="Enter block"];
78 [label="Access variable R|<local>/b|"]; 78 [label="Access variable R|<local>/b|"];
79 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 79 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
80 [label="Exit block"]; 80 [label="Exit block"];
} }
81 [label="Exit when branch result"]; 81 [label="Exit when branch result"];
@@ -271,7 +271,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
98 [label="Enter block"]; 98 [label="Enter block"];
99 [label="Access variable R|<local>/b|"]; 99 [label="Access variable R|<local>/b|"];
100 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 100 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
101 [label="Exit block"]; 101 [label="Exit block"];
} }
102 [label="Exit when branch result"]; 102 [label="Exit when branch result"];
@@ -355,7 +355,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
131 [label="Enter block"]; 131 [label="Enter block"];
132 [label="Access variable R|<local>/b|"]; 132 [label="Access variable R|<local>/b|"];
133 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 133 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
134 [label="Exit block"]; 134 [label="Exit block"];
} }
135 [label="Exit when branch result"]; 135 [label="Exit when branch result"];
@@ -421,7 +421,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
152 [label="Enter block"]; 152 [label="Enter block"];
153 [label="Access variable R|<local>/b|"]; 153 [label="Access variable R|<local>/b|"];
154 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 154 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
155 [label="Exit block"]; 155 [label="Exit block"];
} }
156 [label="Exit when branch result"]; 156 [label="Exit when branch result"];
@@ -496,7 +496,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
179 [label="Enter block"]; 179 [label="Enter block"];
180 [label="Access variable R|<local>/b|"]; 180 [label="Access variable R|<local>/b|"];
181 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 181 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
182 [label="Exit block"]; 182 [label="Exit block"];
} }
183 [label="Exit when branch result"]; 183 [label="Exit when branch result"];
@@ -580,7 +580,7 @@ digraph equalsToBoolean_kt {
color=blue color=blue
212 [label="Enter block"]; 212 [label="Enter block"];
213 [label="Access variable R|<local>/b|"]; 213 [label="Access variable R|<local>/b|"];
214 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#()"]; 214 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()"];
215 [label="Exit block"]; 215 [label="Exit block"];
} }
216 [label="Exit when branch result"]; 216 [label="Exit when branch result"];
@@ -12,7 +12,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
} }
else -> { else -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
} }
@@ -20,7 +20,7 @@ FILE: equalsToBoolean.kt
public final fun test_2(b: R|kotlin/Boolean?|): R|kotlin/Unit| { public final fun test_2(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () { when () {
!=(==(R|<local>/b|, Boolean(true)), Boolean(true)) -> { !=(==(R|<local>/b|, Boolean(true)), Boolean(true)) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
else -> { else -> {
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
@@ -31,7 +31,7 @@ FILE: equalsToBoolean.kt
public final fun test_3(b: R|kotlin/Boolean?|): R|kotlin/Unit| { public final fun test_3(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () { when () {
==(==(R|<local>/b|, Boolean(true)), Boolean(false)) -> { ==(==(R|<local>/b|, Boolean(true)), Boolean(false)) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
else -> { else -> {
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
@@ -45,7 +45,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
} }
else -> { else -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
} }
@@ -53,7 +53,7 @@ FILE: equalsToBoolean.kt
public final fun test_5(b: R|kotlin/Boolean?|): R|kotlin/Unit| { public final fun test_5(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () { when () {
==(!=(R|<local>/b|, Boolean(true)), Boolean(true)) -> { ==(!=(R|<local>/b|, Boolean(true)), Boolean(true)) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
else -> { else -> {
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
@@ -67,7 +67,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
} }
else -> { else -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
} }
@@ -78,7 +78,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
} }
else -> { else -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
} }
@@ -86,7 +86,7 @@ FILE: equalsToBoolean.kt
public final fun test_8(b: R|kotlin/Boolean?|): R|kotlin/Unit| { public final fun test_8(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () { when () {
!=(!=(R|<local>/b|, Boolean(true)), Boolean(false)) -> { !=(!=(R|<local>/b|, Boolean(true)), Boolean(false)) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Boolean.not>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Boolean.not>#()
} }
else -> { else -> {
R|<local>/b|.R|kotlin/Boolean.not|() R|<local>/b|.R|kotlin/Boolean.not|()
@@ -267,7 +267,7 @@ digraph jumpFromRhsOfOperator_kt {
101 [label="Exit ||"]; 101 [label="Exit ||"];
} }
102 [label="Access variable R|<local>/a|"]; 102 [label="Access variable R|<local>/a|"];
103 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 103 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
104 [label="Exit block"]; 104 [label="Exit block"];
} }
105 [label="Exit function test_5" style="filled" fillcolor=red]; 105 [label="Exit function test_5" style="filled" fillcolor=red];
@@ -309,7 +309,7 @@ digraph jumpFromRhsOfOperator_kt {
117 [label="Exit &&"]; 117 [label="Exit &&"];
} }
118 [label="Access variable R|<local>/a|"]; 118 [label="Access variable R|<local>/a|"];
119 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 119 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
120 [label="Exit block"]; 120 [label="Exit block"];
} }
121 [label="Exit function teat_6" style="filled" fillcolor=red]; 121 [label="Exit function teat_6" style="filled" fillcolor=red];
@@ -364,14 +364,14 @@ digraph jumpFromRhsOfOperator_kt {
color=blue color=blue
139 [label="Enter block"]; 139 [label="Enter block"];
140 [label="Access variable R|<local>/a|"]; 140 [label="Access variable R|<local>/a|"];
141 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 141 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
142 [label="Exit block"]; 142 [label="Exit block"];
} }
143 [label="Exit when branch result"]; 143 [label="Exit when branch result"];
144 [label="Exit when"]; 144 [label="Exit when"];
} }
145 [label="Access variable R|<local>/a|"]; 145 [label="Access variable R|<local>/a|"];
146 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 146 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
147 [label="Exit block"]; 147 [label="Exit block"];
} }
148 [label="Exit function test_7" style="filled" fillcolor=red]; 148 [label="Exit function test_7" style="filled" fillcolor=red];
@@ -437,14 +437,14 @@ digraph jumpFromRhsOfOperator_kt {
color=blue color=blue
166 [label="Enter block"]; 166 [label="Enter block"];
167 [label="Access variable R|<local>/a|"]; 167 [label="Access variable R|<local>/a|"];
168 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 168 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
169 [label="Exit block"]; 169 [label="Exit block"];
} }
170 [label="Exit when branch result"]; 170 [label="Exit when branch result"];
171 [label="Exit when"]; 171 [label="Exit when"];
} }
172 [label="Access variable R|<local>/a|"]; 172 [label="Access variable R|<local>/a|"];
173 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 173 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
174 [label="Exit block"]; 174 [label="Exit block"];
} }
175 [label="Exit function test_8" style="filled" fillcolor=red]; 175 [label="Exit function test_8" style="filled" fillcolor=red];
@@ -31,27 +31,27 @@ FILE: jumpFromRhsOfOperator.kt
} }
public final fun test_5(a: R|A?|): R|kotlin/Unit| { public final fun test_5(a: R|A?|): R|kotlin/Unit| {
==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|() ==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|()
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun teat_6(a: R|A?|): R|kotlin/Unit| { public final fun teat_6(a: R|A?|): R|kotlin/Unit| {
!=(R|<local>/a|, Null(null)) && throw R|java/lang/Exception.Exception|() !=(R|<local>/a|, Null(null)) && throw R|java/lang/Exception.Exception|()
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun test_7(a: R|A?|): R|kotlin/Unit| { public final fun test_7(a: R|A?|): R|kotlin/Unit| {
when () { when () {
==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|() -> { ==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|() -> {
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun test_8(a: R|A?|): R|kotlin/Unit| { public final fun test_8(a: R|A?|): R|kotlin/Unit| {
when () { when () {
!=(R|<local>/a|, Null(null)) && throw R|java/lang/Exception.Exception|() -> { !=(R|<local>/a|, Null(null)) && throw R|java/lang/Exception.Exception|() -> {
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
@@ -675,7 +675,7 @@ digraph boundSmartcastsInBranches_kt {
275 [label="Access variable R|<local>/x|"]; 275 [label="Access variable R|<local>/x|"];
276 [label="Access variable R|kotlin/String.length|"]; 276 [label="Access variable R|kotlin/String.length|"];
277 [label="Access variable R|<local>/y|"]; 277 [label="Access variable R|<local>/y|"];
278 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 278 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
279 [label="Access variable R|<local>/z|"]; 279 [label="Access variable R|<local>/z|"];
280 [label="Access variable R|kotlin/String.length|"]; 280 [label="Access variable R|kotlin/String.length|"];
281 [label="Exit block"]; 281 [label="Exit block"];
@@ -700,11 +700,11 @@ digraph boundSmartcastsInBranches_kt {
color=blue color=blue
292 [label="Enter block"]; 292 [label="Enter block"];
293 [label="Access variable R|<local>/x|"]; 293 [label="Access variable R|<local>/x|"];
294 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 294 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
295 [label="Access variable R|<local>/y|"]; 295 [label="Access variable R|<local>/y|"];
296 [label="Access variable R|kotlin/String.length|"]; 296 [label="Access variable R|kotlin/String.length|"];
297 [label="Access variable R|<local>/z|"]; 297 [label="Access variable R|<local>/z|"];
298 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 298 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
299 [label="Exit block"]; 299 [label="Exit block"];
} }
300 [label="Exit when branch result"]; 300 [label="Exit when branch result"];
@@ -729,7 +729,7 @@ digraph boundSmartcastsInBranches_kt {
311 [label="Access variable R|<local>/x|"]; 311 [label="Access variable R|<local>/x|"];
312 [label="Access variable R|kotlin/String.length|"]; 312 [label="Access variable R|kotlin/String.length|"];
313 [label="Access variable R|<local>/y|"]; 313 [label="Access variable R|<local>/y|"];
314 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 314 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
315 [label="Access variable R|<local>/z|"]; 315 [label="Access variable R|<local>/z|"];
316 [label="Access variable R|kotlin/String.length|"]; 316 [label="Access variable R|kotlin/String.length|"];
317 [label="Exit block"]; 317 [label="Exit block"];
@@ -135,23 +135,23 @@ FILE: boundSmartcastsInBranches.kt
when () { when () {
!=(R|<local>/x|, Null(null)) -> { !=(R|<local>/x|, Null(null)) -> {
R|<local>/x|.R|kotlin/String.length| R|<local>/x|.R|kotlin/String.length|
R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/y|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
R|<local>/z|.R|kotlin/String.length| R|<local>/z|.R|kotlin/String.length|
} }
} }
when () { when () {
!=(R|<local>/y|, Null(null)) -> { !=(R|<local>/y|, Null(null)) -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/x|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
R|<local>/y|.R|kotlin/String.length| R|<local>/y|.R|kotlin/String.length|
R|<local>/z|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/z|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
} }
when () { when () {
!=(R|<local>/z|, Null(null)) -> { !=(R|<local>/z|, Null(null)) -> {
R|<local>/x|.R|kotlin/String.length| R|<local>/x|.R|kotlin/String.length|
R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/y|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
R|<local>/z|.R|kotlin/String.length| R|<local>/z|.R|kotlin/String.length|
} }
} }
@@ -136,9 +136,9 @@ digraph equalsAndIdentity_kt {
color=blue color=blue
50 [label="Enter block"]; 50 [label="Enter block"];
51 [label="Access variable R|<local>/x|"]; 51 [label="Access variable R|<local>/x|"];
52 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 52 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
53 [label="Access variable R|<local>/y|"]; 53 [label="Access variable R|<local>/y|"];
54 [label="Function call: R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 54 [label="Function call: R|<local>/y|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
55 [label="Exit block"]; 55 [label="Exit block"];
} }
56 [label="Exit when branch result"]; 56 [label="Exit when branch result"];
@@ -161,9 +161,9 @@ digraph equalsAndIdentity_kt {
color=blue color=blue
66 [label="Enter block"]; 66 [label="Enter block"];
67 [label="Access variable R|<local>/x|"]; 67 [label="Access variable R|<local>/x|"];
68 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 68 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
69 [label="Access variable R|<local>/y|"]; 69 [label="Access variable R|<local>/y|"];
70 [label="Function call: R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 70 [label="Function call: R|<local>/y|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
71 [label="Exit block"]; 71 [label="Exit block"];
} }
72 [label="Exit when branch result"]; 72 [label="Exit when branch result"];
@@ -22,15 +22,15 @@ FILE: equalsAndIdentity.kt
public final fun test_2(x: R|A?|, y: R|A?|): R|kotlin/Unit| { public final fun test_2(x: R|A?|, y: R|A?|): R|kotlin/Unit| {
when () { when () {
==(R|<local>/x|, R|<local>/y|) -> { ==(R|<local>/x|, R|<local>/y|) -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/y|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
when () { when () {
===(R|<local>/x|, R|<local>/y|) -> { ===(R|<local>/x|, R|<local>/y|) -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
R|<local>/y|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/y|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
@@ -239,7 +239,7 @@ digraph nullability_kt {
color=blue color=blue
76 [label="Enter block"]; 76 [label="Enter block"];
77 [label="Access variable R|<local>/x|"]; 77 [label="Access variable R|<local>/x|"];
78 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 78 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
79 [label="Exit block"]; 79 [label="Exit block"];
} }
80 [label="Exit when branch result"]; 80 [label="Exit when branch result"];
@@ -255,7 +255,7 @@ digraph nullability_kt {
87 [label="Exit when"]; 87 [label="Exit when"];
} }
88 [label="Access variable R|<local>/x|"]; 88 [label="Access variable R|<local>/x|"];
89 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 89 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
90 [label="Exit block"]; 90 [label="Exit block"];
} }
91 [label="Exit function test_1" style="filled" fillcolor=red]; 91 [label="Exit function test_1" style="filled" fillcolor=red];
@@ -323,14 +323,14 @@ digraph nullability_kt {
color=blue color=blue
109 [label="Enter block"]; 109 [label="Enter block"];
110 [label="Access variable R|<local>/x|"]; 110 [label="Access variable R|<local>/x|"];
111 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 111 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
112 [label="Exit block"]; 112 [label="Exit block"];
} }
113 [label="Exit when branch result"]; 113 [label="Exit when branch result"];
114 [label="Exit when"]; 114 [label="Exit when"];
} }
115 [label="Access variable R|<local>/x|"]; 115 [label="Access variable R|<local>/x|"];
116 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 116 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
117 [label="Exit block"]; 117 [label="Exit block"];
} }
118 [label="Exit function test_2" style="filled" fillcolor=red]; 118 [label="Exit function test_2" style="filled" fillcolor=red];
@@ -492,11 +492,11 @@ digraph nullability_kt {
176 [label="Access variable R|/Q.data|"]; 176 [label="Access variable R|/Q.data|"];
177 [label="Access variable R|<local>/q|"]; 177 [label="Access variable R|<local>/q|"];
178 [label="Access variable R|/Q.data|"]; 178 [label="Access variable R|/Q.data|"];
179 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 179 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
180 [label="Access variable R|<local>/q|"]; 180 [label="Access variable R|<local>/q|"];
181 [label="Access variable R|/Q.data|"]; 181 [label="Access variable R|/Q.data|"];
182 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 182 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
183 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|()"]; 183 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()"];
184 [label="Exit block"]; 184 [label="Exit block"];
} }
185 [label="Exit when branch result"]; 185 [label="Exit when branch result"];
@@ -566,11 +566,11 @@ digraph nullability_kt {
208 [label="Access variable R|/Q.data|"]; 208 [label="Access variable R|/Q.data|"];
209 [label="Access variable R|<local>/q|"]; 209 [label="Access variable R|<local>/q|"];
210 [label="Access variable R|/Q.data|"]; 210 [label="Access variable R|/Q.data|"];
211 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 211 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
212 [label="Access variable R|<local>/q|"]; 212 [label="Access variable R|<local>/q|"];
213 [label="Access variable R|/Q.data|"]; 213 [label="Access variable R|/Q.data|"];
214 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 214 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
215 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|()"]; 215 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()"];
216 [label="Exit block"]; 216 [label="Exit block"];
} }
217 [label="Exit function test_6" style="filled" fillcolor=red]; 217 [label="Exit function test_6" style="filled" fillcolor=red];
@@ -640,11 +640,11 @@ digraph nullability_kt {
239 [label="Function call: R|<local>/q|.R|/Q.fdata|()"]; 239 [label="Function call: R|<local>/q|.R|/Q.fdata|()"];
240 [label="Access variable R|<local>/q|"]; 240 [label="Access variable R|<local>/q|"];
241 [label="Function call: R|<local>/q|.R|/Q.fdata|()"]; 241 [label="Function call: R|<local>/q|.R|/Q.fdata|()"];
242 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.fs>#()"]; 242 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#()"];
243 [label="Access variable R|<local>/q|"]; 243 [label="Access variable R|<local>/q|"];
244 [label="Function call: R|<local>/q|.R|/Q.fdata|()"]; 244 [label="Function call: R|<local>/q|.R|/Q.fdata|()"];
245 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.fs>#()"]; 245 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#()"];
246 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.fs>#().R|kotlin/Int.inc|()"]; 246 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#().R|kotlin/Int.inc|()"];
247 [label="Exit block"]; 247 [label="Exit block"];
} }
248 [label="Exit when branch result"]; 248 [label="Exit when branch result"];
@@ -769,7 +769,7 @@ digraph nullability_kt {
285 [label="Exit when"]; 285 [label="Exit when"];
} }
286 [label="Access variable R|<local>/b|"]; 286 [label="Access variable R|<local>/b|"];
287 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 287 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_66 { subgraph cluster_66 {
color=blue color=blue
288 [label="Enter when"]; 288 [label="Enter when"];
@@ -794,7 +794,7 @@ digraph nullability_kt {
301 [label="Exit when"]; 301 [label="Exit when"];
} }
302 [label="Access variable R|<local>/b|"]; 302 [label="Access variable R|<local>/b|"];
303 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 303 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_69 { subgraph cluster_69 {
color=blue color=blue
304 [label="Enter when"]; 304 [label="Enter when"];
@@ -819,7 +819,7 @@ digraph nullability_kt {
317 [label="Exit when"]; 317 [label="Exit when"];
} }
318 [label="Access variable R|<local>/b|"]; 318 [label="Access variable R|<local>/b|"];
319 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 319 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_72 { subgraph cluster_72 {
color=blue color=blue
320 [label="Enter when"]; 320 [label="Enter when"];
@@ -844,7 +844,7 @@ digraph nullability_kt {
333 [label="Exit when"]; 333 [label="Exit when"];
} }
334 [label="Access variable R|<local>/b|"]; 334 [label="Access variable R|<local>/b|"];
335 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 335 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
336 [label="Exit block"]; 336 [label="Exit block"];
} }
337 [label="Exit function test_9" style="filled" fillcolor=red]; 337 [label="Exit function test_9" style="filled" fillcolor=red];
@@ -940,14 +940,14 @@ digraph nullability_kt {
color=blue color=blue
348 [label="Enter block"]; 348 [label="Enter block"];
349 [label="Access variable R|<local>/b|"]; 349 [label="Access variable R|<local>/b|"];
350 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 350 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
351 [label="Exit block"]; 351 [label="Exit block"];
} }
352 [label="Exit when branch result"]; 352 [label="Exit when branch result"];
353 [label="Exit when"]; 353 [label="Exit when"];
} }
354 [label="Access variable R|<local>/b|"]; 354 [label="Access variable R|<local>/b|"];
355 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 355 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_80 { subgraph cluster_80 {
color=blue color=blue
356 [label="Enter when"]; 356 [label="Enter when"];
@@ -965,14 +965,14 @@ digraph nullability_kt {
color=blue color=blue
364 [label="Enter block"]; 364 [label="Enter block"];
365 [label="Access variable R|<local>/b|"]; 365 [label="Access variable R|<local>/b|"];
366 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 366 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
367 [label="Exit block"]; 367 [label="Exit block"];
} }
368 [label="Exit when branch result"]; 368 [label="Exit when branch result"];
369 [label="Exit when"]; 369 [label="Exit when"];
} }
370 [label="Access variable R|<local>/b|"]; 370 [label="Access variable R|<local>/b|"];
371 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 371 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_83 { subgraph cluster_83 {
color=blue color=blue
372 [label="Enter when"]; 372 [label="Enter when"];
@@ -990,14 +990,14 @@ digraph nullability_kt {
color=blue color=blue
380 [label="Enter block"]; 380 [label="Enter block"];
381 [label="Access variable R|<local>/b|"]; 381 [label="Access variable R|<local>/b|"];
382 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 382 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
383 [label="Exit block"]; 383 [label="Exit block"];
} }
384 [label="Exit when branch result"]; 384 [label="Exit when branch result"];
385 [label="Exit when"]; 385 [label="Exit when"];
} }
386 [label="Access variable R|<local>/b|"]; 386 [label="Access variable R|<local>/b|"];
387 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 387 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
subgraph cluster_86 { subgraph cluster_86 {
color=blue color=blue
388 [label="Enter when"]; 388 [label="Enter when"];
@@ -1015,14 +1015,14 @@ digraph nullability_kt {
color=blue color=blue
396 [label="Enter block"]; 396 [label="Enter block"];
397 [label="Access variable R|<local>/b|"]; 397 [label="Access variable R|<local>/b|"];
398 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 398 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
399 [label="Exit block"]; 399 [label="Exit block"];
} }
400 [label="Exit when branch result"]; 400 [label="Exit when branch result"];
401 [label="Exit when"]; 401 [label="Exit when"];
} }
402 [label="Access variable R|<local>/b|"]; 402 [label="Access variable R|<local>/b|"];
403 [label="Function call: R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#()"]; 403 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()"];
404 [label="Exit block"]; 404 [label="Exit block"];
} }
405 [label="Exit function test_10" style="filled" fillcolor=red]; 405 [label="Exit function test_10" style="filled" fillcolor=red];
@@ -1139,11 +1139,11 @@ digraph nullability_kt {
436 [label="Access variable R|/QImpl.data|"]; 436 [label="Access variable R|/QImpl.data|"];
437 [label="Access variable R|<local>/q2|"]; 437 [label="Access variable R|<local>/q2|"];
438 [label="Access variable R|/QImpl.data|"]; 438 [label="Access variable R|/QImpl.data|"];
439 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 439 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
440 [label="Access variable R|<local>/q2|"]; 440 [label="Access variable R|<local>/q2|"];
441 [label="Access variable R|/QImpl.data|"]; 441 [label="Access variable R|/QImpl.data|"];
442 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 442 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
443 [label="Function call: R|<local>/q2|.R|/QImpl.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|()"]; 443 [label="Function call: R|<local>/q2|.R|/QImpl.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()"];
subgraph cluster_94 { subgraph cluster_94 {
color=blue color=blue
444 [label="Enter when"]; 444 [label="Enter when"];
@@ -1280,11 +1280,11 @@ digraph nullability_kt {
490 [label="Access variable R|/QImplWithCustomGetter.data|"]; 490 [label="Access variable R|/QImplWithCustomGetter.data|"];
491 [label="Access variable R|<local>/q|"]; 491 [label="Access variable R|<local>/q|"];
492 [label="Access variable R|/QImplWithCustomGetter.data|"]; 492 [label="Access variable R|/QImplWithCustomGetter.data|"];
493 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 493 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
494 [label="Access variable R|<local>/q|"]; 494 [label="Access variable R|<local>/q|"];
495 [label="Access variable R|/QImplWithCustomGetter.data|"]; 495 [label="Access variable R|/QImplWithCustomGetter.data|"];
496 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 496 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
497 [label="Function call: R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|()"]; 497 [label="Function call: R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()"];
498 [label="Exit block"]; 498 [label="Exit block"];
} }
499 [label="Exit when branch result"]; 499 [label="Exit when branch result"];
@@ -1363,11 +1363,11 @@ digraph nullability_kt {
524 [label="Access variable R|/QImplMutable.data|"]; 524 [label="Access variable R|/QImplMutable.data|"];
525 [label="Access variable R|<local>/q|"]; 525 [label="Access variable R|<local>/q|"];
526 [label="Access variable R|/QImplMutable.data|"]; 526 [label="Access variable R|/QImplMutable.data|"];
527 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 527 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
528 [label="Access variable R|<local>/q|"]; 528 [label="Access variable R|<local>/q|"];
529 [label="Access variable R|/QImplMutable.data|"]; 529 [label="Access variable R|/QImplMutable.data|"];
530 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#"]; 530 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
531 [label="Function call: R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|()"]; 531 [label="Function call: R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()"];
532 [label="Exit block"]; 532 [label="Exit block"];
} }
533 [label="Exit when branch result"]; 533 [label="Exit when branch result"];
@@ -67,23 +67,23 @@ FILE: nullability.kt
R|<local>/x|.R|/A.foo|() R|<local>/x|.R|/A.foo|()
} }
else -> { else -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
} }
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun test_2(x: R|A?|): R|kotlin/Unit| { public final fun test_2(x: R|A?|): R|kotlin/Unit| {
when () { when () {
==(R|<local>/x|, Null(null)) -> { ==(R|<local>/x|, Null(null)) -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
else -> { else -> {
R|<local>/x|.R|/A.foo|() R|<local>/x|.R|/A.foo|()
} }
} }
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
public final fun test_3(x: R|A?|): R|kotlin/Unit| { public final fun test_3(x: R|A?|): R|kotlin/Unit| {
R|<local>/x| ?: ^test_3 Unit R|<local>/x| ?: ^test_3 Unit
@@ -102,8 +102,8 @@ FILE: nullability.kt
when () { when () {
!=(R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> { !=(R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/Q.data| R|<local>/q|.R|/Q.data|
R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s># R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#
R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|() R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()
} }
} }
@@ -111,15 +111,15 @@ FILE: nullability.kt
public final fun test_6(q: R|Q?|): R|kotlin/Unit| { public final fun test_6(q: R|Q?|): R|kotlin/Unit| {
R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() } ?: ^test_6 Unit R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() } ?: ^test_6 Unit
R|<local>/q|.R|/Q.data| R|<local>/q|.R|/Q.data|
R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s># R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#
R|<local>/q|.R|/Q.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|() R|<local>/q|.R|/Q.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()
} }
public final fun test_7(q: R|Q?|): R|kotlin/Unit| { public final fun test_7(q: R|Q?|): R|kotlin/Unit| {
when () { when () {
!=(R|<local>/q|?.{ $subj$.R|/Q.fdata|() }?.{ $subj$.R|/MyData.fs|() }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> { !=(R|<local>/q|?.{ $subj$.R|/Q.fdata|() }?.{ $subj$.R|/MyData.fs|() }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/Q.fdata|() R|<local>/q|.R|/Q.fdata|()
R|<local>/q|.R|/Q.fdata|().<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.fs>#() R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#()
R|<local>/q|.R|/Q.fdata|().<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.fs>#().R|kotlin/Int.inc|() R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#().R|kotlin/Int.inc|()
} }
} }
@@ -139,58 +139,58 @@ FILE: nullability.kt
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
===(R|<local>/a|, R|<local>/b|) -> { ===(R|<local>/a|, R|<local>/b|) -> {
R|<local>/b|.R|kotlin/Int.inc|() R|<local>/b|.R|kotlin/Int.inc|()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
==(R|<local>/b|, R|<local>/a|) -> { ==(R|<local>/b|, R|<local>/a|) -> {
R|<local>/b|.R|kotlin/Int.inc|() R|<local>/b|.R|kotlin/Int.inc|()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
===(R|<local>/b|, R|<local>/a|) -> { ===(R|<local>/b|, R|<local>/a|) -> {
R|<local>/b|.R|kotlin/Int.inc|() R|<local>/b|.R|kotlin/Int.inc|()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
public final fun test_10(a: R|kotlin/Int?|, b: R|kotlin/Int?|): R|kotlin/Unit| { public final fun test_10(a: R|kotlin/Int?|, b: R|kotlin/Int?|): R|kotlin/Unit| {
when () { when () {
==(R|<local>/a|, R|<local>/b|) -> { ==(R|<local>/a|, R|<local>/b|) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
===(R|<local>/a|, R|<local>/b|) -> { ===(R|<local>/a|, R|<local>/b|) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
==(R|<local>/b|, R|<local>/a|) -> { ==(R|<local>/b|, R|<local>/a|) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
when () { when () {
===(R|<local>/b|, R|<local>/a|) -> { ===(R|<local>/b|, R|<local>/a|) -> {
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
} }
R|<local>/b|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/Int.inc>#() R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()
} }
public final fun test_11(q: R|QImpl?|, q2: R|QImpl|): R|kotlin/Unit| { public final fun test_11(q: R|QImpl?|, q2: R|QImpl|): R|kotlin/Unit| {
when () { when () {
@@ -199,8 +199,8 @@ FILE: nullability.kt
R|<local>/q|.R|/QImpl.data|.R|/MyData.s| R|<local>/q|.R|/QImpl.data|.R|/MyData.s|
R|<local>/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|() R|<local>/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()
R|<local>/q2|.R|/QImpl.data| R|<local>/q2|.R|/QImpl.data|
R|<local>/q2|.R|/QImpl.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s># R|<local>/q2|.R|/QImpl.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#
R|<local>/q2|.R|/QImpl.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|() R|<local>/q2|.R|/QImpl.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()
when () { when () {
!=(R|<local>/q2|.R|/QImpl.data|, Null(null)) -> { !=(R|<local>/q2|.R|/QImpl.data|, Null(null)) -> {
R|<local>/q2|.R|/QImpl.data|.R|/MyData.s| R|<local>/q2|.R|/QImpl.data|.R|/MyData.s|
@@ -216,8 +216,8 @@ FILE: nullability.kt
when () { when () {
!=(R|<local>/q|?.{ $subj$.R|/QImplWithCustomGetter.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> { !=(R|<local>/q|?.{ $subj$.R|/QImplWithCustomGetter.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/QImplWithCustomGetter.data| R|<local>/q|.R|/QImplWithCustomGetter.data|
R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s># R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#
R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|() R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()
} }
} }
@@ -226,8 +226,8 @@ FILE: nullability.kt
when () { when () {
!=(R|<local>/q|?.{ $subj$.R|/QImplMutable.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> { !=(R|<local>/q|?.{ $subj$.R|/QImplMutable.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/QImplMutable.data| R|<local>/q|.R|/QImplMutable.data|
R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s># R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#
R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /MyData.s>#.R|kotlin/Int.inc|() R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()
} }
} }
@@ -22,6 +22,6 @@ fun test_3(a: Any?, b: Boolean) {
fun test_4(a: Any?, b: Boolean) { fun test_4(a: Any?, b: Boolean) {
if (a is String || b) { if (a is String || b) {
a<!UNSAFE_CALL!>.<!>foo() // Should be Bad a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // Should be Bad
} }
} }
@@ -54,7 +54,7 @@ digraph safeCallAndEqualityToBool_kt {
color=blue color=blue
21 [label="Enter block"]; 21 [label="Enter block"];
22 [label="Access variable R|<local>/s|"]; 22 [label="Access variable R|<local>/s|"];
23 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 23 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
24 [label="Exit block"]; 24 [label="Exit block"];
} }
25 [label="Exit when branch result"]; 25 [label="Exit when branch result"];
@@ -131,7 +131,7 @@ digraph safeCallAndEqualityToBool_kt {
color=blue color=blue
49 [label="Enter block"]; 49 [label="Enter block"];
50 [label="Access variable R|<local>/s|"]; 50 [label="Access variable R|<local>/s|"];
51 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 51 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
52 [label="Exit block"]; 52 [label="Exit block"];
} }
53 [label="Exit when branch result"]; 53 [label="Exit when branch result"];
@@ -217,7 +217,7 @@ digraph safeCallAndEqualityToBool_kt {
color=blue color=blue
83 [label="Enter block"]; 83 [label="Enter block"];
84 [label="Access variable R|<local>/s|"]; 84 [label="Access variable R|<local>/s|"];
85 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 85 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
86 [label="Exit block"]; 86 [label="Exit block"];
} }
87 [label="Exit when branch result"]; 87 [label="Exit when branch result"];
@@ -294,7 +294,7 @@ digraph safeCallAndEqualityToBool_kt {
color=blue color=blue
111 [label="Enter block"]; 111 [label="Enter block"];
112 [label="Access variable R|<local>/s|"]; 112 [label="Access variable R|<local>/s|"];
113 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 113 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
114 [label="Exit block"]; 114 [label="Exit block"];
} }
115 [label="Exit when branch result"]; 115 [label="Exit when branch result"];
@@ -8,7 +8,7 @@ FILE: safeCallAndEqualityToBool.kt
R|<local>/s|.R|kotlin/String.length| R|<local>/s|.R|kotlin/String.length|
} }
else -> { else -> {
R|<local>/s|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/s|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
} }
@@ -19,7 +19,7 @@ FILE: safeCallAndEqualityToBool.kt
R|<local>/s|.R|kotlin/String.length| R|<local>/s|.R|kotlin/String.length|
} }
else -> { else -> {
R|<local>/s|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/s|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
} }
@@ -27,7 +27,7 @@ FILE: safeCallAndEqualityToBool.kt
public final fun test_3(s: R|kotlin/String?|): R|kotlin/Unit| { public final fun test_3(s: R|kotlin/String?|): R|kotlin/Unit| {
when () { when () {
!=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(true)) -> { !=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(true)) -> {
R|<local>/s|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/s|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
else -> { else -> {
R|<local>/s|.R|kotlin/String.length| R|<local>/s|.R|kotlin/String.length|
@@ -38,7 +38,7 @@ FILE: safeCallAndEqualityToBool.kt
public final fun test_4(s: R|kotlin/String?|): R|kotlin/Unit| { public final fun test_4(s: R|kotlin/String?|): R|kotlin/Unit| {
when () { when () {
!=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(false)) -> { !=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(false)) -> {
R|<local>/s|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/s|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
else -> { else -> {
R|<local>/s|.R|kotlin/String.length| R|<local>/s|.R|kotlin/String.length|
@@ -53,7 +53,7 @@ digraph safeCalls_kt {
19 [label="Function call: $subj$.R|/foo|(...)"]; 19 [label="Function call: $subj$.R|/foo|(...)"];
20 [label="Exit safe call"]; 20 [label="Exit safe call"];
21 [label="Access variable R|<local>/x|"]; 21 [label="Access variable R|<local>/x|"];
22 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 22 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
23 [label="Exit block"]; 23 [label="Exit block"];
} }
24 [label="Exit function test" style="filled" fillcolor=red]; 24 [label="Exit function test" style="filled" fillcolor=red];
@@ -208,7 +208,7 @@ digraph safeCalls_kt {
78 [label="Function call: $subj$.R|/A.bool|()"]; 78 [label="Function call: $subj$.R|/A.bool|()"];
79 [label="Exit safe call"]; 79 [label="Exit safe call"];
80 [label="Access variable R|<local>/x|"]; 80 [label="Access variable R|<local>/x|"];
81 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.id>#()"]; 81 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.id>#()"];
82 [label="Exit block"]; 82 [label="Exit block"];
} }
83 [label="Exit function test_4" style="filled" fillcolor=red]; 83 [label="Exit function test_4" style="filled" fillcolor=red];
@@ -272,7 +272,7 @@ digraph safeCalls_kt {
101 [label="Function call: $subj$.R|/boo|(...)"]; 101 [label="Function call: $subj$.R|/boo|(...)"];
102 [label="Exit safe call"]; 102 [label="Exit safe call"];
103 [label="Access variable R|<local>/x|"]; 103 [label="Access variable R|<local>/x|"];
104 [label="Function call: R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.id>#()"]; 104 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.id>#()"];
105 [label="Exit block"]; 105 [label="Exit block"];
} }
106 [label="Exit function test_5" style="filled" fillcolor=red]; 106 [label="Exit function test_5" style="filled" fillcolor=red];
@@ -6,7 +6,7 @@ FILE: safeCalls.kt
} }
public final fun test(x: R|kotlin/String?|): R|kotlin/Unit| { public final fun test(x: R|kotlin/String?|): R|kotlin/Unit| {
R|<local>/x|?.{ $subj$.R|/foo|(==(R|<local>/x|.R|kotlin/String.length|, Int(1))) } R|<local>/x|?.{ $subj$.R|/foo|(==(R|<local>/x|.R|kotlin/String.length|, Int(1))) }
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/x|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
public abstract interface A : R|kotlin/Any| { public abstract interface A : R|kotlin/Any| {
public abstract fun bar(a: R|A|): R|kotlin/String| public abstract fun bar(a: R|A|): R|kotlin/String|
@@ -28,7 +28,7 @@ FILE: safeCalls.kt
} }
public final fun test_4(x: R|A?|): R|kotlin/Unit| { public final fun test_4(x: R|A?|): R|kotlin/Unit| {
R|<local>/x|?.{ $subj$.R|/A.id|() }?.{ $subj$.R|/A.bool|() } R|<local>/x|?.{ $subj$.R|/A.id|() }?.{ $subj$.R|/A.bool|() }
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.id>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.id>#()
} }
public final fun R|kotlin/Any?|.boo(b: R|kotlin/Boolean|): R|kotlin/Unit| { public final fun R|kotlin/Any?|.boo(b: R|kotlin/Boolean|): R|kotlin/Unit| {
} }
@@ -37,5 +37,5 @@ FILE: safeCalls.kt
^test_5 Unit ^test_5 Unit
} }
) }?.{ $subj$.R|/boo|(R|<local>/x|.R|/A.bool|()) } ) }?.{ $subj$.R|/boo|(R|<local>/x|.R|/A.bool|()) }
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.id>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.id>#()
} }
@@ -77,7 +77,7 @@ digraph delayedAssignment_kt {
32 [label="Exit when"]; 32 [label="Exit when"];
} }
33 [label="Access variable R|<local>/a|"]; 33 [label="Access variable R|<local>/a|"];
34 [label="Function call: R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#()"]; 34 [label="Function call: R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()"];
35 [label="Exit block"]; 35 [label="Exit block"];
} }
36 [label="Exit function test" style="filled" fillcolor=red]; 36 [label="Exit function test" style="filled" fillcolor=red];
@@ -20,5 +20,5 @@ FILE: delayedAssignment.kt
} }
} }
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /A.foo>#() R|<local>/a|.<Inapplicable(UNSAFE_CALL): /A.foo>#()
} }
@@ -103,7 +103,7 @@ digraph smartcastAfterReassignment_kt {
40 [label="Const: Null(null)"]; 40 [label="Const: Null(null)"];
41 [label="Assignment: R|<local>/x|"]; 41 [label="Assignment: R|<local>/x|"];
42 [label="Access variable R|<local>/x|"]; 42 [label="Access variable R|<local>/x|"];
43 [label="Access variable <Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length>#"]; 43 [label="Access variable <Inapplicable(UNSAFE_CALL): kotlin/String.length>#"];
44 [label="Exit block"]; 44 [label="Exit block"];
} }
45 [label="Exit function test_3" style="filled" fillcolor=red]; 45 [label="Exit function test_3" style="filled" fillcolor=red];
@@ -19,5 +19,5 @@ FILE: smartcastAfterReassignment.kt
R|<local>/x| = String() R|<local>/x| = String()
R|<local>/x|.R|kotlin/String.length| R|<local>/x|.R|kotlin/String.length|
R|<local>/x| = Null(null) R|<local>/x| = Null(null)
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/x|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
@@ -10,7 +10,7 @@ FILE: notIsNullOrEmpty.kt
public final fun test_2(s: R|kotlin/String?|): R|kotlin/Unit| { public final fun test_2(s: R|kotlin/String?|): R|kotlin/Unit| {
when () { when () {
R|<local>/s|.R|kotlin/text/isNullOrEmpty|() -> { R|<local>/s|.R|kotlin/text/isNullOrEmpty|() -> {
R|<local>/s|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/s|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
else -> { else -> {
R|<local>/s|.R|kotlin/String.length| R|<local>/s|.R|kotlin/String.length|
@@ -29,7 +29,7 @@ FILE: eqNotEq.kt
R|<local>/x|.R|kotlin/String.length| R|<local>/x|.R|kotlin/String.length|
} }
else -> { else -> {
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): kotlin/String.length># R|<local>/x|.<Inapplicable(UNSAFE_CALL): kotlin/String.length>#
} }
} }
@@ -33,7 +33,7 @@ FILE: receivers.kt
this@R|special/anonymous|.R|/myRequireNotNull|() this@R|special/anonymous|.R|/myRequireNotNull|()
} }
) )
R|<local>/x|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /foo>#() R|<local>/x|.<Inapplicable(UNSAFE_CALL): /foo>#()
} }
public final fun test_4(x: R|A?|): R|kotlin/Unit| { public final fun test_4(x: R|A?|): R|kotlin/Unit| {
R|kotlin/with|<R|A?|, R|kotlin/Unit|>(R|<local>/x|, <L> = with@fun R|A?|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> { R|kotlin/with|<R|A?|, R|kotlin/Unit|>(R|<local>/x|, <L> = with@fun R|A?|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.calls.InapplicableWrongReceiver import org.jetbrains.kotlin.fir.resolve.calls.UnsafeCall
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
@@ -105,7 +105,7 @@ object FirForLoopChecker : FirBlockChecker() {
is ConeInapplicableCandidateError -> { is ConeInapplicableCandidateError -> {
if (unsafeCallFactory != null || noneApplicableFactory != null) { if (unsafeCallFactory != null || noneApplicableFactory != null) {
diagnostic.candidate.diagnostics.filter { it.applicability == diagnostic.applicability }.forEach { diagnostic.candidate.diagnostics.filter { it.applicability == diagnostic.applicability }.forEach {
if (it is InapplicableWrongReceiver) { if (it is UnsafeCall) {
if (unsafeCallFactory != null) { if (unsafeCallFactory != null) {
reporter.reportOn( reporter.reportOn(
reportSource, unsafeCallFactory, context reportSource, unsafeCallFactory, context
@@ -84,40 +84,34 @@ private fun ConeKotlinType.isEffectivelyNotNull(): Boolean {
private fun mapUnsafeCallError( private fun mapUnsafeCallError(
diagnostic: ConeInapplicableCandidateError, diagnostic: ConeInapplicableCandidateError,
source: FirSourceElement, source: FirSourceElement,
rootCause: ResolutionDiagnostic?, rootCause: UnsafeCall,
qualifiedAccessSource: FirSourceElement?, qualifiedAccessSource: FirSourceElement?,
): FirDiagnostic<*>? { ): FirDiagnostic<*> {
if (rootCause !is InapplicableWrongReceiver) return null if (diagnostic.candidate.callInfo.isImplicitInvoke) {
val actualType = rootCause.actualType ?: return null return FirErrors.UNSAFE_IMPLICIT_INVOKE_CALL.on(source, rootCause.actualType)
val expectedType = rootCause.expectedType }
if (actualType.isNullable && (expectedType == null || expectedType.isEffectivelyNotNull())) {
if (diagnostic.candidate.callInfo.isImplicitInvoke) {
return FirErrors.UNSAFE_IMPLICIT_INVOKE_CALL.on(source, actualType)
}
val candidateFunction = diagnostic.candidate.symbol.fir as? FirSimpleFunction val candidateFunction = diagnostic.candidate.symbol.fir as? FirSimpleFunction
val candidateFunctionName = candidateFunction?.name val candidateFunctionName = candidateFunction?.name
val left = diagnostic.candidate.callInfo.explicitReceiver val left = diagnostic.candidate.callInfo.explicitReceiver
val right = diagnostic.candidate.callInfo.argumentList.arguments.singleOrNull() val right = diagnostic.candidate.callInfo.argumentList.arguments.singleOrNull()
if (left != null && right != null && if (left != null && right != null &&
source.elementType == KtNodeTypes.OPERATION_REFERENCE && source.elementType == KtNodeTypes.OPERATION_REFERENCE &&
(candidateFunction?.isOperator == true || candidateFunction?.isInfix == true) (candidateFunction?.isOperator == true || candidateFunction?.isInfix == true)
) { ) {
val operationToken = source.getChild(KtTokens.IDENTIFIER) val operationToken = source.getChild(KtTokens.IDENTIFIER)
if (candidateFunction.isInfix && operationToken?.elementType == KtTokens.IDENTIFIER) { if (candidateFunction.isInfix && operationToken?.elementType == KtTokens.IDENTIFIER) {
return FirErrors.UNSAFE_INFIX_CALL.on(source, left, candidateFunctionName!!.asString(), right) return FirErrors.UNSAFE_INFIX_CALL.on(source, left, candidateFunctionName!!.asString(), right)
}
if (candidateFunction.isOperator && operationToken == null) {
return FirErrors.UNSAFE_OPERATOR_CALL.on(source, left, candidateFunctionName!!.asString(), right)
}
} }
return if (source.kind == FirFakeSourceElementKind.ArrayAccessNameReference) { if (candidateFunction.isOperator && operationToken == null) {
FirErrors.UNSAFE_CALL.on(source, actualType) return FirErrors.UNSAFE_OPERATOR_CALL.on(source, left, candidateFunctionName!!.asString(), right)
} else {
FirErrors.UNSAFE_CALL.on(qualifiedAccessSource ?: source, actualType)
} }
} }
return null return if (source.kind == FirFakeSourceElementKind.ArrayAccessNameReference) {
FirErrors.UNSAFE_CALL.on(source, rootCause.actualType)
} else {
FirErrors.UNSAFE_CALL.on(qualifiedAccessSource ?: source, rootCause.actualType)
}
} }
private fun mapInapplicableCandidateError( private fun mapInapplicableCandidateError(
@@ -127,8 +121,6 @@ private fun mapInapplicableCandidateError(
): List<FirDiagnostic<FirSourceElement>> { ): List<FirDiagnostic<FirSourceElement>> {
// TODO: Need to distinguish SMARTCAST_IMPOSSIBLE // TODO: Need to distinguish SMARTCAST_IMPOSSIBLE
return diagnostic.candidate.diagnostics.filter { it.applicability == diagnostic.applicability }.mapNotNull { rootCause -> return diagnostic.candidate.diagnostics.filter { it.applicability == diagnostic.applicability }.mapNotNull { rootCause ->
mapUnsafeCallError(diagnostic, source, rootCause, qualifiedAccessSource)?.let { return@mapNotNull it }
when (rootCause) { when (rootCause) {
is VarargArgumentOutsideParentheses -> FirErrors.VARARG_OUTSIDE_PARENTHESES.on( is VarargArgumentOutsideParentheses -> FirErrors.VARARG_OUTSIDE_PARENTHESES.on(
rootCause.argument.source ?: qualifiedAccessSource rootCause.argument.source ?: qualifiedAccessSource
@@ -153,6 +145,7 @@ private fun mapInapplicableCandidateError(
rootCause.argument.source ?: source, rootCause.argument.source ?: source,
rootCause.argument.name.asString() rootCause.argument.name.asString()
) )
is UnsafeCall -> mapUnsafeCallError(diagnostic, source, rootCause, qualifiedAccessSource)
else -> null else -> null
} }
}.ifEmpty { listOf(FirErrors.INAPPLICABLE_CANDIDATE.on(source, diagnostic.candidate.symbol)) } }.ifEmpty { listOf(FirErrors.INAPPLICABLE_CANDIDATE.on(source, diagnostic.candidate.symbol)) }
@@ -400,7 +400,7 @@ private fun checkApplicabilityForArgumentType(
val nullableExpectedType = expectedType.withNullability(ConeNullability.NULLABLE, context.session.typeContext) val nullableExpectedType = expectedType.withNullability(ConeNullability.NULLABLE, context.session.typeContext)
if (csBuilder.addSubtypeConstraintIfCompatible(argumentType, nullableExpectedType, position)) { if (csBuilder.addSubtypeConstraintIfCompatible(argumentType, nullableExpectedType, position)) {
sink.reportDiagnostic(InapplicableWrongReceiver(expectedType, argumentType)) // TODO sink.reportDiagnostic(UnsafeCall(argumentType)) // TODO
} else { } else {
csBuilder.addSubtypeConstraint(argumentType, expectedType, position) csBuilder.addSubtypeConstraint(argumentType, expectedType, position)
sink.reportDiagnostic(InapplicableWrongReceiver(expectedType, argumentType)) sink.reportDiagnostic(InapplicableWrongReceiver(expectedType, argumentType))
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.fir.resolve.calls package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability.* import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability.*
@@ -67,6 +67,8 @@ class InapplicableWrongReceiver(
val actualType: ConeKotlinType? = null, val actualType: ConeKotlinType? = null,
) : ResolutionDiagnostic(INAPPLICABLE_WRONG_RECEIVER) ) : ResolutionDiagnostic(INAPPLICABLE_WRONG_RECEIVER)
class UnsafeCall(val actualType: ConeKotlinType) : ResolutionDiagnostic(UNSAFE_CALL)
object LowerPriorityToPreserveCompatibilityDiagnostic : ResolutionDiagnostic(RESOLVED_NEED_PRESERVE_COMPATIBILITY) object LowerPriorityToPreserveCompatibilityDiagnostic : ResolutionDiagnostic(RESOLVED_NEED_PRESERVE_COMPATIBILITY)
object CandidateChosenUsingOverloadResolutionByLambdaAnnotation : ResolutionDiagnostic(RESOLVED) object CandidateChosenUsingOverloadResolutionByLambdaAnnotation : ResolutionDiagnostic(RESOLVED)
@@ -6,19 +6,22 @@
package org.jetbrains.kotlin.fir.resolve.calls package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.FirVisibilityChecker
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.inference.* import org.jetbrains.kotlin.fir.resolve.inference.*
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visibilityChecker
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -106,7 +109,7 @@ object CheckDispatchReceiver : ResolutionStage() {
val dispatchReceiverValueType = candidate.dispatchReceiverValue?.type ?: return val dispatchReceiverValueType = candidate.dispatchReceiverValue?.type ?: return
if (!AbstractNullabilityChecker.isSubtypeOfAny(context.session.typeContext, dispatchReceiverValueType)) { if (!AbstractNullabilityChecker.isSubtypeOfAny(context.session.typeContext, dispatchReceiverValueType)) {
sink.yieldDiagnostic(InapplicableWrongReceiver(actualType = dispatchReceiverValueType)) sink.yieldDiagnostic(UnsafeCall(dispatchReceiverValueType))
} }
} }
} }
@@ -954,6 +954,7 @@ fun CandidateApplicability.toResolutionStatus(): ResolutionStatus = when (this)
CandidateApplicability.RESOLVED_WITH_ERROR, CandidateApplicability.RESOLVED_WITH_ERROR,
CandidateApplicability.RESOLVED_NEED_PRESERVE_COMPATIBILITY -> ResolutionStatus.SUCCESS CandidateApplicability.RESOLVED_NEED_PRESERVE_COMPATIBILITY -> ResolutionStatus.SUCCESS
CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ResolutionStatus.RECEIVER_TYPE_ERROR CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ResolutionStatus.RECEIVER_TYPE_ERROR
CandidateApplicability.UNSAFE_CALL -> ResolutionStatus.UNSAFE_CALL_ERROR
else -> ResolutionStatus.OTHER_ERROR else -> ResolutionStatus.OTHER_ERROR
} }
@@ -611,7 +611,7 @@ internal class PreviousResolutionError(candidateLevel: CandidateApplicability) :
internal fun createPreviousResolveError(status: ResolutionStatus): PreviousResolutionError? { internal fun createPreviousResolveError(status: ResolutionStatus): PreviousResolutionError? {
val level = when (status) { val level = when (status) {
ResolutionStatus.SUCCESS, ResolutionStatus.INCOMPLETE_TYPE_INFERENCE -> return null ResolutionStatus.SUCCESS, ResolutionStatus.INCOMPLETE_TYPE_INFERENCE -> return null
ResolutionStatus.UNSAFE_CALL_ERROR -> CandidateApplicability.MAY_THROW_RUNTIME_ERROR ResolutionStatus.UNSAFE_CALL_ERROR -> CandidateApplicability.UNSAFE_CALL
ResolutionStatus.ARGUMENTS_MAPPING_ERROR -> CandidateApplicability.INAPPLICABLE_ARGUMENTS_MAPPING_ERROR ResolutionStatus.ARGUMENTS_MAPPING_ERROR -> CandidateApplicability.INAPPLICABLE_ARGUMENTS_MAPPING_ERROR
ResolutionStatus.RECEIVER_TYPE_ERROR -> CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER ResolutionStatus.RECEIVER_TYPE_ERROR -> CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER
else -> CandidateApplicability.INAPPLICABLE else -> CandidateApplicability.INAPPLICABLE
@@ -13,7 +13,8 @@ enum class CandidateApplicability {
INAPPLICABLE, // arguments have wrong types INAPPLICABLE, // arguments have wrong types
IMPOSSIBLE_TO_GENERATE, // access to outer class from nested IMPOSSIBLE_TO_GENERATE, // access to outer class from nested
RUNTIME_ERROR, // problems with visibility RUNTIME_ERROR, // problems with visibility
MAY_THROW_RUNTIME_ERROR, // unsafe call or unstable smart cast UNSAFE_CALL, // receiver nullability doesn't match
MAY_THROW_RUNTIME_ERROR, // unstable smart cast
CONVENTION_ERROR, // missing infix, operator etc CONVENTION_ERROR, // missing infix, operator etc
RESOLVED_LOW_PRIORITY, RESOLVED_LOW_PRIORITY,
RESOLVED_NEED_PRESERVE_COMPATIBILITY, // call resolved successfully, but using new features that changes resolve RESOLVED_NEED_PRESERVE_COMPATIBILITY, // call resolved successfully, but using new features that changes resolve
@@ -170,7 +170,7 @@ class UnstableSmartCastDiagnosticError(
class UnsafeCallError( class UnsafeCallError(
val receiver: SimpleKotlinCallArgument, val receiver: SimpleKotlinCallArgument,
val isForImplicitInvoke: Boolean = false val isForImplicitInvoke: Boolean = false
) : KotlinCallDiagnostic(MAY_THROW_RUNTIME_ERROR) { ) : KotlinCallDiagnostic(UNSAFE_CALL) {
override fun report(reporter: DiagnosticReporter) = reporter.onCallReceiver(receiver, this) override fun report(reporter: DiagnosticReporter) = reporter.onCallReceiver(receiver, this)
} }
+10 -10
View File
@@ -38,13 +38,13 @@ fun test() {
if (out != null && ins != null || out != null) { if (out != null && ins != null || out != null) {
ins?.read(); ins?.read();
ins.<!NONE_APPLICABLE!>read<!>(); ins<!UNSAFE_CALL!>.<!>read();
out.println(); out.println();
} }
if (out == null || out.println(0) == Unit) { if (out == null || out.println(0) == Unit) {
out?.println(1) out?.println(1)
out.println(<!TOO_MANY_ARGUMENTS!>1<!>) out.<!NONE_APPLICABLE!>println<!>(1)
} }
else { else {
out.println(2) out.println(2)
@@ -66,11 +66,11 @@ fun test() {
if (1 == 2 || out != null && out.println(1) == Unit) { if (1 == 2 || out != null && out.println(1) == Unit) {
out?.println(2); out?.println(2);
out.println(<!TOO_MANY_ARGUMENTS!>2<!>); out.<!NONE_APPLICABLE!>println<!>(2);
} }
else { else {
out?.println(3) out?.println(3)
out.println(<!TOO_MANY_ARGUMENTS!>3<!>) out.<!NONE_APPLICABLE!>println<!>(3)
} }
out?.println() out?.println()
@@ -103,7 +103,7 @@ fun test() {
if (out == null || out.println(0) == Unit) { if (out == null || out.println(0) == Unit) {
out?.println(1) out?.println(1)
out.println(<!TOO_MANY_ARGUMENTS!>1<!>) out.<!NONE_APPLICABLE!>println<!>(1)
} }
else { else {
out.println(2) out.println(2)
@@ -114,12 +114,12 @@ fun test() {
} }
else { else {
out?.println(); out?.println();
out.<!NONE_APPLICABLE!>println<!>(); out<!UNSAFE_CALL!>.<!>println();
} }
if (out == null || out.println() == Unit) { if (out == null || out.println() == Unit) {
out?.println(); out?.println();
out.<!NONE_APPLICABLE!>println<!>(); out<!UNSAFE_CALL!>.<!>println();
} }
else { else {
out.println(); out.println();
@@ -127,11 +127,11 @@ fun test() {
if (1 == 2 || out != null && out.println(1) == Unit) { if (1 == 2 || out != null && out.println(1) == Unit) {
out?.println(2); out?.println(2);
out.println(<!TOO_MANY_ARGUMENTS!>2<!>); out.<!NONE_APPLICABLE!>println<!>(2);
} }
else { else {
out?.println(3) out?.println(3)
out.println(<!TOO_MANY_ARGUMENTS!>3<!>) out.<!NONE_APPLICABLE!>println<!>(3)
} }
if (1 > 2) { if (1 > 2) {
@@ -149,7 +149,7 @@ fun test() {
while (out2 == null) { while (out2 == null) {
out2?.println(); out2?.println();
out2.<!NONE_APPLICABLE!>println<!>(); out2<!UNSAFE_CALL!>.<!>println();
} }
out2.println() out2.println()
@@ -19,14 +19,14 @@ fun <F> main(x: F, y: F, z: F, w: F, m: F) {
val w1 = if (z != null) z else return val w1 = if (z != null) z else return
val w2: F!! = if (w != null) w else return val w2: F!! = if (w != null) w else return
y1.<!INAPPLICABLE_CANDIDATE!>foo<!>() y1<!UNSAFE_CALL!>.<!>foo()
y2.<!INAPPLICABLE_CANDIDATE!>foo<!>() y2<!UNSAFE_CALL!>.<!>foo()
x1.foo() x1.foo()
x2.<!INAPPLICABLE_CANDIDATE!>foo<!>() x2<!UNSAFE_CALL!>.<!>foo()
z1.foo() z1.foo()
z2.<!INAPPLICABLE_CANDIDATE!>foo<!>() z2<!UNSAFE_CALL!>.<!>foo()
w1.foo() w1.foo()
w2.<!INAPPLICABLE_CANDIDATE!>foo<!>() w2<!UNSAFE_CALL!>.<!>foo()
expectNN(m) expectNN(m)
expectNN(m!!) expectNN(m!!)
@@ -8,7 +8,7 @@ fun <R> List<R>.a() {}
fun test1(i: Int?) { fun test1(i: Int?) {
1.<!INAPPLICABLE_CANDIDATE!>a<!>() 1.<!INAPPLICABLE_CANDIDATE!>a<!>()
i<!UNSAFE_CALL!>.<!>a() i.<!INAPPLICABLE_CANDIDATE!>a<!>()
} }
fun <R> test2(c: Collection<R>) { fun <R> test2(c: Collection<R>) {
@@ -19,7 +19,7 @@ fun Int.foo() {}
fun test3(s: String?) { fun test3(s: String?) {
"".<!INAPPLICABLE_CANDIDATE!>foo<!>() "".<!INAPPLICABLE_CANDIDATE!>foo<!>()
s<!UNSAFE_CALL!>.<!>foo() s.<!INAPPLICABLE_CANDIDATE!>foo<!>()
"".foo(<!TOO_MANY_ARGUMENTS!>1<!>) "".foo(<!TOO_MANY_ARGUMENTS!>1<!>)
s.foo(<!TOO_MANY_ARGUMENTS!>"a"<!>) s.foo(<!TOO_MANY_ARGUMENTS!>"a"<!>)
} }
@@ -52,5 +52,5 @@ fun test7(l: List<String?>) {
} }
fun test8(l: List<Any>?) { fun test8(l: List<Any>?) {
l<!UNSAFE_CALL!>.<!>b() l.<!INAPPLICABLE_CANDIDATE!>b<!>()
} }
@@ -13,7 +13,7 @@ fun <F : String?> bar(x: F) {
foo1(<!ARGUMENT_TYPE_MISMATCH!>x<!>) foo1(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
foo1<F>(<!ARGUMENT_TYPE_MISMATCH!>x<!>) foo1<F>(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
x.<!INAPPLICABLE_CANDIDATE!>foo2<!>() x<!UNSAFE_CALL!>.<!>foo2()
x.<!INAPPLICABLE_CANDIDATE!>foo2<!><F>() x.<!INAPPLICABLE_CANDIDATE!>foo2<!><F>()
} }
@@ -1,6 +1,6 @@
fun <E : String?, T : ((CharSequence) -> Unit)?> foo(x: E, y: T) { fun <E : String?, T : ((CharSequence) -> Unit)?> foo(x: E, y: T) {
if (x != null) { if (x != null) {
<!INAPPLICABLE_CANDIDATE!>y<!>(x) <!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>(x)
} }
if (y != null) { if (y != null) {
@@ -1,6 +1,6 @@
fun <T : Any?> foo(x: T) { fun <T : Any?> foo(x: T) {
if (x is String?) { if (x is String?) {
x.<!INAPPLICABLE_CANDIDATE!>length<!> x<!UNSAFE_CALL!>.<!>length
if (x != null) { if (x != null) {
x.length x.length
@@ -24,7 +24,7 @@ fun <T : CharSequence?> foo(x: T) {
x<!UNNECESSARY_SAFE_CALL!>?.<!>bar1() x<!UNNECESSARY_SAFE_CALL!>?.<!>bar1()
} }
x.<!INAPPLICABLE_CANDIDATE!>length<!> x<!UNSAFE_CALL!>.<!>length
if (x is String) { if (x is String) {
x.length x.length
@@ -23,7 +23,7 @@ fun <T : String?> T.foo() {
this<!UNNECESSARY_SAFE_CALL!>?.<!>bar1() this<!UNNECESSARY_SAFE_CALL!>?.<!>bar1()
} }
<!INAPPLICABLE_CANDIDATE!>length<!> <!UNSAFE_CALL!>length<!>
if (this is String) { if (this is String) {
length length
@@ -8,7 +8,7 @@ class A<T : CharSequence?, E1 : T, E2: T?> {
x.bar() x.bar()
if (1 == 1) { if (1 == 1) {
y.<!INAPPLICABLE_CANDIDATE!>bar<!>() y<!UNSAFE_CALL!>.<!>bar()
} }
x?.bar() x?.bar()
@@ -7,7 +7,7 @@ fun CharSequence?.bar2() {}
fun <T : CharSequence> T.bar3() {} fun <T : CharSequence> T.bar3() {}
fun <T : String?> foo(x: T) { fun <T : String?> foo(x: T) {
x.<!INAPPLICABLE_CANDIDATE!>length<!> x<!UNSAFE_CALL!>.<!>length
x?.length x?.length
if (1 == 1) { if (1 == 1) {
@@ -21,7 +21,7 @@ fun <T : String?> foo(x: T) {
x?.bar1() x?.bar1()
x?.bar2() x?.bar2()
x.<!INAPPLICABLE_CANDIDATE!>bar3<!>() x<!UNSAFE_CALL!>.<!>bar3()
x?.let { it.length } x?.let { it.length }
} }
@@ -8,5 +8,5 @@ fun Array<String>.length() : Int {
} }
fun test(array : Array<String?>?) { fun test(array : Array<String?>?) {
array?.sure<Array<String?>>()<!UNSAFE_CALL!>.<!>length() array?.sure<Array<String?>>().<!INAPPLICABLE_CANDIDATE!>length<!>()
} }
@@ -80,7 +80,7 @@ operator fun <T> Foo6<T>.invoke(x: Int) {}
fun main(x: Bar6<String>?) { fun main(x: Bar6<String>?) {
x?.value(1) x?.value(1)
x?.value.<!NONE_APPLICABLE!>invoke<!>(1) x?.value<!UNSAFE_CALL!>.<!>invoke(1)
} }
// Test case 7: top-level generic invoke and invoke with compatible additional dispatch recevier // Test case 7: top-level generic invoke and invoke with compatible additional dispatch recevier
@@ -108,7 +108,7 @@ operator fun Foo8<String>.invoke(x: Int) {}
fun main(x: Bar8<String>?) { fun main(x: Bar8<String>?) {
x?.value(1) x?.value(1)
x?.value.<!NONE_APPLICABLE!>invoke<!>(1) x?.value<!UNSAFE_CALL!>.<!>invoke(1)
} }
// Test case 9: additional receiver, generic invoke with pure type perameter receiver // Test case 9: additional receiver, generic invoke with pure type perameter receiver
@@ -12,7 +12,7 @@ fun test(a: A) {
with("") { with("") {
a.x(<!NO_VALUE_FOR_PARAMETER!>)<!> a.x(<!NO_VALUE_FOR_PARAMETER!>)<!>
(a.x)(<!NO_VALUE_FOR_PARAMETER!>)<!> <!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>()
if (a.x != null) { if (a.x != null) {
a.x(<!NO_VALUE_FOR_PARAMETER!>)<!> // todo a.x(<!NO_VALUE_FOR_PARAMETER!>)<!> // todo
(a.x)() (a.x)()
@@ -15,5 +15,5 @@ val test5: List<TNString?> = TODO()
val test6: () -> List<TNString> = TODO() val test6: () -> List<TNString> = TODO()
fun test(x: TNString) { fun test(x: TNString) {
x.<!INAPPLICABLE_CANDIDATE!>hashCode<!>() x<!UNSAFE_CALL!>.<!>hashCode()
} }
@@ -87,7 +87,7 @@ fun test() {
this@with.<!UNRESOLVED_REFERENCE!>yield<!>("") this@with.<!UNRESOLVED_REFERENCE!>yield<!>("")
yield2("") yield2("")
this@with<!UNSAFE_CALL!>.<!>yield2("") this@with.<!INAPPLICABLE_CANDIDATE!>yield2<!>("")
} }
} }
} }
@@ -103,8 +103,8 @@ fun case_7() {
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(x: TypealiasNullableString) { fun case_8(x: TypealiasNullableString) {
if (x !== null === null && <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> != null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>get<!>(0) if (x !== null === null && <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> != null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>get(0)
if (x !== null != null && <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> != null === null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>get<!>(0) if (x !== null != null && <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> != null === null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>get(0)
} }
// TESTCASE NUMBER: 9 // TESTCASE NUMBER: 9
@@ -169,11 +169,11 @@ fun case_12(x: TypealiasNullableStringIndirect, y: TypealiasNullableStringIndire
else if ((y === null !== null) is Boolean) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!> else if ((y === null !== null) is Boolean) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.equals(null) else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.equals(null)
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propT else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propT
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!><!UNSAFE_CALL!>.<!>propAny
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propNullableT else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propNullableT
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propNullableAny else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.propNullableAny
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funT() else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funT()
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!><!UNSAFE_CALL!>.<!>funAny()
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funNullableT() else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funNullableT()
else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funNullableAny() else if (y === null != null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableStringIndirect")!>x<!>.funNullableAny()
else "-1" else "-1"
@@ -256,7 +256,7 @@ fun case_16() {
if (x != null !is Boolean !is Boolean !is Boolean !is Boolean !is Boolean) { if (x != null !is Boolean !is Boolean !is Boolean !is Boolean !is Boolean) {
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableNothing")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableNothing")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableNothing")!>x<!>.<!INAPPLICABLE_CANDIDATE!>java<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableNothing")!>x<!><!UNSAFE_CALL!>.<!>java
} }
} }
@@ -14,7 +14,7 @@ fun case_1(x: Class?) {
fun case_2() { fun case_2() {
var x: Class? = <!INITIALIZER_TYPE_MISMATCH!>10<!> var x: Class? = <!INITIALIZER_TYPE_MISMATCH!>10<!>
x!! x!!
<!NONE_APPLICABLE!>x<!>(if (true) {x=null;0} else 0, <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>) <!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>(if (true) {x=null;0} else 0, <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>)
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1() <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1()
} }
@@ -23,7 +23,7 @@ fun case_2() {
fun case_3() { fun case_3() {
var x: Class? = Class() var x: Class? = Class()
x!! x!!
val y = <!DEBUG_INFO_EXPRESSION_TYPE("Class? & Class")!>x<!>[if (true) {x=null;0} else 0, <!NO_VALUE_FOR_PARAMETER!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>] val y = <!DEBUG_INFO_EXPRESSION_TYPE("Class? & Class")!>x<!>[if (true) {x=null;0} else 0, <!UNSAFE_CALL!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>]
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1() <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1()
} }
@@ -20,7 +20,7 @@ inline fun <reified T, reified K> case_1(x: T) {
inline fun <reified T, reified K> case_2(x: T) { inline fun <reified T, reified K> case_2(x: T) {
x as K x as K
<!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(x) <!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!><!UNSAFE_CALL!>.<!>equals(x)
} }
/* /*
@@ -49,7 +49,7 @@ inline fun <reified T, reified K> case_4(x: T?) {
inline fun <reified T, reified K> case_5(x: T) { inline fun <reified T, reified K> case_5(x: T) {
if (x is K?) { if (x is K?) {
<!DEBUG_INFO_EXPRESSION_TYPE("T & K? & T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & K? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & K? & T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(x) <!DEBUG_INFO_EXPRESSION_TYPE("T & K? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(x)
} }
} }
@@ -41,9 +41,9 @@ fun case_3() {
fun case_4() { fun case_4() {
var x: Class? = Class() var x: Class? = Class()
x!! x!!
val y = <!DEBUG_INFO_EXPRESSION_TYPE("Class? & Class")!>x<!>[if (true) {x=null;0} else 0, <!NO_VALUE_FOR_PARAMETER!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>] val y = <!DEBUG_INFO_EXPRESSION_TYPE("Class? & Class")!>x<!>[if (true) {x=null;0} else 0, <!UNSAFE_CALL!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>]
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>
<!NO_VALUE_FOR_PARAMETER!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>.inv() <!UNSAFE_CALL!><!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>[0]<!>.inv()
} }
/* /*
@@ -54,7 +54,7 @@ fun case_4() {
fun case_5() { fun case_5() {
var x: Class? = Class() var x: Class? = Class()
x!! x!!
<!NONE_APPLICABLE!>x<!>(if (true) {x=null;0} else 0, <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>) <!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>(if (true) {x=null;0} else 0, <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>)
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1() <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1()
} }
@@ -75,7 +75,7 @@ fun case_6() {
fun case_7() { fun case_7() {
var x: Class? = Class() var x: Class? = Class()
x!! x!!
<!NONE_APPLICABLE!>x<!>(if (true) {x=null;0} else 0)(<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>) <!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>(if (true) {x=null;0} else 0)(<!ARGUMENT_TYPE_MISMATCH, DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!>)
<!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1() <!DEBUG_INFO_EXPRESSION_TYPE("Class?")!>x<!><!UNSAFE_CALL!>.<!>fun_1()
} }
@@ -50,14 +50,14 @@ fun case_4(x: Class?, y: Any) {
fun case_5(x: Class?, y: String?) { fun case_5(x: Class?, y: String?) {
x?.prop_12 = y ?: return x?.prop_12 = y ?: return
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>.toUpperCase(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!><!UNSAFE_CALL!>.<!>toUpperCase()
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(x: Class?, y: String?) { fun case_6(x: Class?, y: String?) {
x?.prop_9 = y !is String && throw Exception() x?.prop_9 = y !is String && throw Exception()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>.toUpperCase(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!><!UNSAFE_CALL!>.<!>toUpperCase()
} }
/* /*
@@ -68,7 +68,7 @@ fun case_6(x: Class?, y: String?) {
fun case_7(x: Class?, y: String?) { fun case_7(x: Class?, y: String?) {
x?.prop_12 = y!! x?.prop_12 = y!!
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>.toUpperCase(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!><!UNSAFE_CALL!>.<!>toUpperCase()
} }
/* /*
@@ -79,5 +79,5 @@ fun case_7(x: Class?, y: String?) {
fun case_8(x: Class?, y: String?) { fun case_8(x: Class?, y: String?) {
x?.prop_12 = if (y === null) throw Exception() else "" x?.prop_12 = if (y === null) throw Exception() else ""
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!>.toUpperCase(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>y<!><!UNSAFE_CALL!>.<!>toUpperCase()
} }
@@ -20,7 +20,7 @@ fun case_1(x: Any) {
fun case_2(x: Any?) { fun case_2(x: Any?) {
if (x is Int || x is Float?) { if (x is Int || x is Float?) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!>.toByte(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!><!UNSAFE_CALL!>.<!>toByte()
} }
} }
@@ -31,7 +31,7 @@ fun case_2(x: Any?) {
fun case_3(x: Any?) { fun case_3(x: Any?) {
if (x is Int? || x is Float) { if (x is Int? || x is Float) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!>.toByte(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>?")!>x<!><!UNSAFE_CALL!>.<!>toByte()
} }
} }
@@ -75,7 +75,7 @@ fun <T> case_6(x: T) {
fun <T> case_7(x: T) { fun <T> case_7(x: T) {
if (x is Int? || x is Float?) { if (x is Int? || x is Float?) {
<!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!>.toByte(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!><!UNSAFE_CALL!>.<!>toByte()
} }
} }
@@ -86,7 +86,7 @@ fun <T> case_7(x: T) {
inline fun <reified T> case_8(x: T) { inline fun <reified T> case_8(x: T) {
if (x is Int? || x is Float?) { if (x is Int? || x is Float?) {
<!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!>.toByte(<!NO_VALUE_FOR_PARAMETER!>)<!> <!DEBUG_INFO_EXPRESSION_TYPE("T & kotlin.Number? & kotlin.Comparable<kotlin.Int & kotlin.Float>? & T")!>x<!><!UNSAFE_CALL!>.<!>toByte()
} }
} }
@@ -8,7 +8,7 @@ fun <T, K> case_1(x: T?, y: K?) {
y as K y as K
val z = <!DEBUG_INFO_EXPRESSION_TYPE("T? & T")!>x<!> ?: <!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!> val z = <!DEBUG_INFO_EXPRESSION_TYPE("T? & T")!>x<!> ?: <!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T? & T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(10) <!DEBUG_INFO_EXPRESSION_TYPE("T? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>z<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>z<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>z<!><!UNSAFE_CALL!>.<!>equals(10) <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>z<!><!UNSAFE_CALL!>.<!>equals(10)
} }
@@ -18,5 +18,5 @@ inline fun <reified T: Any, reified K: T?> case_2(y: K?) {
y as K y as K
<!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!> <!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!>
<!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(10) <!DEBUG_INFO_EXPRESSION_TYPE("K? & K")!>y<!><!UNSAFE_CALL!>.<!>equals(10)
} }
@@ -8,31 +8,31 @@ fun <T> case_1(x: T) {
if (y != x) { if (y != x) {
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableAny()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!INAPPLICABLE_CANDIDATE!>equals<!>(null) } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!UNSAFE_CALL!>equals<!>(null) }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propT } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propT }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!INAPPLICABLE_CANDIDATE!>propAny<!> } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!UNSAFE_CALL!>propAny<!> }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propNullableT } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propNullableT }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propNullableAny } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { propNullableAny }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funT() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funT() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!INAPPLICABLE_CANDIDATE!>funAny<!>() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { <!UNSAFE_CALL!>funAny<!>() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funNullableT() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funNullableT() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funNullableAny(); <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.apply { funNullableAny(); <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>equals(null) }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!><!UNSAFE_CALL!>.<!>equals(null) }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propT } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propT }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!><!UNSAFE_CALL!>.<!>propAny }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propNullableT } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propNullableT }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propNullableAny } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.propNullableAny }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funT() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funT() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!><!UNSAFE_CALL!>.<!>funAny() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funNullableT() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funNullableT() }
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funNullableAny() } <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.also { <!DEBUG_INFO_EXPRESSION_TYPE("T")!>it<!>.funNullableAny() }
} }
@@ -244,13 +244,13 @@ fun <T>case_18(x: T, f: Boolean) {
while (f) { while (f) {
if (false || false || false || x == nullableNothingProperty) break if (false || false || false || x == nullableNothingProperty) break
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("T")!>x<!>.funNullableAny()
} }
@@ -261,23 +261,23 @@ fun <K, V>case_19(map: MutableMap<K, V>, y: Nothing?) {
for ((k, v) in map) { for ((k, v) in map) {
if (k !== implicitNullableNothingProperty && true && v != y) else { break } if (k !== implicitNullableNothingProperty && true && v != y) else { break }
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!> <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!><!UNSAFE_CALL!>.<!>equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("K")!>k<!>.funNullableAny()
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!> <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.<!INAPPLICABLE_CANDIDATE!>equals<!>(null) <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!><!UNSAFE_CALL!>.<!>equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("V")!>v<!>.funNullableAny()
} }
@@ -142,11 +142,11 @@ fun case_8(x: TypealiasNullableString) {
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny()
} }
@@ -225,11 +225,11 @@ fun case_12(x: TypealiasNullableString, y: TypealiasNullableString, z1: Nothing?
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny()
} else "-1" } else "-1"
@@ -859,11 +859,11 @@ fun case_47(x: TypealiasNullableString, y: TypealiasNullableString, z: Nothing?)
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null) <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.equals(null)
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>propAny<!> <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>propAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableT
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.propNullableAny
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.<!INAPPLICABLE_CANDIDATE!>funAny<!>() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!><!UNSAFE_CALL!>.<!>funAny()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableT()
<!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny() <!DEBUG_INFO_EXPRESSION_TYPE("TypealiasNullableString")!>x<!>.funNullableAny()
} else "-1" } else "-1"
@@ -1296,11 +1296,11 @@ fun case_71(t: Any?) {
if (t is Interface2?) { if (t is Interface2?) {
if (t != z2) { if (t != z2) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.let { <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>(); <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() } <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.let { <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!><!UNSAFE_CALL!>.<!>itest1(); <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!><!UNSAFE_CALL!>.<!>itest2() }
} }
} }
} }
@@ -1318,11 +1318,11 @@ fun case_72(t: Any?, z1: Nothing?) {
if (t is Interface1? && t != z1 ?: z2 && t is Interface2?) { if (t is Interface1? && t != z1 ?: z2 && t is Interface2?) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!><!UNSAFE_CALL!>.<!>itest()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.let { <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>(); <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() } <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface1? & Interface2?")!>t<!>.let { <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!><!UNSAFE_CALL!>.<!>itest1(); <!DEBUG_INFO_EXPRESSION_TYPE("Interface1? & Interface2?")!>it<!><!UNSAFE_CALL!>.<!>itest2() }
} }
} }
@@ -1341,11 +1341,11 @@ fun case_73(t: Any?) {
if (t is ClassLevel2? && t is Interface1?) { if (t is ClassLevel2? && t is Interface1?) {
if (t !is Interface3?) {} else if (false) { if (t !is Interface3?) {} else if (false) {
if (t != `null`) { if (t != `null`) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & ClassLevel2? & Interface1? & Interface3?")!>t<!>
} }
} }
@@ -1366,11 +1366,11 @@ fun case_74(t: Any?) {
if (t == implicitNullableNothingProperty || t === implicitNullableNothingProperty || t !is Interface1?) else { if (t == implicitNullableNothingProperty || t === implicitNullableNothingProperty || t !is Interface1?) else {
if (t is ClassLevel2?) { if (t is ClassLevel2?) {
if (t is Interface3?) { if (t is Interface3?) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & Interface2? & Interface1? & ClassLevel2? & Interface3?")!>t<!>
} }
} }
@@ -1389,11 +1389,11 @@ fun case_75(t: Any?, z: Nothing?) {
if (t !is ClassLevel2? || t !is ClassLevel1?) else { if (t !is ClassLevel2? || t !is ClassLevel1?) else {
if (t === ((((((z)))))) || t !is Interface1?) else { if (t === ((((((z)))))) || t !is Interface1?) else {
if (t !is Interface2? || t !is Interface3?) {} else { if (t !is Interface2? || t !is Interface3?) {} else {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>itest<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>itest()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test1<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test1()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>.<!INAPPLICABLE_CANDIDATE!>test2<!>() <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!><!UNSAFE_CALL!>.<!>test2()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & ClassLevel2? & Interface1? & Interface2? & Interface3?")!>t<!>
} }
} }