Fix false USELESS_CAST in function with expression body

Note that current behaviour is made similar to the case with
properties initializers/accessors, which means that more complex
cases are not covered yet (see KT-20801) #KT-20802 fixed.
This commit is contained in:
Dmitry Savvinov
2017-10-17 13:46:18 +03:00
parent a1778a7da8
commit 58b815d842
6 changed files with 43 additions and 8 deletions
@@ -0,0 +1,12 @@
fun <T> id(x: T): T = x
fun foo() = 1 as Any
fun bar() = id(1) as Any
fun baz() = (1 + 1) as Any
val functionLiteral1 = fun() = 1 as Any
val functionLiteral2 = fun() = id(1) as Any
val functionLiteral3 = fun() = (1 + 1) as Any
// TODO: this and more complex cases are not supported yet
fun baz(b: Boolean) = if (b) 1 <!USELESS_CAST!>as Any<!> else 42 <!USELESS_CAST!>as Any?<!>
@@ -0,0 +1,10 @@
package
public val functionLiteral1: () -> kotlin.Any
public val functionLiteral2: () -> kotlin.Any
public val functionLiteral3: () -> kotlin.Any
public fun bar(): kotlin.Any
public fun baz(): kotlin.Any
public fun baz(/*0*/ b: kotlin.Boolean): kotlin.Any?
public fun foo(): kotlin.Any
public fun </*0*/ T> id(/*0*/ x: T): T
+6 -6
View File
@@ -23,9 +23,9 @@ fun test() {
val f = TODO() as Interface
}
fun a() = TODO() <!USELESS_CAST!>as Any<!>
fun b() = TODO() <!USELESS_CAST!>as Any?<!>
fun c() = TODO() <!USELESS_CAST!>as OpenClass<!>
fun d() = TODO() <!USELESS_CAST!>as FinalClass<!>
fun e() = TODO() <!USELESS_CAST!>as AbstractClass<!>
fun f() = TODO() <!USELESS_CAST!>as Interface<!>
fun a() = TODO() as Any
fun b() = TODO() as Any?
fun c() = TODO() as OpenClass
fun d() = TODO() as FinalClass
fun e() = TODO() as AbstractClass
fun f() = TODO() as Interface