KT-10322, KT-10646, KT-10647:
- update diagnostic to (supposedly) more useful - also report IMPLICIT_CAST_TO_ANY if expected type is DONT_CARE (effectively "no expected type" for lambda expression).
This commit is contained in:
+2
-2
@@ -1,6 +1,6 @@
|
||||
val test1 = { <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) 1 else ""<!> }
|
||||
val test1 = { if (true) <!IMPLICIT_CAST_TO_ANY!>1<!> else <!IMPLICIT_CAST_TO_ANY!>""<!> }
|
||||
|
||||
val test2 = { { <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) 1 else ""<!> } }
|
||||
val test2 = { { if (true) <!IMPLICIT_CAST_TO_ANY!>1<!> else <!IMPLICIT_CAST_TO_ANY!>""<!> } }
|
||||
|
||||
val test3: (Boolean) -> Any = { if (it) 1 else "" }
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ fun f3() = <!INVALID_IF_AS_EXPRESSION!>if (true) 42<!>
|
||||
fun f4(): Unit = <!INVALID_IF_AS_EXPRESSION!>if (true) work()<!>
|
||||
fun f5(): Unit = <!INVALID_IF_AS_EXPRESSION!>if (true) mlist.add()<!>
|
||||
fun f6(): Unit = <!INVALID_IF_AS_EXPRESSION!>if (true) 42<!>
|
||||
fun g1() = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!><!NO_ELSE_IN_WHEN!>when<!> { true -> work() }<!>
|
||||
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() }
|
||||
|
||||
+4
-4
@@ -5,8 +5,8 @@ fun example() {
|
||||
val b = <!INVALID_IF_AS_EXPRESSION!>if (true) else false<!>
|
||||
val c = <!INVALID_IF_AS_EXPRESSION!>if (true) true<!>
|
||||
val d = <!INVALID_IF_AS_EXPRESSION!>if (true) true else<!>;
|
||||
val e = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {} else false<!>
|
||||
val f = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) true else {}<!>
|
||||
val e = if (true) <!IMPLICIT_CAST_TO_ANY!>{}<!> else <!IMPLICIT_CAST_TO_ANY!>false<!>
|
||||
val f = if (true) <!IMPLICIT_CAST_TO_ANY!>true<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!>
|
||||
|
||||
{
|
||||
if (true) <!UNUSED_EXPRESSION!>true<!>
|
||||
@@ -17,12 +17,12 @@ fun example() {
|
||||
}();
|
||||
|
||||
{
|
||||
<!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {} else false<!>
|
||||
if (true) <!IMPLICIT_CAST_TO_ANY!>{}<!> else <!IMPLICIT_CAST_TO_ANY!>false<!>
|
||||
}();
|
||||
|
||||
|
||||
{
|
||||
<!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) true else {}<!>
|
||||
if (true) <!IMPLICIT_CAST_TO_ANY!>true<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!>
|
||||
}()
|
||||
|
||||
fun t(): Boolean {
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
fun <T> run(block: () -> T) : T = block()
|
||||
|
||||
fun test1() {
|
||||
run {
|
||||
if (true) {
|
||||
<!INVALID_IF_AS_EXPRESSION, IMPLICIT_CAST_TO_ANY!>if (true) {}<!>
|
||||
}
|
||||
else {
|
||||
<!IMPLICIT_CAST_TO_ANY!>1<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T> run(/*0*/ block: () -> T): T
|
||||
public fun test1(): kotlin.Unit
|
||||
+13
-13
@@ -19,12 +19,12 @@ val w = <!EXPRESSION_EXPECTED!>while (true) {}<!>
|
||||
fun foo() {
|
||||
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>z<!> = 2
|
||||
val r = { // type fun(): Any is inferred
|
||||
<!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {
|
||||
2
|
||||
if (true) {
|
||||
<!IMPLICIT_CAST_TO_ANY!>2<!>
|
||||
}
|
||||
else {
|
||||
z = 34
|
||||
}<!>
|
||||
<!IMPLICIT_CAST_TO_ANY!>z = 34<!>
|
||||
}
|
||||
}
|
||||
val <!UNUSED_VARIABLE!>f<!>: ()-> Int = <!TYPE_MISMATCH!>r<!>
|
||||
val <!UNUSED_VARIABLE!>g<!>: ()-> Any = r
|
||||
@@ -73,11 +73,11 @@ fun testCoercionToUnit() {
|
||||
|
||||
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>x<!> = 43
|
||||
val checkType = {
|
||||
<!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (true) {
|
||||
x = 4
|
||||
if (true) {
|
||||
<!IMPLICIT_CAST_TO_ANY!>x = 4<!>
|
||||
} else {
|
||||
45
|
||||
}<!>
|
||||
<!IMPLICIT_CAST_TO_ANY!>45<!>
|
||||
}
|
||||
}
|
||||
val <!UNUSED_VARIABLE!>f<!> : () -> String = <!TYPE_MISMATCH!>checkType<!>
|
||||
}
|
||||
@@ -93,18 +93,18 @@ fun testImplicitCoercion() {
|
||||
else -> z = 20
|
||||
}
|
||||
|
||||
var <!UNUSED_VARIABLE!>u<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when(d) {
|
||||
var <!UNUSED_VARIABLE!>u<!> = when(d) {
|
||||
3 -> {
|
||||
<!UNUSED_VALUE!>z =<!> 34
|
||||
<!IMPLICIT_CAST_TO_ANY!><!UNUSED_VALUE!>z =<!> 34<!>
|
||||
}
|
||||
else -> <!UNUSED_CHANGED_VALUE!>z--<!>
|
||||
}<!>
|
||||
else -> <!UNUSED_CHANGED_VALUE, IMPLICIT_CAST_TO_ANY!>z--<!>
|
||||
}
|
||||
|
||||
var <!UNUSED_VARIABLE!>iff<!> = <!INVALID_IF_AS_EXPRESSION!>if (true) {
|
||||
<!UNUSED_VALUE!>z =<!> 34
|
||||
}<!>
|
||||
val <!UNUSED_VARIABLE!>g<!> = <!INVALID_IF_AS_EXPRESSION!>if (true) 4<!>
|
||||
val <!UNUSED_VARIABLE!>h<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>if (false) 4 else {}<!>
|
||||
val <!UNUSED_VARIABLE!>h<!> = if (false) <!IMPLICIT_CAST_TO_ANY!>4<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!>
|
||||
|
||||
bar(if (true) {
|
||||
<!CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
|
||||
|
||||
+11
-2
@@ -1,7 +1,16 @@
|
||||
val test1 = { <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when (true) { true -> 1; else -> "" }<!> }
|
||||
val test1 = { when (true) { true -> <!IMPLICIT_CAST_TO_ANY!>1<!>; else -> <!IMPLICIT_CAST_TO_ANY!>""<!> } }
|
||||
|
||||
val test2 = { { <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when (true) { true -> 1; else -> "" }<!> } }
|
||||
val test2 = { { when (true) { true -> <!IMPLICIT_CAST_TO_ANY!>1<!>; else -> <!IMPLICIT_CAST_TO_ANY!>""<!> } } }
|
||||
|
||||
val test3: (Boolean) -> Any = { when (true) { true -> 1; else -> "" } }
|
||||
|
||||
val test4: (Boolean) -> Any? = { when (true) { true -> 1; else -> "" } }
|
||||
|
||||
fun println() {}
|
||||
|
||||
val test5 = {
|
||||
when (true) {
|
||||
true -> println()
|
||||
else -> println()
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -4,3 +4,5 @@ public val test1: () -> kotlin.Any
|
||||
public val test2: () -> () -> kotlin.Any
|
||||
public val test3: (kotlin.Boolean) -> kotlin.Any
|
||||
public val test4: (kotlin.Boolean) -> kotlin.Any?
|
||||
public val test5: () -> kotlin.Unit
|
||||
public fun println(): kotlin.Unit
|
||||
|
||||
Reference in New Issue
Block a user