Tracking of incoming lambda's for outflow analysis
This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
||||
// FLOW: OUT
|
||||
|
||||
fun foo(<caret>p: String) {
|
||||
val v1 = p.let { value -> bar(value) }
|
||||
|
||||
val v2 = p.let { it }
|
||||
|
||||
val v3 = p.let {
|
||||
val it = "a"
|
||||
it
|
||||
}
|
||||
}
|
||||
|
||||
fun bar(s: String) = s
|
||||
|
||||
inline fun <T, R> T.let(block: (T) -> R): R {
|
||||
return block(this)
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
3 fun foo(<bold>p: String</bold>) {
|
||||
4 val v1 = <bold>p</bold>.let { value -> bar(value) }
|
||||
16 (INLINE CALL let) inline fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
17 (INLINE CALL let) return block(<bold>this</bold>)
|
||||
16 (INLINE CALL let) [LAMBDA ARGUMENT IN] inline fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
4 [LAMBDA ARGUMENT IN] val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
4 val v1 = p.let { <bold>value</bold> -> bar(value) }
|
||||
4 val v1 = p.let { value -> bar(<bold>value</bold>) }
|
||||
14 fun bar(<bold>s: String</bold>) = s
|
||||
14 fun bar(s: String) = <bold>s</bold>
|
||||
14 fun <bold>bar(s: String) = s</bold>
|
||||
4 val v1 = p.let { value -> <bold>bar(value)</bold> }
|
||||
4 val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
4 [LAMBDA CALLS] val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
16 (INLINE CALL let) [LAMBDA CALLS] inline fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
17 (INLINE CALL let) return <bold>block(this)</bold>
|
||||
4 val v1 = p.<bold>let { value -> bar(value) }</bold>
|
||||
4 val <bold>v1 = p.let { value -> bar(value) }</bold>
|
||||
6 val v2 = <bold>p</bold>.let { it }
|
||||
16 (INLINE CALL let) inline fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
17 (INLINE CALL let) return block(<bold>this</bold>)
|
||||
16 (INLINE CALL let) [LAMBDA ARGUMENT IN] inline fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
6 [LAMBDA ARGUMENT IN] val v2 = p.let <bold>{ it }</bold>
|
||||
6 val v2 = p.let { <bold>it</bold> }
|
||||
6 val v2 = p.let <bold>{ it }</bold>
|
||||
6 [LAMBDA CALLS] val v2 = p.let <bold>{ it }</bold>
|
||||
16 (INLINE CALL let) [LAMBDA CALLS] inline fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
17 (INLINE CALL let) return <bold>block(this)</bold>
|
||||
6 val v2 = p.<bold>let { it }</bold>
|
||||
6 val <bold>v2 = p.let { it }</bold>
|
||||
8 val v3 = <bold>p</bold>.let {
|
||||
16 (INLINE CALL let) inline fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
17 (INLINE CALL let) return block(<bold>this</bold>)
|
||||
16 (INLINE CALL let) [LAMBDA ARGUMENT IN] inline fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
8 [LAMBDA ARGUMENT IN] val v3 = p.let <bold>{</bold>
|
||||
@@ -0,0 +1,18 @@
|
||||
// FLOW: OUT
|
||||
|
||||
fun foo(<caret>p: String) {
|
||||
val v1 = p.let { value -> bar(value) }
|
||||
|
||||
val v2 = p.let { it }
|
||||
|
||||
val v3 = p.let {
|
||||
val it = "a"
|
||||
it
|
||||
}
|
||||
}
|
||||
|
||||
fun bar(s: String) = s
|
||||
|
||||
fun <T, R> T.let(block: (T) -> R): R {
|
||||
return block(this)
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
3 fun foo(<bold>p: String</bold>) {
|
||||
4 val v1 = <bold>p</bold>.let { value -> bar(value) }
|
||||
16 fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
17 return block(<bold>this</bold>)
|
||||
16 [LAMBDA ARGUMENT IN] fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
4 [LAMBDA ARGUMENT IN] val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
4 val v1 = p.let { <bold>value</bold> -> bar(value) }
|
||||
4 val v1 = p.let { value -> bar(<bold>value</bold>) }
|
||||
14 fun bar(<bold>s: String</bold>) = s
|
||||
14 fun bar(s: String) = <bold>s</bold>
|
||||
14 fun <bold>bar(s: String) = s</bold>
|
||||
4 val v1 = p.let { value -> <bold>bar(value)</bold> }
|
||||
4 val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
4 [LAMBDA CALLS] val v1 = p.let <bold>{ value -> bar(value) }</bold>
|
||||
16 [LAMBDA CALLS] fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
17 return <bold>block(this)</bold>
|
||||
16 fun <T, R> T.<bold>let(block: (T) -> R): R {</bold>
|
||||
4 val v1 = p.<bold>let { value -> bar(value) }</bold>
|
||||
4 val <bold>v1 = p.let { value -> bar(value) }</bold>
|
||||
6 val v2 = p.<bold>let { it }</bold>
|
||||
6 val <bold>v2 = p.let { it }</bold>
|
||||
8 val v3 = p.<bold>let {</bold>
|
||||
8 val <bold>v3 = p.let {</bold>
|
||||
6 [LAMBDA ARGUMENT IN] val v2 = p.let <bold>{ it }</bold>
|
||||
6 val v2 = p.let { <bold>it</bold> }
|
||||
6 val v2 = p.let <bold>{ it }</bold>
|
||||
6 [LAMBDA CALLS] val v2 = p.let <bold>{ it }</bold>
|
||||
16 [LAMBDA CALLS] DUPLICATE: fun <T, R> T.let(<bold>block: (T) -> R</bold>): R {
|
||||
8 [LAMBDA ARGUMENT IN] val v3 = p.let <bold>{</bold>
|
||||
6 val v2 = <bold>p</bold>.let { it }
|
||||
16 DUPLICATE: fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
8 val v3 = <bold>p</bold>.let {
|
||||
16 DUPLICATE: fun <T, R> <bold>T</bold>.let(block: (T) -> R): R {
|
||||
Reference in New Issue
Block a user