Don't report the same diagnsotics several times

This commit is contained in:
Victor Petukhov
2021-05-26 12:58:48 +03:00
parent e942052eb6
commit 4a767c597e
62 changed files with 202 additions and 166 deletions
@@ -1,3 +1,4 @@
// !WITH_NEW_INFERENCE
interface Foo
interface Bar : Foo
@@ -12,14 +13,14 @@ val foo: Foo = run {
<!DEBUG_INFO_SMARTCAST!>x<!>
}
val foofoo: Foo = run {
val foofoo: Foo = <!TYPE_INFERENCE_UPPER_BOUND_VIOLATED{OI}!>run<!> {
val x = foo()
if (x == null) throw Exception()
<!DEBUG_INFO_SMARTCAST, TYPE_MISMATCH!>x<!>
<!DEBUG_INFO_SMARTCAST, TYPE_MISMATCH{NI}!>x<!>
}
val bar: Bar = <!TYPE_MISMATCH!>run {
val bar: Bar = <!TYPE_MISMATCH{NI}!><!TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS{OI}!>run<!> {
val x = foo()
if (x == null) throw Exception()
<!DEBUG_INFO_SMARTCAST, TYPE_MISMATCH, TYPE_MISMATCH!>x<!>
<!DEBUG_INFO_SMARTCAST{NI}, TYPE_MISMATCH!>x<!>
}<!>
@@ -8,7 +8,7 @@ fun foo() {
return true
}
<!SMARTCAST_IMPOSSIBLE!>i<!>.hashCode()
trans(<!SMARTCAST_IMPOSSIBLE, SMARTCAST_IMPOSSIBLE!>i<!>, ::can)
trans(<!SMARTCAST_IMPOSSIBLE!>i<!>, ::can)
<!SMARTCAST_IMPOSSIBLE!>i<!>.hashCode()
}
}
@@ -16,7 +16,7 @@ fun foo(): Int {
k.run()
val d: Int = <!DEBUG_INFO_SMARTCAST!>c<!>
// a is captured so smart cast is not possible
return d + <!SMARTCAST_IMPOSSIBLE, SMARTCAST_IMPOSSIBLE!>a<!>
return d + <!SMARTCAST_IMPOSSIBLE!>a<!>
}
else return -1
}
@@ -5,5 +5,5 @@ fun foo(x: Int, f: () -> Unit, y: Int) {}
fun bar() {
var x: Int?
x = 4
foo(<!DEBUG_INFO_SMARTCAST!>x<!>, { x = null; x<!UNSAFE_CALL!>.<!>hashCode() }, <!SMARTCAST_IMPOSSIBLE, SMARTCAST_IMPOSSIBLE!>x<!>)
foo(<!DEBUG_INFO_SMARTCAST!>x<!>, { x = null; x<!UNSAFE_CALL!>.<!>hashCode() }, <!SMARTCAST_IMPOSSIBLE!>x<!>)
}
@@ -6,5 +6,5 @@ fun bar(s: String): Int {
fun foo(m: MyClass): Int {
m.p = "xyz"
return bar(<!SMARTCAST_IMPOSSIBLE, SMARTCAST_IMPOSSIBLE!>m.p<!>)
return bar(<!SMARTCAST_IMPOSSIBLE!>m.p<!>)
}
@@ -8,7 +8,7 @@ fun IntArray.forEachIndexed( op: (i: Int, value: Int) -> Unit) {
fun max(a: IntArray): Int? {
var maxI: Int? = null
a.forEachIndexed { i, value ->
if (maxI == null || value >= a[<!SMARTCAST_IMPOSSIBLE, SMARTCAST_IMPOSSIBLE!>maxI<!>])
if (maxI == null || value >= a[<!SMARTCAST_IMPOSSIBLE!>maxI<!>])
maxI = i
}
return maxI