Frontend support for function as expression
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
annotation class ann(val name: String)
|
||||
val ok = "OK"
|
||||
|
||||
class A
|
||||
|
||||
val withName = fun name() {}
|
||||
val extensionWithName = fun A.name() {}
|
||||
val withoutName = fun () {}
|
||||
val extensionWithoutName = fun A.() {}
|
||||
|
||||
fun withAnnotation() = [ann(ok)] fun () {}
|
||||
val withReturn = fun (): Int { return 5}
|
||||
val withExpression = fun() = 5
|
||||
val funfun = fun() = fun() = 5
|
||||
|
||||
val parentesized = (fun () {})
|
||||
val parentesizedWithType = (fun () {}) : () -> Unit
|
||||
val withType = (fun () {}) : () -> Unit
|
||||
@@ -0,0 +1,29 @@
|
||||
package
|
||||
|
||||
internal val extensionWithName: A.() -> kotlin.Unit
|
||||
internal val extensionWithoutName: A.() -> kotlin.Unit
|
||||
internal val funfun: () -> () -> kotlin.Int
|
||||
internal val ok: kotlin.String = "OK"
|
||||
internal val parentesized: () -> kotlin.Unit
|
||||
internal val parentesizedWithType: () -> kotlin.Unit
|
||||
internal val withExpression: () -> kotlin.Int
|
||||
internal val withName: () -> kotlin.Unit
|
||||
internal val withReturn: () -> kotlin.Int
|
||||
internal val withType: () -> kotlin.Unit
|
||||
internal val withoutName: () -> kotlin.Unit
|
||||
internal fun withAnnotation(): () -> kotlin.Unit
|
||||
|
||||
internal final class A {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final annotation class ann : kotlin.Annotation {
|
||||
public constructor ann(/*0*/ name: kotlin.String)
|
||||
internal final val name: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
fun test() {
|
||||
fun bar() {
|
||||
val bas = fun() {
|
||||
<!RETURN_NOT_ALLOWED!>return@bar<!>
|
||||
}
|
||||
}
|
||||
|
||||
val bar = fun() {
|
||||
<!RETURN_NOT_ALLOWED!>return@test<!>
|
||||
}
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
val bal = @bag fun () {
|
||||
val bar = fun() {
|
||||
<!RETURN_NOT_ALLOWED!>return@bag<!>
|
||||
}
|
||||
return@bag
|
||||
}
|
||||
val bag = fun name() {
|
||||
val bar = fun () {
|
||||
<!RETURN_NOT_ALLOWED!>return@name<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
internal fun foo(): kotlin.Unit
|
||||
internal fun test(): kotlin.Unit
|
||||
@@ -0,0 +1,31 @@
|
||||
// !CHECK_TYPE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
fun testReturnType(foo: String) {
|
||||
val bar = fun () = foo
|
||||
|
||||
bar.checkType { it : _<() -> String> }
|
||||
|
||||
val bas: () -> String = fun () = foo
|
||||
|
||||
val bag: () -> Int = <!TYPE_MISMATCH!>fun () = foo<!>
|
||||
}
|
||||
|
||||
fun testParamType() {
|
||||
val bar = fun (bal: String){}
|
||||
|
||||
bar.checkType { it : _<(String) -> Unit> }
|
||||
|
||||
val bas: (String) -> Unit = fun (param: String) {}
|
||||
val bag: (Int) -> Unit = <!TYPE_MISMATCH!>fun (param: String) {}<!>
|
||||
}
|
||||
|
||||
fun testReceiverType() {
|
||||
val bar = fun String.() {}
|
||||
|
||||
bar.checkType { it : _<String.() -> Unit> }
|
||||
|
||||
val bas: String.() -> Unit = fun String.() {}
|
||||
|
||||
val bag: Int.() -> Unit = <!TYPE_MISMATCH!>fun String.() {}<!>
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
internal fun testParamType(): kotlin.Unit
|
||||
internal fun testReceiverType(): kotlin.Unit
|
||||
internal fun testReturnType(/*0*/ foo: kotlin.String): kotlin.Unit
|
||||
@@ -0,0 +1,18 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
val bar = fun name() {}
|
||||
val bas = fun name() {}
|
||||
|
||||
fun gar(p: Any?) = fun name() {}
|
||||
fun gas(p: Any?) = fun name() {}
|
||||
|
||||
fun outer() {
|
||||
val bar = fun name() {}
|
||||
val bas = fun name() {}
|
||||
|
||||
fun gar(p: Any?) = fun name() {}
|
||||
fun gas(p: Any?) = fun name() {}
|
||||
|
||||
gar(fun name() {})
|
||||
gar(fun name() {})
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package
|
||||
|
||||
internal val bar: () -> kotlin.Unit
|
||||
internal val bas: () -> kotlin.Unit
|
||||
internal fun gar(/*0*/ p: kotlin.Any?): () -> kotlin.Unit
|
||||
internal fun gas(/*0*/ p: kotlin.Any?): () -> kotlin.Unit
|
||||
internal fun outer(): kotlin.Unit
|
||||
@@ -0,0 +1,18 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
val bar = fun(p: Int = <!FUNCTION_EXPRESSION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
||||
val bas = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
||||
|
||||
fun gar() = fun(p: Int = <!FUNCTION_EXPRESSION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
||||
fun gas() = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
||||
|
||||
fun outer(b: Any?) {
|
||||
val bar = fun(p: Int = <!FUNCTION_EXPRESSION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
||||
val bas = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
||||
|
||||
fun gar() = fun(p: Int = <!FUNCTION_EXPRESSION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
||||
fun gas() = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
||||
|
||||
outer(fun(p: Int = <!FUNCTION_EXPRESSION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {})
|
||||
outer(fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {})
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package
|
||||
|
||||
internal val bar: (kotlin.Int) -> kotlin.Unit
|
||||
internal val bas: (kotlin.IntArray) -> kotlin.Unit
|
||||
internal fun gar(): (kotlin.Int) -> kotlin.Unit
|
||||
internal fun gas(): (kotlin.IntArray) -> kotlin.Unit
|
||||
internal fun outer(/*0*/ b: kotlin.Any?): kotlin.Unit
|
||||
@@ -0,0 +1,13 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
val label_fun = @label fun () {
|
||||
return@label
|
||||
}
|
||||
|
||||
val parenthesized_label_fun = (@label fun () {
|
||||
return@label
|
||||
})
|
||||
|
||||
val fun_with_name = fun name() {
|
||||
return@name
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
internal val fun_with_name: () -> kotlin.Unit
|
||||
internal val label_fun: () -> kotlin.Unit
|
||||
internal val parenthesized_label_fun: () -> kotlin.Unit
|
||||
@@ -0,0 +1,9 @@
|
||||
val foo = fun(a: Int): String {
|
||||
if (a == 1) return "4"
|
||||
when (a) {
|
||||
5 -> return "2"
|
||||
3 -> return <!NULL_FOR_NONNULL_TYPE!>null<!>
|
||||
2 -> return <!CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal val foo: (kotlin.Int) -> kotlin.String
|
||||
@@ -0,0 +1,20 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
trait B {
|
||||
fun b_fun() {}
|
||||
}
|
||||
|
||||
fun test(param: String) {
|
||||
|
||||
val local_val = 4
|
||||
val bar = fun B.(fun_param: Int) {
|
||||
param.length()
|
||||
b_fun()
|
||||
val inner_bar = local_val + fun_param
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>bar<!>
|
||||
}
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>inner_bar<!>
|
||||
<!UNRESOLVED_REFERENCE!>fun_param<!>
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package
|
||||
|
||||
internal fun test(/*0*/ param: kotlin.String): kotlin.Unit
|
||||
|
||||
internal trait B {
|
||||
internal open fun b_fun(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
trait A
|
||||
fun devNull(a: Any?){}
|
||||
|
||||
val generic_fun = fun<!TYPE_PARAMETERS_NOT_ALLOWED!><T><!>(t: T): T = null!!
|
||||
val extension_generic_fun = fun<!TYPE_PARAMETERS_NOT_ALLOWED!><T><!><!UNRESOLVED_REFERENCE!>T<!>.(t: T): T = null!!
|
||||
|
||||
fun fun_with_where() = fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!> <!UNRESOLVED_REFERENCE!>T<!>.(t: T): T where T: A {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
|
||||
fun outer() {
|
||||
devNull(fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!>() {})
|
||||
devNull(fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!> T.name() {})
|
||||
devNull(fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!> name(): T = null!!)
|
||||
devNull(fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!> name(t: T) {})
|
||||
devNull(fun <!TYPE_PARAMETERS_NOT_ALLOWED!><T><!> name() where T:A {})
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
internal val extension_generic_fun: [ERROR : T].(T) -> T
|
||||
internal val generic_fun: (T) -> T
|
||||
internal fun devNull(/*0*/ a: kotlin.Any?): kotlin.Unit
|
||||
internal fun fun_with_where(): [ERROR : T].(T) -> T
|
||||
internal fun outer(): kotlin.Unit
|
||||
|
||||
internal trait A {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
fun <T> parameter() = fun (t: T) = t
|
||||
fun <T> receiver() = fun T.() = this
|
||||
fun <T> returnType() = fun (): T = null!!
|
||||
|
||||
val <T> T.fromVal: () -> T get() = fun (): T = this@fromVal
|
||||
|
||||
fun devNull(a: Any?){}
|
||||
|
||||
fun <O> outer() {
|
||||
fun <T> parameter() = fun (t: T) = t
|
||||
fun <T> receiver() = fun T.() = this
|
||||
fun <T> returnType() = fun (): T = null!!
|
||||
|
||||
devNull(fun (t: O) = t)
|
||||
devNull(fun O.() = this)
|
||||
devNull(fun (): O = null!!)
|
||||
}
|
||||
|
||||
class Outer<O> {
|
||||
fun <T> parameter() = fun (t: T) = t
|
||||
fun <T> receiver() = fun T.() = this
|
||||
fun <T> returnType() = fun (): T = null!!
|
||||
|
||||
init {
|
||||
devNull(fun (t: O) = t)
|
||||
devNull(fun O.() = this)
|
||||
devNull(fun (): O = null!!)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package
|
||||
|
||||
internal val </*0*/ T> T.fromVal: () -> T
|
||||
internal fun devNull(/*0*/ a: kotlin.Any?): kotlin.Unit
|
||||
internal fun </*0*/ O> outer(): kotlin.Unit
|
||||
internal fun </*0*/ T> parameter(): (T) -> T
|
||||
internal fun </*0*/ T> receiver(): T.() -> T
|
||||
internal fun </*0*/ T> returnType(): () -> T
|
||||
|
||||
internal final class Outer</*0*/ O> {
|
||||
public constructor Outer</*0*/ O>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
internal final fun </*0*/ T> parameter(): (T) -> T
|
||||
internal final fun </*0*/ T> receiver(): T.() -> T
|
||||
internal final fun </*0*/ T> returnType(): () -> T
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
annotation class ann
|
||||
val bas = <!NON_MEMBER_FUNCTION_NO_BODY!>fun ()<!>
|
||||
|
||||
fun bar(a: Any) = <!NON_MEMBER_FUNCTION_NO_BODY!>fun name()<!>
|
||||
|
||||
fun outer() {
|
||||
bar(<!NON_MEMBER_FUNCTION_NO_BODY!>fun ()<!>)
|
||||
bar(<!NON_MEMBER_FUNCTION_NO_BODY!>fun name()<!>)
|
||||
bar(<!NON_MEMBER_FUNCTION_NO_BODY!>[ann] fun name()<!>)
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
internal val bas: () -> kotlin.Unit
|
||||
internal fun bar(/*0*/ a: kotlin.Any): () -> kotlin.Unit
|
||||
internal fun outer(): kotlin.Unit
|
||||
|
||||
internal final annotation class ann : kotlin.Annotation {
|
||||
public constructor ann()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user