[FIR] Improve diagnostic reporting & don't use error symbol for candidate if possible

Also introduce few new diagnostics:
- NONE_APPLICABLE more many inapplicable candidates
- HIDDEN for visible candidates
This commit is contained in:
Dmitriy Novozhilov
2020-07-22 16:40:14 +03:00
committed by Mikhail Glukhikh
parent 5c0528b61e
commit f283f2db43
365 changed files with 1400 additions and 1451 deletions
@@ -53,7 +53,7 @@ digraph equalsToBoolean_kt {
color=blue
19 [label="Enter block"];
20 [label="Access variable R|<local>/b|"];
21 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
21 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
22 [label="Exit block"];
}
23 [label="Exit when branch result"];
@@ -137,7 +137,7 @@ digraph equalsToBoolean_kt {
color=blue
52 [label="Enter block"];
53 [label="Access variable R|<local>/b|"];
54 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
54 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
55 [label="Exit block"];
}
56 [label="Exit when branch result"];
@@ -212,7 +212,7 @@ digraph equalsToBoolean_kt {
color=blue
79 [label="Enter block"];
80 [label="Access variable R|<local>/b|"];
81 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
81 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
82 [label="Exit block"];
}
83 [label="Exit when branch result"];
@@ -278,7 +278,7 @@ digraph equalsToBoolean_kt {
color=blue
100 [label="Enter block"];
101 [label="Access variable R|<local>/b|"];
102 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
102 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
103 [label="Exit block"];
}
104 [label="Exit when branch result"];
@@ -362,7 +362,7 @@ digraph equalsToBoolean_kt {
color=blue
133 [label="Enter block"];
134 [label="Access variable R|<local>/b|"];
135 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
135 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
136 [label="Exit block"];
}
137 [label="Exit when branch result"];
@@ -428,7 +428,7 @@ digraph equalsToBoolean_kt {
color=blue
154 [label="Enter block"];
155 [label="Access variable R|<local>/b|"];
156 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
156 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
157 [label="Exit block"];
}
158 [label="Exit when branch result"];
@@ -503,7 +503,7 @@ digraph equalsToBoolean_kt {
color=blue
181 [label="Enter block"];
182 [label="Access variable R|<local>/b|"];
183 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
183 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
184 [label="Exit block"];
}
185 [label="Exit when branch result"];
@@ -587,7 +587,7 @@ digraph equalsToBoolean_kt {
color=blue
214 [label="Enter block"];
215 [label="Access variable R|<local>/b|"];
216 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()"];
216 [label="Function call: R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()"];
217 [label="Exit block"];
}
218 [label="Exit when branch result"];
@@ -12,7 +12,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|()
}
else -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
}
@@ -20,7 +20,7 @@ FILE: equalsToBoolean.kt
public final fun test_2(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () {
!=(==(R|<local>/b|, Boolean(true)), Boolean(true)) -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
else -> {
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| {
when () {
==(==(R|<local>/b|, Boolean(true)), Boolean(false)) -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
else -> {
R|<local>/b|.R|kotlin/Boolean.not|()
@@ -45,7 +45,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|()
}
else -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
}
@@ -53,7 +53,7 @@ FILE: equalsToBoolean.kt
public final fun test_5(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () {
==(!=(R|<local>/b|, Boolean(true)), Boolean(true)) -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
else -> {
R|<local>/b|.R|kotlin/Boolean.not|()
@@ -67,7 +67,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|()
}
else -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
}
@@ -78,7 +78,7 @@ FILE: equalsToBoolean.kt
R|<local>/b|.R|kotlin/Boolean.not|()
}
else -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
}
@@ -86,7 +86,7 @@ FILE: equalsToBoolean.kt
public final fun test_8(b: R|kotlin/Boolean?|): R|kotlin/Unit| {
when () {
!=(!=(R|<local>/b|, Boolean(true)), Boolean(false)) -> {
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): [kotlin/Boolean.not]>#()
R|<local>/b|.<Inapplicable(WRONG_RECEIVER): kotlin/Boolean.not>#()
}
else -> {
R|<local>/b|.R|kotlin/Boolean.not|()
@@ -267,7 +267,7 @@ digraph jumpFromRhsOfOperator_kt {
101 [label="Exit ||"];
}
102 [label="Access variable R|<local>/a|"];
103 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
103 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
104 [label="Exit block"];
}
105 [label="Exit function test_5" style="filled" fillcolor=red];
@@ -309,7 +309,7 @@ digraph jumpFromRhsOfOperator_kt {
117 [label="Exit &&"];
}
118 [label="Access variable R|<local>/a|"];
119 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
119 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
120 [label="Exit block"];
}
121 [label="Exit function teat_6" style="filled" fillcolor=red];
@@ -364,14 +364,14 @@ digraph jumpFromRhsOfOperator_kt {
color=blue
139 [label="Enter block"];
140 [label="Access variable R|<local>/a|"];
141 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
141 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
142 [label="Exit block"];
}
143 [label="Exit when branch result"];
144 [label="Exit when"];
}
145 [label="Access variable R|<local>/a|"];
146 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
146 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
147 [label="Exit block"];
}
148 [label="Exit function test_7" style="filled" fillcolor=red];
@@ -437,14 +437,14 @@ digraph jumpFromRhsOfOperator_kt {
color=blue
166 [label="Enter block"];
167 [label="Access variable R|<local>/a|"];
168 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
168 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
169 [label="Exit block"];
}
170 [label="Exit when branch result"];
171 [label="Exit when"];
}
172 [label="Access variable R|<local>/a|"];
173 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()"];
173 [label="Function call: R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()"];
174 [label="Exit block"];
}
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| {
==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}
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|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}
public final fun test_7(a: R|A?|): R|kotlin/Unit| {
when () {
==(R|<local>/a|, Null(null)) || throw R|java/lang/Exception.Exception|() -> {
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}
}
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}
public final fun test_8(a: R|A?|): R|kotlin/Unit| {
when () {
!=(R|<local>/a|, Null(null)) && throw R|java/lang/Exception.Exception|() -> {
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}
}
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): [/A.foo]>#()
R|<local>/a|.<Inapplicable(WRONG_RECEIVER): /A.foo>#()
}