Files
kotlin-fork/idea/testData/checker/infos/CapturedInInlinedClosure.kt
T
Denis Zharkov fc447e2d2f Parse some builtin annotations as modifiers
But still resolve them as annotations.
Mostly it's needed as begin of migration path, one day they become modifiers anyway

Some tests are dropped because they supposed that `annotation` should have parameter
2015-09-08 08:53:35 +03:00

102 lines
2.8 KiB
Kotlin
Vendored

<info descr="null">inline</info> fun <T> run(f: () -> T) = f()
fun run2(f: () -> Unit) = f()
fun inline() {
val x = 1
run { x }
val x1 = 1
run ({ x1 })
val x2 = 1
run (f = { x2 })
val x3 = 1
run {
run {
x3
}
}
}
fun notInline() {
val <info descr="Value captured in a closure">y2</info> = 1
run { <info descr="Value captured in a closure">y2</info> }
run2 { <warning><info descr="Value captured in a closure">y2</info></warning> }
val <info descr="Value captured in a closure">y3</info> = 1
run2 { <warning><info descr="Value captured in a closure">y3</info></warning> }
run { <info descr="Value captured in a closure">y3</info> }
// wrapped, using in not inline
val <info descr="Value captured in a closure">z</info> = 2
{ <info descr="Value captured in a closure">z</info> }()
val <info descr="Value captured in a closure">z1</info> = 3
run2 { <warning><info descr="Value captured in a closure">z1</info></warning> }
}
fun nestedDifferent() { // inline within non-inline and vice-versa
val <info descr="Value captured in a closure">y</info> = 1
{
run {
<info descr="Value captured in a closure">y</info>
}
}()
val <info descr="Value captured in a closure">y1</info> = 1
run {
{ <info descr="Value captured in a closure">y1</info> }()
}
}
fun localFunctionAndClass() {
val <info descr="Value captured in a closure">u</info> = 1
fun localFun() {
run {
<info descr="Value captured in a closure">u</info>
}
}
val <info descr="Value captured in a closure">v</info> = 1
class LocalClass {
fun f() {
run {
<info descr="Value captured in a closure">v</info>
}
}
}
}
fun objectExpression() {
val <info descr="Value captured in a closure">u1</info> = 1
object : Any() {
fun f() {
run {
<info descr="Value captured in a closure">u1</info>
}
}
}
val <info descr="Value captured in a closure">u2</info> = 1
object : Any() {
val <info>prop</info> = run {
<info descr="Value captured in a closure">u2</info>
}
}
val <info descr="Value captured in a closure">u3</info> = ""
object : Throwable(run { <info descr="Value captured in a closure">u3</info> }) {
}
}
<info>inline</info> fun withNoInlineParam(<info>noinline</info> task1: () -> Unit, task2: () -> Unit) {
task1()
task2()
}
fun usage(<info descr="Value captured in a closure">param1</info>: Int, param2: Int) {
withNoInlineParam({ println(<info descr="Value captured in a closure">param1</info>) }, { println(param2) })
}
fun println(<warning>a</warning>: Any) {}