[TD] Update diagnostics test data due to new test runners
Update includes:
- Changing syntax of `OI/`NI` tags from `<!NI;TAG!>` to `<!TAG{NI}!>`
- Fix some incorrect directives
- Change order of diagnostics in some places
- Remove ignored diagnostics from FIR test data (previously `DIAGNOSTICS` didn't work)
- Update FIR dumps in some places and add `FIR_IDENTICAL` if needed
- Replace all JAVAC_SKIP with SKIP_JAVAC directive
This commit is contained in:
+1
-1
@@ -13,4 +13,4 @@ fun test(c: Coll?) {
|
||||
if (c != null) {
|
||||
for(x in <!DEBUG_INFO_SMARTCAST!>c<!>) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -52,4 +52,4 @@ fun bindNoGeneric(r: SimpleOption): SimpleOption {
|
||||
if (true) SimpleNone() else r
|
||||
}
|
||||
else r
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -9,7 +9,7 @@ class None<T> : Option<T>
|
||||
fun <T> bind(r: Option<T>): Option<T> {
|
||||
return if (r is Some) {
|
||||
// Ideally we should infer Option<T> here (see KT-10896)
|
||||
(<!OI;TYPE_INFERENCE_FAILED_ON_SPECIAL_CONSTRUCT!>if<!> (true) <!OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>None()<!> else <!OI;DEBUG_INFO_SMARTCAST!>r<!>) checkType { <!OI;TYPE_MISMATCH!>_<!><Option<T>>() }
|
||||
(<!TYPE_INFERENCE_FAILED_ON_SPECIAL_CONSTRUCT{OI}!>if<!> (true) <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH{OI}!>None()<!> else <!DEBUG_INFO_SMARTCAST{OI}!>r<!>) checkType { <!TYPE_MISMATCH{OI}!>_<!><Option<T>>() }
|
||||
// Works correctly
|
||||
if (true) None() else r
|
||||
}
|
||||
@@ -25,9 +25,9 @@ fun <T> bind2(r: Option<T>): Option<T> {
|
||||
}
|
||||
|
||||
fun <T, R> bind3(r: Option<T>): Option<T> {
|
||||
return if (r is Some) <!NI;TYPE_MISMATCH!>{
|
||||
return if (r is Some) <!TYPE_MISMATCH{NI}!>{
|
||||
// Diagnoses an error correctly
|
||||
if (true) <!OI;TYPE_MISMATCH!>None<R>()<!> else r
|
||||
if (true) <!TYPE_MISMATCH{OI}!>None<R>()<!> else r
|
||||
}<!>
|
||||
else r
|
||||
}
|
||||
@@ -52,4 +52,4 @@ fun bindNoGeneric(r: SimpleOption): SimpleOption {
|
||||
if (true) SimpleNone() else r
|
||||
}
|
||||
else r
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
val test1 = { if (true) <!OI;IMPLICIT_CAST_TO_ANY!>1<!> else <!OI;IMPLICIT_CAST_TO_ANY!>""<!> }
|
||||
val test1 = { if (true) <!IMPLICIT_CAST_TO_ANY{OI}!>1<!> else <!IMPLICIT_CAST_TO_ANY{OI}!>""<!> }
|
||||
|
||||
val test2 = { { if (true) <!OI;IMPLICIT_CAST_TO_ANY!>1<!> else <!OI;IMPLICIT_CAST_TO_ANY!>""<!> } }
|
||||
val test2 = { { if (true) <!IMPLICIT_CAST_TO_ANY{OI}!>1<!> else <!IMPLICIT_CAST_TO_ANY{OI}!>""<!> } }
|
||||
|
||||
val test3: (Boolean) -> Any = { if (it) 1 else "" }
|
||||
|
||||
|
||||
+1
-1
@@ -59,4 +59,4 @@ val testUsage3 =
|
||||
else println()
|
||||
|
||||
val testUsage4: Any get() =
|
||||
if (true) 42 else println()
|
||||
if (true) 42 else println()
|
||||
|
||||
+4
-4
@@ -17,8 +17,8 @@ fun testResultOfLambda2() =
|
||||
|
||||
fun testResultOfAnonFun1() =
|
||||
run(fun () =
|
||||
if (true) <!OI;IMPLICIT_CAST_TO_ANY!>42<!>
|
||||
else <!OI;IMPLICIT_CAST_TO_ANY!>println()<!>
|
||||
if (true) <!IMPLICIT_CAST_TO_ANY{OI}!>42<!>
|
||||
else <!IMPLICIT_CAST_TO_ANY{OI}!>println()<!>
|
||||
)
|
||||
|
||||
fun testResultOfAnonFun2() =
|
||||
@@ -28,7 +28,7 @@ fun testResultOfAnonFun2() =
|
||||
|
||||
fun testReturnFromAnonFun() =
|
||||
run(fun () {
|
||||
return <!NI;TYPE_MISMATCH!>if (true) <!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!> else println()<!>
|
||||
return <!TYPE_MISMATCH{NI}!>if (true) <!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>42<!> else println()<!>
|
||||
})
|
||||
|
||||
fun <!IMPLICIT_NOTHING_RETURN_TYPE!>testReturn1<!>() =
|
||||
@@ -59,4 +59,4 @@ val testUsage3 =
|
||||
else <!IMPLICIT_CAST_TO_ANY!>println()<!>
|
||||
|
||||
val testUsage4: Any get() =
|
||||
if (true) 42 else println()
|
||||
if (true) 42 else println()
|
||||
|
||||
@@ -20,10 +20,10 @@ val xx6 = null ?: <!INVALID_IF_AS_EXPRESSION!>if<!> (true) 42
|
||||
val xx7 = "" + <!INVALID_IF_AS_EXPRESSION!>if<!> (true) 42
|
||||
|
||||
val wxx1 = <!NO_ELSE_IN_WHEN!>when<!> { true -> 42 }
|
||||
val wxx2: Unit = <!NI;TYPE_MISMATCH!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!> }<!>
|
||||
val wxx2: Unit = <!TYPE_MISMATCH{NI}!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>42<!> }<!>
|
||||
val wxx3 = idAny(<!NO_ELSE_IN_WHEN!>when<!> { true -> 42 })
|
||||
val wxx4 = id(<!NO_ELSE_IN_WHEN!>when<!> { true -> 42 })
|
||||
val wxx5 = idUnit(<!NI;TYPE_MISMATCH!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!> }<!>)
|
||||
val wxx5 = idUnit(<!TYPE_MISMATCH{NI}!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>42<!> }<!>)
|
||||
val wxx6 = null ?: <!NO_ELSE_IN_WHEN!>when<!> { true -> 42 }
|
||||
val wxx7 = "" + <!NO_ELSE_IN_WHEN!>when<!> { true -> 42 }
|
||||
|
||||
@@ -51,8 +51,8 @@ fun g1() = <!NO_ELSE_IN_WHEN!>when<!> { true -> work() }
|
||||
fun g2() = <!NO_ELSE_IN_WHEN!>when<!> { true -> mlist.add() }
|
||||
fun g3() = <!NO_ELSE_IN_WHEN!>when<!> { true -> 42 }
|
||||
fun g4(): Unit = <!NO_ELSE_IN_WHEN!>when<!> { true -> work() }
|
||||
fun g5(): Unit = <!NI;TYPE_MISMATCH!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!OI;TYPE_MISMATCH!>mlist.add()<!> }<!>
|
||||
fun g6(): Unit = <!NI;TYPE_MISMATCH!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!> }<!>
|
||||
fun g5(): Unit = <!TYPE_MISMATCH{NI}!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!TYPE_MISMATCH{OI}!>mlist.add()<!> }<!>
|
||||
fun g6(): Unit = <!TYPE_MISMATCH{NI}!><!NO_ELSE_IN_WHEN!>when<!> { true -> <!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>42<!> }<!>
|
||||
|
||||
fun foo1(x: String?) {
|
||||
"" + <!INVALID_IF_AS_EXPRESSION!>if<!> (true) 42
|
||||
|
||||
+1
-1
@@ -31,4 +31,4 @@ fun example() {
|
||||
}
|
||||
|
||||
return if (true) true else {}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -30,5 +30,5 @@ fun example() {
|
||||
return <!TYPE_MISMATCH!><!INVALID_IF_AS_EXPRESSION!>if<!> (true) true<!>
|
||||
}
|
||||
|
||||
return <!NI;TYPE_MISMATCH!>if (true) <!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>true<!> else {}<!>
|
||||
}
|
||||
return <!TYPE_MISMATCH{NI}!>if (true) <!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>true<!> else {}<!>
|
||||
}
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNREACHABLE_CODE -UNUSED_PARAMETER -RETURN_NOT_ALLOWED
|
||||
|
||||
fun <!IMPLICIT_NOTHING_RETURN_TYPE!>test1<!>() = run {
|
||||
return <!TYPE_MISMATCH("String", "Nothing")!>"OK"<!>
|
||||
return <!TYPE_MISMATCH("String; Nothing")!>"OK"<!>
|
||||
}
|
||||
|
||||
fun <!IMPLICIT_NOTHING_RETURN_TYPE!>test2<!>() = run {
|
||||
fun local(): String {
|
||||
return ""
|
||||
}
|
||||
return <!TYPE_MISMATCH("String", "Nothing")!>""<!>
|
||||
return <!TYPE_MISMATCH("String; Nothing")!>""<!>
|
||||
}
|
||||
|
||||
inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> = null!!
|
||||
fun test3(a: List<String>, b: List<Int>) = a.map {
|
||||
if (it.length == 3) return <!TYPE_MISMATCH("Nothing?", "List<Int>")!>null<!>
|
||||
if (it.length == 4) return <!TYPE_MISMATCH("String", "List<Int>")!>""<!>
|
||||
if (it.length == 4) return <!TYPE_MISMATCH("Int", "List<Int>")!>5<!>
|
||||
if (it.length == 3) return <!TYPE_MISMATCH("Nothing?; List<Int>")!>null<!>
|
||||
if (it.length == 4) return <!TYPE_MISMATCH("String; List<Int>")!>""<!>
|
||||
if (it.length == 4) return <!TYPE_MISMATCH("Int; List<Int>")!>5<!>
|
||||
if (it.length == 4) return b
|
||||
1
|
||||
}
|
||||
|
||||
@@ -9,4 +9,4 @@ fun foo(b: String) {
|
||||
<!INAPPLICABLE_CANDIDATE!>in<!> 1..10 -> 1 //no type mismatch, but it should be here
|
||||
else -> 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ package kt1075
|
||||
|
||||
fun foo(b: String) {
|
||||
if (<!TYPE_MISMATCH!>b<!> in 1..10) {} //type mismatch
|
||||
when (<!NI;TYPE_MISMATCH!>b<!>) {
|
||||
when (<!TYPE_MISMATCH{NI}!>b<!>) {
|
||||
<!TYPE_MISMATCH_IN_RANGE!>in<!> 1..10 -> <!UNUSED_EXPRESSION!>1<!> //no type mismatch, but it should be here
|
||||
else -> <!UNUSED_EXPRESSION!>2<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,4 +9,4 @@ fun test(a: Boolean, b: Boolean): Int {
|
||||
3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ package f
|
||||
fun test(a: Boolean, b: Boolean): Int {
|
||||
return if(a) {
|
||||
1
|
||||
} else <!NI;TYPE_MISMATCH!>{
|
||||
<!OI;TYPE_MISMATCH!><!INVALID_IF_AS_EXPRESSION!>if<!> (b) {
|
||||
} else <!TYPE_MISMATCH{NI}!>{
|
||||
<!TYPE_MISMATCH{OI}!><!INVALID_IF_AS_EXPRESSION!>if<!> (b) {
|
||||
3
|
||||
}<!>
|
||||
}<!>
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+160
@@ -0,0 +1,160 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// !DIAGNOSTICS: -UNREACHABLE_CODE
|
||||
package kt770_351_735
|
||||
|
||||
|
||||
//KT-770 Reference is not resolved to anything, but is not marked unresolved
|
||||
fun main() {
|
||||
var i = 0
|
||||
when (i) {
|
||||
1 -> i--
|
||||
2 -> i = 2 // i is surrounded by a black border
|
||||
else -> <!UNRESOLVED_REFERENCE!>j<!> = 2
|
||||
}
|
||||
System.out.println(i)
|
||||
}
|
||||
|
||||
//KT-351 Distinguish statement and expression positions
|
||||
val w = <!EXPRESSION_REQUIRED!>while (true) {}<!>
|
||||
|
||||
fun foo() {
|
||||
var z = 2
|
||||
val r = { // type fun(): Any is inferred
|
||||
if (true) {
|
||||
2
|
||||
}
|
||||
else {
|
||||
z = 34
|
||||
}
|
||||
}
|
||||
val f: ()-> Int = r
|
||||
val g: ()-> Any = r
|
||||
}
|
||||
|
||||
//KT-735 Statements without braces are prohibited on the right side of when entries.
|
||||
fun box() : Int {
|
||||
val d = 2
|
||||
var z = 0
|
||||
when(d) {
|
||||
5, 3 -> z++
|
||||
else -> z = -1000
|
||||
}
|
||||
return z
|
||||
}
|
||||
|
||||
//More tests
|
||||
|
||||
fun test1() { while(true) {} }
|
||||
fun test2(): Unit { while(true) {} }
|
||||
|
||||
fun testCoercionToUnit() {
|
||||
val simple: ()-> Unit = {
|
||||
41
|
||||
}
|
||||
val withIf: ()-> Unit = {
|
||||
if (true) {
|
||||
3
|
||||
} else {
|
||||
45
|
||||
}
|
||||
}
|
||||
val i = 34
|
||||
val withWhen : () -> Unit = {
|
||||
when(i) {
|
||||
1 -> {
|
||||
val d = 34
|
||||
"1"
|
||||
doSmth(d)
|
||||
|
||||
}
|
||||
2 -> '4'
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
|
||||
var x = 43
|
||||
val checkType = {
|
||||
if (true) {
|
||||
x = 4
|
||||
} else {
|
||||
45
|
||||
}
|
||||
}
|
||||
val f : () -> String = checkType
|
||||
}
|
||||
|
||||
fun doSmth(i: Int) {}
|
||||
|
||||
fun testImplicitCoercion() {
|
||||
val d = 21
|
||||
var z = 0
|
||||
var i = when(d) {
|
||||
3 -> null
|
||||
4 -> { val z = 23 }
|
||||
else -> z = 20
|
||||
}
|
||||
|
||||
var u = when(d) {
|
||||
3 -> { z = 34 }
|
||||
else -> z--
|
||||
}
|
||||
|
||||
var iff = if (true) {
|
||||
z = 34
|
||||
}
|
||||
val g = if (true) 4
|
||||
val h = if (false) 4 else {}
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(if (true) {
|
||||
4
|
||||
} else {
|
||||
z = 342
|
||||
})
|
||||
}
|
||||
|
||||
fun fooWithAnyArg(arg: Any) {}
|
||||
fun fooWithAnyNullableArg(arg: Any?) {}
|
||||
|
||||
fun testCoercionToAny() {
|
||||
val d = 21
|
||||
val x1: Any = if (1>2) 1 else 2.0
|
||||
val x2: Any? = if (1>2) 1 else 2.0
|
||||
val x3: Any? = if (1>2) 1 else (if (1>2) null else 2.0)
|
||||
|
||||
fooWithAnyArg(if (1>2) 1 else 2.0)
|
||||
fooWithAnyNullableArg(if (1>2) 1 else 2.0)
|
||||
fooWithAnyNullableArg(if (1>2) 1 else (if (1>2) null else 2.0))
|
||||
|
||||
val y1: Any = when(d) { 1 -> 1.0 else -> 2.0 }
|
||||
val y2: Any? = when(d) { 1 -> 1.0 else -> 2.0 }
|
||||
val y3: Any? = when(d) { 1 -> 1.0; 2 -> null; else -> 2.0 }
|
||||
|
||||
fooWithAnyArg(when(d) { 1 -> 1.0 else -> 2.0 })
|
||||
fooWithAnyNullableArg(when(d) { 1 -> 1.0 else -> 2.0 })
|
||||
fooWithAnyNullableArg(when(d) { 1 -> 1.0; 2 -> null; else -> 2.0 })
|
||||
}
|
||||
|
||||
fun fooWithAnuNullableResult(s: String?, name: String, optional: Boolean): Any? {
|
||||
return if (s == null) {
|
||||
if (!optional) {
|
||||
throw java.lang.IllegalArgumentException("Parameter '$name' was not found in the request")
|
||||
}
|
||||
null
|
||||
} else {
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
fun bar(a: Unit) {}
|
||||
|
||||
fun testStatementInExpressionContext() {
|
||||
var z = 34
|
||||
val a1: Unit = <!EXPRESSION_REQUIRED!>z = 334<!>
|
||||
val f = for (i in 1..10) {}
|
||||
if (true) return <!EXPRESSION_REQUIRED!>z = 34<!>
|
||||
return <!EXPRESSION_REQUIRED!>while (true) {}<!>
|
||||
}
|
||||
|
||||
fun testStatementInExpressionContext2() {
|
||||
val a2: Unit = <!EXPRESSION_REQUIRED!>while(true) {}<!>
|
||||
}
|
||||
+5
-8
@@ -95,9 +95,7 @@ fun testImplicitCoercion() {
|
||||
}
|
||||
|
||||
var <!UNUSED_VARIABLE!>u<!> = when(d) {
|
||||
3 -> {
|
||||
<!IMPLICIT_CAST_TO_ANY!><!UNUSED_VALUE!>z =<!> 34<!>
|
||||
}
|
||||
3 -> { <!IMPLICIT_CAST_TO_ANY!><!UNUSED_VALUE!>z =<!> 34<!> }
|
||||
else -> <!IMPLICIT_CAST_TO_ANY, UNUSED_CHANGED_VALUE!>z--<!>
|
||||
}
|
||||
|
||||
@@ -107,10 +105,9 @@ fun testImplicitCoercion() {
|
||||
val <!UNUSED_VARIABLE!>g<!> = <!INVALID_IF_AS_EXPRESSION!>if<!> (true) 4
|
||||
val <!UNUSED_VARIABLE!>h<!> = if (false) <!IMPLICIT_CAST_TO_ANY!>4<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!>
|
||||
|
||||
bar(<!NI;TYPE_MISMATCH!>if (true) {
|
||||
<!OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
|
||||
}
|
||||
else {
|
||||
bar(<!TYPE_MISMATCH{NI}!>if (true) {
|
||||
<!CONSTANT_EXPECTED_TYPE_MISMATCH{OI}!>4<!>
|
||||
} else {
|
||||
<!UNUSED_VALUE!>z =<!> 342
|
||||
}<!>)
|
||||
}
|
||||
@@ -160,4 +157,4 @@ fun testStatementInExpressionContext() {
|
||||
|
||||
fun testStatementInExpressionContext2() {
|
||||
val <!UNUSED_VARIABLE!>a2<!>: Unit = <!EXPRESSION_EXPECTED!>while(true) {}<!>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,4 +13,4 @@ fun test() {
|
||||
|
||||
1 ?: { }
|
||||
use(1 ?: { })
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -8,9 +8,9 @@ fun test() {
|
||||
use({ }<!NOT_NULL_ASSERTION_ON_LAMBDA_EXPRESSION!>!!<!>);
|
||||
|
||||
// KT-KT-9070
|
||||
<!OI;TYPE_MISMATCH!>{ }<!> <!USELESS_ELVIS!>?: 1<!>
|
||||
<!TYPE_MISMATCH{OI}!>{ }<!> <!USELESS_ELVIS!>?: 1<!>
|
||||
use({ 2 } <!USELESS_ELVIS!>?: 1<!>);
|
||||
|
||||
1 <!USELESS_ELVIS!>?: <!OI;TYPE_MISMATCH, UNUSED_LAMBDA_EXPRESSION!>{ }<!><!>
|
||||
1 <!USELESS_ELVIS!>?: <!TYPE_MISMATCH{OI}, UNUSED_LAMBDA_EXPRESSION!>{ }<!><!>
|
||||
use(1 <!USELESS_ELVIS!>?: { }<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,11 +14,11 @@ fun foo() : Int {
|
||||
}
|
||||
|
||||
fun bar() : Int =
|
||||
try <!NI;TYPE_MISMATCH!>{
|
||||
<!OI;TYPE_MISMATCH!>doSmth()<!>
|
||||
try <!TYPE_MISMATCH{NI}!>{
|
||||
<!TYPE_MISMATCH{OI}!>doSmth()<!>
|
||||
}<!>
|
||||
catch (e: Exception) <!NI;TYPE_MISMATCH!>{
|
||||
<!OI;TYPE_MISMATCH!>""<!>
|
||||
catch (e: Exception) <!TYPE_MISMATCH{NI}!>{
|
||||
<!TYPE_MISMATCH{OI}!>""<!>
|
||||
}<!>
|
||||
finally {
|
||||
<!UNUSED_EXPRESSION!>""<!>
|
||||
|
||||
+1
-1
@@ -18,4 +18,4 @@ fun test11() {
|
||||
// not 'String!'
|
||||
A.foo()!! checkType { _<String>() }
|
||||
A.foo()!! checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -13,9 +13,9 @@ fun <T: Any> exclExcl(t: T?): T = t!!
|
||||
fun test11() {
|
||||
// not 'String!'
|
||||
exclExcl(A.foo()) checkType { _<String>() }
|
||||
exclExcl(A.foo()) checkType { <!NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH!>_<!><String?>() }
|
||||
exclExcl(A.foo()) checkType { <!TYPE_MISMATCH{OI}, UNRESOLVED_REFERENCE_WRONG_RECEIVER{NI}!>_<!><String?>() }
|
||||
|
||||
// not 'String!'
|
||||
A.foo()!! checkType { _<String>() }
|
||||
A.foo()!! checkType { <!NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH!>_<!><String?>() }
|
||||
}
|
||||
A.foo()!! checkType { <!TYPE_MISMATCH{OI}, UNRESOLVED_REFERENCE_WRONG_RECEIVER{NI}!>_<!><String?>() }
|
||||
}
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
//KT-234 Force when() expressions to have an 'else' branch
|
||||
//KT-973 Unreachable code
|
||||
|
||||
package kt234_kt973
|
||||
|
||||
class Pair<A, B>(a: A, b: B)
|
||||
|
||||
fun test(t : Pair<Int, Int>) : Int {
|
||||
when (t) {
|
||||
Pair(10, 10) -> return 1
|
||||
}
|
||||
return 0 // unreachable code
|
||||
}
|
||||
|
||||
fun test1(t : Pair<Int, Int>) : Int {
|
||||
when (t) {
|
||||
Pair(10, 10) -> return 1
|
||||
else -> return 2
|
||||
}
|
||||
return 0 // unreachable code
|
||||
}
|
||||
|
||||
//more tests
|
||||
fun t1(x: Int) = when(x) {
|
||||
else -> 1
|
||||
}
|
||||
|
||||
fun t5(x: Int) = when (x) {
|
||||
is Int -> 1
|
||||
2 -> 2
|
||||
}
|
||||
|
||||
fun foo3(x: Int) = when(x) {
|
||||
else -> 1
|
||||
2 -> 2
|
||||
}
|
||||
|
||||
fun foo4(x: Int) = when(x) {
|
||||
2 -> x
|
||||
else -> 3
|
||||
}
|
||||
@@ -38,4 +38,4 @@ fun foo3(x: Int) = when(x) {
|
||||
fun foo4(x: Int) = when(x) {
|
||||
2 -> x
|
||||
else -> 3
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
val test1 = { when (true) { true -> <!OI;IMPLICIT_CAST_TO_ANY!>1<!>; else -> <!OI;IMPLICIT_CAST_TO_ANY!>""<!> } }
|
||||
val test1 = { when (true) { true -> <!IMPLICIT_CAST_TO_ANY{OI}!>1<!>; else -> <!IMPLICIT_CAST_TO_ANY{OI}!>""<!> } }
|
||||
|
||||
val test2 = { { when (true) { true -> <!OI;IMPLICIT_CAST_TO_ANY!>1<!>; else -> <!OI;IMPLICIT_CAST_TO_ANY!>""<!> } } }
|
||||
val test2 = { { when (true) { true -> <!IMPLICIT_CAST_TO_ANY{OI}!>1<!>; else -> <!IMPLICIT_CAST_TO_ANY{OI}!>""<!> } } }
|
||||
|
||||
val test3: (Boolean) -> Any = { when (true) { true -> 1; else -> "" } }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user