added info about smart casts to diagnostic tests

This commit is contained in:
Svetlana Isakova
2013-12-06 20:12:41 +04:00
parent 00da5fe1fb
commit c30259dfbe
116 changed files with 383 additions and 348 deletions
@@ -1,3 +1,4 @@
// !DIAGNOSTICS: -DEBUG_INFO_AUTOCAST
fun bar(x: Int): Int = x + 1
fun foo() {
@@ -4,10 +4,10 @@ fun foo() {
val x: Int? = null
val a = Array<Int>(3, {0})
if (x != null) bar(a[x]) else bar(a[<!TYPE_MISMATCH!>x<!>])
bar(a[if (x == null) 0 else x])
if (x != null) bar(a[<!DEBUG_INFO_AUTOCAST!>x<!>]) else bar(a[<!TYPE_MISMATCH!>x<!>])
bar(a[if (x == null) 0 else <!DEBUG_INFO_AUTOCAST!>x<!>])
bar(a[<!TYPE_MISMATCH!>x<!>])
"123"[<!TYPE_MISMATCH!>x<!>];
if (x != null) "123"[x];
if (x != null) "123"[<!DEBUG_INFO_AUTOCAST!>x<!>];
}
@@ -1,5 +1,5 @@
fun foo(arr: Array<out Number>): Int {
val result = (arr as Array<Int>)[0]
arr : Array<Int>
<!DEBUG_INFO_AUTOCAST!>arr<!> : Array<Int>
return result
}
@@ -4,23 +4,23 @@ trait G {
}
fun foo1(a: Int?, b: G) {
b[a!!, a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>] = a
a : Int
b[a!!, a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>] = <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
fun foo2(a: Int?, b: G) {
b[0, a!!] = a
a : Int
b[0, a!!] = <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
fun foo3(a: Int?, b: G) {
val r = b[a!!, a]
a : Int
val r = b[a!!, <!DEBUG_INFO_AUTOCAST!>a<!>]
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
r : Int
}
fun foo4(a: Int?, b: G) {
val r = b[0, a!!]
a : Int
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
r : Int
}
@@ -1,9 +1,9 @@
fun foo1(a: Int?, b: Array<Array<Int>>) {
b[a!!][a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>] = a
a : Int
b[a!!][a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>] = <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
fun foo2(a: Int?, b: Array<Array<Int>>) {
b[0][a!!] = a
a : Int
b[0][a!!] = <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
@@ -5,13 +5,13 @@ trait B : A {
fun bar1(a: A) {
var b: B = a as B
a.foo()
<!DEBUG_INFO_AUTOCAST!>a<!>.foo()
b.foo()
}
fun id(b: B) = b
fun bar2(a: A) {
var b: B = id(a as B)
a.foo()
<!DEBUG_INFO_AUTOCAST!>a<!>.foo()
b.foo()
}
@@ -10,12 +10,12 @@ fun baz(b: B) = b
fun bar1(a: A) {
val b = a as B
a.foo()
<!DEBUG_INFO_AUTOCAST!>a<!>.foo()
b.foo()
}
fun bar2(a: A) {
val b = baz(a as B)
a.foo()
<!DEBUG_INFO_AUTOCAST!>a<!>.foo()
b.foo()
}
@@ -1,15 +1,15 @@
fun bar1(x: Number, y: Int) {
var yy = y
yy += x as Int
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun bar2(x: Number) {
<!UNRESOLVED_REFERENCE!>y<!> <!UNRESOLVED_REFERENCE!>+=<!> x as Int
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun bar3(x: Number, y: Array<Int>) {
y[0] += x as Int
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -1,10 +1,10 @@
fun arrayAccessRHS(a: Int?, b: Array<Int>) {
b[0] = a!!
a : Int
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
fun arrayAccessLHS(a: Int?, b: Array<Int>) {
b[a!!] = a
a : Int
b[a!!] = <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
}
@@ -1,3 +1,4 @@
// !DIAGNOSTICS: -DEBUG_INFO_AUTOCAST
fun bar(x: Int): Int = x + 1
fun foo() {
@@ -6,7 +6,7 @@ fun foo1(x: Number, cond: Boolean): Boolean {
fun foo2(x: Number, cond: Boolean): Boolean {
val result = ((x as Int) == 42) && cond
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
return result
}
@@ -18,6 +18,6 @@ fun foo3(x: Number, cond: Boolean): Boolean {
fun foo4(x: Number, cond: Boolean): Boolean {
val result = ((x as Int) == 42) || cond
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
return result
}
@@ -4,13 +4,13 @@ trait B : A
fun B.compareTo(b: B) = if (this == b) 0 else 1
fun foo(a: A): Boolean {
val result = (a as B) < a
a : B
val result = (a as B) < <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
fun bar(a: A, b: B): Boolean {
val result = b < (a as B)
a : B
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
@@ -1,5 +1,5 @@
fun foo(x: Number): Boolean {
val result = (x as Int) in 1..5
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
return result
}
@@ -1,8 +1,8 @@
fun foo(x: Int?): Int = x!!
fun elvis(x: Number?): Int {
val result = (x as Int?) ?: foo(x)
x : Int?
val result = (x as Int?) ?: foo(<!DEBUG_INFO_AUTOCAST!>x<!>)
<!DEBUG_INFO_AUTOCAST!>x<!> : Int?
return result
}
@@ -3,12 +3,12 @@ trait B : A
fun foo1(a: A, b: B): Boolean {
val result = (a as B) == b
a : B
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
fun foo2(a: A, b: B): Boolean {
val result = b == (a as B)
a : B
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
@@ -1,11 +1,11 @@
fun foo(a: Number): Int {
val result = (a as Int) compareTo a
a : Int
val result = (a as Int) compareTo <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
return result
}
fun bar(a: Number): Int {
val result = 42 compareTo (a as Int)
a : Int
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
return result
}
@@ -4,13 +4,13 @@ trait B : A
fun B.plus(b: B) = if (this == b) b else this
fun foo(a: A): B {
val result = (a as B) + a
a : B
val result = (a as B) + <!DEBUG_INFO_AUTOCAST!>a<!>
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
fun bar(a: A, b: B): B {
val result = b + (a as B)
a : B
<!DEBUG_INFO_AUTOCAST!>a<!> : B
return result
}
@@ -1,5 +1,5 @@
fun foo(x: Int?): Boolean {
val result = ((x!! == 0) && ((x : Int) == 0))
x : Int
val result = ((x!! == 0) && ((<!DEBUG_INFO_AUTOCAST!>x<!> : Int) == 0))
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
return result
}
@@ -5,7 +5,7 @@ fun whileLoop(x: Int?) {
}
<!TYPE_MISMATCH!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun doWhileLoop(x: Int?) {
@@ -15,7 +15,7 @@ fun doWhileLoop(x: Int?) {
} while (x == null)
<!TYPE_MISMATCH!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun whileLoopContinueInnerOuter(x: Int?) {
@@ -26,7 +26,7 @@ fun whileLoopContinueInnerOuter(x: Int?) {
}
<!TYPE_MISMATCH!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -1,3 +1,4 @@
// !DIAGNOSTICS: -DEBUG_INFO_AUTOCAST
fun bar(x: Int) = x + 1
fun foo() {
@@ -6,7 +6,7 @@ fun foo() {
do {
bar(<!TYPE_MISMATCH!>x<!>)
} while (x == null)
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
val y: Int? = null
do {
@@ -4,7 +4,7 @@ fun simpleDoWhile(x: Int?, y0: Int) {
x : Int?
y++
} while (x!! == y)
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun doWhileWithBreak(x: Int?, y0: Int) {
@@ -4,6 +4,6 @@ fun foo() {
val x: Int? = null
bar(x ?: 0)
if (x != null) bar(<!USELESS_ELVIS!>x<!> ?: x)
if (x != null) bar(<!USELESS_ELVIS!>x<!> ?: <!DEBUG_INFO_AUTOCAST!>x<!>)
bar(<!TYPE_MISMATCH!>x<!>)
}
@@ -9,16 +9,16 @@ fun foo() {
for (p in a) {
bar(<!TYPE_MISMATCH!>x<!>)
if (x == null) continue
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
for (q in a) {
bar(x)
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
}
for (p in a) {
bar(<!TYPE_MISMATCH!>x<!>)
if (x == null) break
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
}
@@ -1,6 +1,6 @@
fun foo(arr: Array<Int>?) {
for (x in arr!!) {
arr : Array<Int>
<!DEBUG_INFO_AUTOCAST!>arr<!> : Array<Int>
}
arr : Array<Int>
<!DEBUG_INFO_AUTOCAST!>arr<!> : Array<Int>
}
@@ -4,6 +4,6 @@ fun foo() {
val x: Int? = null
fun baz() = bar(<!TYPE_MISMATCH!>x<!>)
fun quux() = if (x != null) bar(x) else baz()
fun quuux() = bar(if (x == null) 0 else x)
fun quux() = if (x != null) bar(<!DEBUG_INFO_AUTOCAST!>x<!>) else baz()
fun quuux() = bar(if (x == null) 0 else <!DEBUG_INFO_AUTOCAST!>x<!>)
}
@@ -1,24 +1,24 @@
fun ifThen(x: Int?) {
if (x!! == 0) {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun ifElse(x: Int?) {
if (x!! == 0) else {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun ifThenElse(x: Int?) {
if (x!! == 0) {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
} else {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun ifIs(x: Int?, cond: Boolean) {
@@ -3,27 +3,27 @@ fun bar(x: Int): Int = x + 1
fun foo() {
val x: Int? = null
bar(if (x == null) 0 else x)
bar(if (x == null) 0 else <!DEBUG_INFO_AUTOCAST!>x<!>)
if (x == null) {
bar(<!TYPE_MISMATCH!>x<!>)
return
} else {
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
val y: Int? = null
if (y is Int) {
bar(y)
bar(<!DEBUG_INFO_AUTOCAST!>y<!>)
} else {
bar(<!TYPE_MISMATCH!>y<!>)
return
}
bar(y)
bar(<!DEBUG_INFO_AUTOCAST!>y<!>)
val z: Int? = null
if (z != null) bar(z)
if (z != null) bar(<!DEBUG_INFO_AUTOCAST!>z<!>)
bar(<!TYPE_MISMATCH!>z<!>)
bar(z!!)
if (<!SENSELESS_COMPARISON!>z != null<!>) bar(z<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
@@ -12,5 +12,5 @@ fun foo() {
if (<!SENSELESS_COMPARISON!>x == null<!>) return
2<!OVERLOAD_RESOLUTION_AMBIGUITY!>+<!><!SYNTAX!><!>
}
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
@@ -1,6 +1,6 @@
fun foo(x: Number) {
if ((x as Int) is Int) {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -2,6 +2,6 @@ fun Int.component1() = "a"
fun foo(a: Number) {
val (x) = a as Int
a : Int
<!DEBUG_INFO_AUTOCAST!>a<!> : Int
x : String
}
@@ -4,7 +4,7 @@ fun foo() {
val x: Int? = null
val <!UNUSED_VARIABLE!>a<!> = object {
fun baz() = bar(if (x == null) 0 else x)
fun quux(): Int = if (x == null) <!TYPE_MISMATCH!>x<!> else x
fun baz() = bar(if (x == null) 0 else <!DEBUG_INFO_AUTOCAST!>x<!>)
fun quux(): Int = if (x == null) <!TYPE_MISMATCH!>x<!> else <!DEBUG_INFO_AUTOCAST!>x<!>
}
}
@@ -9,5 +9,5 @@ fun foo() {
A().bar(<!TYPE_MISMATCH!>x<!>)
if (x == null) return
A().bar(x)
A().bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
@@ -1,3 +1,4 @@
// !DIAGNOSTICS: -DEBUG_INFO_AUTOCAST
fun bar(x: Int): Int = x + 1
fun foo(): Int {
@@ -1,6 +1,6 @@
fun foo(x: Number, y: String?): String {
val result = "abcde $x ${x as Int} ${y!!} $x $y"
x : Int
y : String
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
<!DEBUG_INFO_AUTOCAST!>y<!> : String
return result
}
@@ -11,11 +11,11 @@ class Derived : Base() {
super.bar(<!TYPE_MISMATCH!>x<!>)
this.baz(<!TYPE_MISMATCH!>x<!>)
if (x == null) return
super.bar(x)
this.baz(x)
super.bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
this.baz(<!DEBUG_INFO_AUTOCAST!>x<!>)
val y: Int? = null
if (y != null) super.bar(this.baz(y))
if (y != null) super.bar(this.baz(<!DEBUG_INFO_AUTOCAST!>y<!>))
else this.baz(super.bar(<!TYPE_MISMATCH!>y<!>))
}
}
@@ -4,6 +4,6 @@ fun foo() {
val x: Int? = null
if (x == null) throw bar(<!TYPE_MISMATCH!>x<!>)
throw bar(x)
<!UNREACHABLE_CODE!>throw bar(x)<!>
throw bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
<!UNREACHABLE_CODE!>throw bar(<!DEBUG_INFO_AUTOCAST!>x<!>)<!>
}
@@ -6,10 +6,10 @@ fun foo() {
bar(<!TYPE_MISMATCH!>x<!>)
if (x == null) return
try {
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
catch (e: Exception) {
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
@@ -3,7 +3,7 @@ fun tryFinally(x: Int?) {
} finally {
x!!
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun tryCatchFinally(x: Int?) {
@@ -15,5 +15,5 @@ fun tryCatchFinally(x: Int?) {
<!TYPE_MISMATCH!>x<!> : Int
x!!
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -5,10 +5,10 @@ fun foo() {
val x: Int? = null
bar(<!UNSAFE_CALL!>-<!>x)
if (x != null) bar(-x)
if (x != null) bar(-<!DEBUG_INFO_AUTOCAST!>x<!>)
bar(<!UNSAFE_CALL!>-<!>x)
val b: Boolean? = null
baz(<!UNSAFE_CALL!>!<!>b)
if (b != null) baz(!b)
if (b != null) baz(!<!DEBUG_INFO_AUTOCAST!>b<!>)
}
@@ -5,7 +5,7 @@ fun foo() {
if (x != null) {
when (x) {
0 -> bar(x)
0 -> bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
else -> {}
}
}
@@ -14,5 +14,5 @@ fun foo() {
0 -> { if (<!SENSELESS_COMPARISON!>x == null<!>) return }
else -> { if (x == null) return }
}
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
}
@@ -1,6 +1,6 @@
fun foo(x: Number, y: Int) {
when (x) {
x as Int -> x : Int
x as Int -> <!DEBUG_INFO_AUTOCAST!>x<!> : Int
y -> {}
else -> {}
}
@@ -9,16 +9,16 @@ fun foo(x: Number, y: Int) {
fun bar(x: Number) {
when (x) {
x as Int -> x : Int
x as Int -> <!DEBUG_INFO_AUTOCAST!>x<!> : Int
else -> {}
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun whenWithoutSubject(x: Number) {
when {
(x as Int) == 42 -> x : Int
(x as Int) == 42 -> <!DEBUG_INFO_AUTOCAST!>x<!> : Int
else -> {}
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -1,13 +1,13 @@
fun foo(x: Int, list: List<Int>?) {
when (x) {
in list!! -> list : List<Int>
in list!! -> <!DEBUG_INFO_AUTOCAST!>list<!> : List<Int>
else -> {}
}
}
fun whenWithoutSubject(x: Int, list: List<Int>?) {
when {
x in list!! -> list : List<Int>
x in list!! -> <!DEBUG_INFO_AUTOCAST!>list<!> : List<Int>
else -> {}
}
}
@@ -1,6 +1,6 @@
fun foo(x: Number) {
when (x as Int) {
else -> x : Int
else -> <!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
@@ -5,11 +5,11 @@ fun foo() {
while (x == null) {
bar(<!TYPE_MISMATCH!>x<!>)
}
bar(x)
bar(<!DEBUG_INFO_AUTOCAST!>x<!>)
val y: Int? = null
while (y != null) {
bar(y)
bar(<!DEBUG_INFO_AUTOCAST!>y<!>)
}
bar(<!TYPE_MISMATCH!>y<!>)
@@ -1,19 +1,19 @@
fun simpleWhile(x: Int?, y0: Int) {
var y = y0
while (x!! == y) {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
y++
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun whileWithBreak(x: Int?, y0: Int) {
var y = y0
while (x!! == y) {
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
break
}
x : Int
<!DEBUG_INFO_AUTOCAST!>x<!> : Int
}
fun whileWithNoCondition(x: Int?) {