Merge pull request #10473 from tamasvajk/kotlin-suspend

Kotlin: Extract `suspend` functions
This commit is contained in:
Tamás Vajk
2022-09-21 14:22:44 +02:00
committed by GitHub
26 changed files with 1010 additions and 80 deletions

View File

@@ -67,6 +67,9 @@ abstract class Modifiable extends Element {
/** Holds if this element has an `inline` modifier. */
predicate isInline() { this.hasModifier("inline") }
/** Holds if this element has a `suspend` modifier. */
predicate isSuspend() { this.hasModifier("suspend") }
/** Holds if this element has a `volatile` modifier. */
predicate isVolatile() { this.hasModifier("volatile") }

View File

@@ -0,0 +1,8 @@
import kotlinx.coroutines.*
suspend fun fn() {
GlobalScope.launch {
val x: Deferred<String> = async { Helper.taint() }
Helper.sink(x.await()) // TODO: not found
}
}

View File

@@ -2,10 +2,11 @@ class FunctionReference {
fun fn1(s: String) = s
fun test() {
suspend fun test() {
fun fn2(s: String) = s
Helper.sink(Processor().process(this::fn1, Helper.taint()))
Helper.sink(Processor().processSusp(this::fn1Susp, Helper.taint()))
Helper.sink(Processor().process(FunctionReference::fn1, this, Helper.taint()))
Helper.sink(Processor().process(this::fn1, Helper.notaint()))
Helper.sink(Processor().process(::fn2, Helper.taint()))
@@ -16,4 +17,6 @@ class FunctionReference {
val prop: String
get() = Helper.taint()
suspend fun fn1Susp(s: String) = s
}

View File

@@ -0,0 +1,33 @@
/**
* Stubs for `kotlinx.coroutines`
*/
@file:JvmName("BuildersKt") // Required for `async`
package kotlinx.coroutines
public interface CoroutineScope
public interface CoroutineContext
public enum class CoroutineStart { DEFAULT }
public interface Job
public interface Deferred<out T> : Job {
public suspend fun await(): T
}
public object GlobalScope : CoroutineScope
public fun CoroutineScope.launch(
context: CoroutineContext = null!!,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> Unit
): Job {
return null!!
}
public fun <T> CoroutineScope.async(
context: CoroutineContext = null!!,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> T
): Deferred<T> {
return null!!
}

View File

@@ -1,7 +1,8 @@
class Lambda {
fun test() {
suspend fun test() {
Helper.sink(Processor().process({ it: String -> Helper.notaint() }, ""))
Helper.sink(Processor().process({ it: String -> Helper.taint() }, ""))
Helper.sink(Processor().processSusp({ it: String -> Helper.taint() }, ""))
Helper.sink(Processor().process({ i -> i }, Helper.taint()))
Helper.sink(Processor().process(fun (i: String) = i, Helper.taint()))
@@ -29,4 +30,4 @@ class ManualBigLambda {
Helper.sink(invoke(arrayOf(Helper.taint(), Helper.notaint())))
Helper.sink(invoke(arrayOf(Helper.notaint(), Helper.taint()))) // False positive
}
}
}

View File

@@ -1,9 +1,15 @@
class LocalFunction {
fun test() {
suspend fun test() {
fun fn1() = Helper.taint()
fun fn2(s: String) = s
Helper.sink(fn1())
Helper.sink(fn2(Helper.taint()))
suspend fun fn3() = Helper.taint()
suspend fun fn4(s: String) = s
Helper.sink(fn3())
Helper.sink(fn4(Helper.taint()))
}
}

View File

@@ -2,12 +2,22 @@ fun interface Predicate {
fun go(s: String): String
}
fun interface PredicateSusp {
suspend fun go(s: String): String
}
class SamConversion {
fun test() {
suspend fun test() {
val p1 = Predicate { Helper.taint() }
val p2 = Predicate { it -> it }
Helper.sink(p1.go(""))
Helper.sink(p1.go(Helper.taint()))
Helper.sink(p2.go(Helper.taint()))
val p3 = PredicateSusp { Helper.taint() }
val p4 = PredicateSusp { it -> it }
Helper.sink(p3.go(""))
Helper.sink(p4.go(Helper.taint()))
}
}

View File

@@ -1,18 +1,22 @@
| functionReference.kt:8:59:8:65 | taint(...) | functionReference.kt:8:33:8:66 | process(...) |
| functionReference.kt:9:78:9:84 | taint(...) | functionReference.kt:9:33:9:85 | process(...) |
| functionReference.kt:11:55:11:61 | taint(...) | functionReference.kt:11:33:11:62 | process(...) |
| functionReference.kt:18:24:18:30 | taint(...) | functionReference.kt:14:33:14:51 | process(...) |
| functionReference.kt:10:78:10:84 | taint(...) | functionReference.kt:10:33:10:85 | process(...) |
| functionReference.kt:12:55:12:61 | taint(...) | functionReference.kt:12:33:12:62 | process(...) |
| functionReference.kt:19:24:19:30 | taint(...) | functionReference.kt:15:33:15:51 | process(...) |
| lambda.kt:4:64:4:70 | taint(...) | lambda.kt:4:33:4:77 | process(...) |
| lambda.kt:5:60:5:66 | taint(...) | lambda.kt:5:33:5:67 | process(...) |
| lambda.kt:6:69:6:75 | taint(...) | lambda.kt:6:33:6:76 | process(...) |
| lambda.kt:9:81:9:87 | taint(...) | lambda.kt:9:33:9:88 | processExt(...) |
| lambda.kt:10:66:10:72 | taint(...) | lambda.kt:10:33:10:91 | processExt(...) |
| lambda.kt:13:145:13:151 | taint(...) | lambda.kt:13:33:13:170 | process(...) |
| lambda.kt:14:163:14:169 | taint(...) | lambda.kt:14:33:14:170 | process(...) |
| lambda.kt:27:35:27:41 | taint(...) | lambda.kt:27:21:27:60 | invoke(...) |
| lambda.kt:29:43:29:49 | taint(...) | lambda.kt:29:21:29:69 | invoke(...) |
| lambda.kt:30:61:30:67 | taint(...) | lambda.kt:30:21:30:69 | invoke(...) |
| lambda.kt:6:60:6:66 | taint(...) | lambda.kt:6:33:6:67 | process(...) |
| lambda.kt:7:69:7:75 | taint(...) | lambda.kt:7:33:7:76 | process(...) |
| lambda.kt:10:81:10:87 | taint(...) | lambda.kt:10:33:10:88 | processExt(...) |
| lambda.kt:11:66:11:72 | taint(...) | lambda.kt:11:33:11:91 | processExt(...) |
| lambda.kt:14:145:14:151 | taint(...) | lambda.kt:14:33:14:170 | process(...) |
| lambda.kt:15:163:15:169 | taint(...) | lambda.kt:15:33:15:170 | process(...) |
| lambda.kt:28:35:28:41 | taint(...) | lambda.kt:28:21:28:60 | invoke(...) |
| lambda.kt:30:43:30:49 | taint(...) | lambda.kt:30:21:30:69 | invoke(...) |
| lambda.kt:31:61:31:67 | taint(...) | lambda.kt:31:21:31:69 | invoke(...) |
| localFunction.kt:3:28:3:34 | taint(...) | localFunction.kt:6:21:6:25 | fn1(...) |
| localFunction.kt:7:32:7:38 | taint(...) | localFunction.kt:7:21:7:39 | fn2(...) |
| samConversion.kt:7:37:7:43 | taint(...) | samConversion.kt:10:24:10:29 | go(...) |
| samConversion.kt:7:37:7:43 | taint(...) | samConversion.kt:11:24:11:41 | go(...) |
| localFunction.kt:9:36:9:42 | taint(...) | localFunction.kt:12:21:12:25 | fn3(...) |
| localFunction.kt:13:32:13:38 | taint(...) | localFunction.kt:13:21:13:39 | fn4(...) |
| samConversion.kt:11:37:11:43 | taint(...) | samConversion.kt:14:24:14:29 | go(...) |
| samConversion.kt:15:34:15:40 | taint(...) | samConversion.kt:15:24:15:41 | go(...) |
| samConversion.kt:17:41:17:47 | taint(...) | samConversion.kt:20:24:20:29 | go(...) |
| samConversion.kt:21:34:21:40 | taint(...) | samConversion.kt:21:24:21:41 | go(...) |

View File

@@ -7,6 +7,10 @@ class Processor {
return f(arg)
}
suspend fun <T, R2> processSusp(f: suspend (T) -> R2, arg: T) : R2 {
return f(arg)
}
fun <T0, T1, R3> process(f: (T0, T1) -> R3, arg0: T0, arg1: T1) : R3 {
return f(arg0, arg1)
}

View File

@@ -4620,6 +4620,382 @@ funcExprs.kt:
# 59| 5: [BlockStmt] { ... }
# 59| 0: [ReturnStmt] return ...
# 59| 0: [IntegerLiteral] 5
# 82| 16: [Method] fn
# 82| 3: [TypeAccess] Unit
# 82| 5: [BlockStmt] { ... }
# 83| 0: [LocalVariableDeclStmt] var ...;
# 83| 1: [LocalVariableDeclExpr] l1
# 83| 0: [LambdaExpr] ...->...
# 83| -4: [AnonymousClass] new Function1<Integer,String>(...) { ... }
# 83| 1: [Constructor]
# 83| 5: [BlockStmt] { ... }
# 83| 0: [SuperConstructorInvocationStmt] super(...)
# 83| 2: [Method] invoke
# 83| 3: [TypeAccess] String
#-----| 4: (Parameters)
# 83| 0: [Parameter] i
# 83| 0: [TypeAccess] int
# 83| 5: [BlockStmt] { ... }
# 83| 0: [ReturnStmt] return ...
# 83| 0: [MethodAccess] toString(...)
# 83| -1: [VarAccess] i
# 83| -3: [TypeAccess] Function1<Integer,String>
# 83| 0: [TypeAccess] Integer
# 83| 1: [TypeAccess] String
# 84| 1: [ExprStmt] <Expr>;
# 84| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 84| 0: [TypeAccess] Unit
# 84| 1: [MethodAccess] invoke(...)
# 84| -1: [VarAccess] l1
# 84| 0: [IntegerLiteral] 5
# 86| 2: [LocalVariableDeclStmt] var ...;
# 86| 1: [LocalVariableDeclExpr] l2
# 86| 0: [LambdaExpr] ...->...
# 86| -4: [AnonymousClass] new Function1<Integer,String>(...) { ... }
# 86| 1: [Constructor]
# 86| 5: [BlockStmt] { ... }
# 86| 0: [SuperConstructorInvocationStmt] super(...)
# 86| 2: [Method] invoke
# 86| 3: [TypeAccess] String
#-----| 4: (Parameters)
# 86| 0: [Parameter] i
# 86| 0: [TypeAccess] int
# 86| 5: [BlockStmt] { ... }
# 86| 0: [ReturnStmt] return ...
# 86| 0: [MethodAccess] toString(...)
# 86| -1: [VarAccess] i
# 86| -3: [TypeAccess] Function1<Integer,String>
# 86| 0: [TypeAccess] Integer
# 86| 1: [TypeAccess] String
# 87| 3: [ExprStmt] <Expr>;
# 87| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 87| 0: [TypeAccess] Unit
# 87| 1: [MethodAccess] invoke(...)
# 87| -1: [VarAccess] l2
# 87| 0: [IntegerLiteral] 5
# 89| 4: [LocalVariableDeclStmt] var ...;
# 89| 1: [LocalVariableDeclExpr] l3
# 90| 0: [LambdaExpr] ...->...
# 90| -4: [AnonymousClass] new FunctionN<String>(...) { ... }
# 90| 1: [Constructor]
# 90| 5: [BlockStmt] { ... }
# 90| 0: [SuperConstructorInvocationStmt] super(...)
# 90| 2: [Method] invoke
# 90| 3: [TypeAccess] String
#-----| 4: (Parameters)
# 90| 0: [Parameter] p0
# 90| 0: [TypeAccess] int
# 90| 1: [Parameter] p1
# 90| 0: [TypeAccess] int
# 90| 2: [Parameter] p2
# 90| 0: [TypeAccess] int
# 90| 3: [Parameter] p3
# 90| 0: [TypeAccess] int
# 90| 4: [Parameter] p4
# 90| 0: [TypeAccess] int
# 90| 5: [Parameter] p5
# 90| 0: [TypeAccess] int
# 90| 6: [Parameter] p6
# 90| 0: [TypeAccess] int
# 90| 7: [Parameter] p7
# 90| 0: [TypeAccess] int
# 90| 8: [Parameter] p8
# 90| 0: [TypeAccess] int
# 90| 9: [Parameter] p9
# 90| 0: [TypeAccess] int
# 90| 10: [Parameter] p10
# 90| 0: [TypeAccess] int
# 90| 11: [Parameter] p11
# 90| 0: [TypeAccess] int
# 90| 12: [Parameter] p12
# 90| 0: [TypeAccess] int
# 90| 13: [Parameter] p13
# 90| 0: [TypeAccess] int
# 90| 14: [Parameter] p14
# 90| 0: [TypeAccess] int
# 90| 15: [Parameter] p15
# 90| 0: [TypeAccess] int
# 90| 16: [Parameter] p16
# 90| 0: [TypeAccess] int
# 90| 17: [Parameter] p17
# 90| 0: [TypeAccess] int
# 90| 18: [Parameter] p18
# 90| 0: [TypeAccess] int
# 90| 19: [Parameter] p19
# 90| 0: [TypeAccess] int
# 90| 20: [Parameter] p20
# 90| 0: [TypeAccess] int
# 90| 21: [Parameter] p21
# 90| 0: [TypeAccess] int
# 90| 22: [Parameter] p22
# 90| 0: [TypeAccess] int
# 90| 5: [BlockStmt] { ... }
# 90| 0: [ReturnStmt] return ...
# 90| 0: [StringLiteral]
# 90| 2: [Method] invoke
#-----| 4: (Parameters)
# 90| 0: [Parameter] a0
# 90| 5: [BlockStmt] { ... }
# 90| 0: [ReturnStmt] return ...
# 90| 0: [MethodAccess] invoke(...)
# 90| -1: [ThisAccess] this
# 90| 0: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 0
# 90| 1: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 1
# 90| 2: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 2
# 90| 3: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 3
# 90| 4: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 4
# 90| 5: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 5
# 90| 6: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 6
# 90| 7: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 7
# 90| 8: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 8
# 90| 9: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 9
# 90| 10: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 10
# 90| 11: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 11
# 90| 12: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 12
# 90| 13: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 13
# 90| 14: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 14
# 90| 15: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 15
# 90| 16: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 16
# 90| 17: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 17
# 90| 18: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 18
# 90| 19: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 19
# 90| 20: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 20
# 90| 21: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 21
# 90| 22: [CastExpr] (...)...
# 90| 0: [TypeAccess] int
# 90| 1: [ArrayAccess] ...[...]
# 90| 0: [VarAccess] a0
# 90| 1: [IntegerLiteral] 22
# 90| -3: [TypeAccess] FunctionN<String>
# 90| 0: [TypeAccess] String
# 91| 5: [ExprStmt] <Expr>;
# 91| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 91| 0: [TypeAccess] Unit
# 91| 1: [MethodAccess] invoke(...)
# 91| -1: [VarAccess] l3
# 91| 0: [ArrayCreationExpr] new Object[]
# 91| -2: [ArrayInit] {...}
# 91| 0: [IntegerLiteral] 1
# 91| 1: [IntegerLiteral] 2
# 91| 2: [IntegerLiteral] 3
# 91| 3: [IntegerLiteral] 4
# 91| 4: [IntegerLiteral] 5
# 91| 5: [IntegerLiteral] 6
# 91| 6: [IntegerLiteral] 7
# 91| 7: [IntegerLiteral] 8
# 91| 8: [IntegerLiteral] 9
# 91| 9: [IntegerLiteral] 0
# 91| 10: [IntegerLiteral] 1
# 91| 11: [IntegerLiteral] 2
# 91| 12: [IntegerLiteral] 3
# 91| 13: [IntegerLiteral] 4
# 91| 14: [IntegerLiteral] 5
# 91| 15: [IntegerLiteral] 6
# 91| 16: [IntegerLiteral] 7
# 91| 17: [IntegerLiteral] 8
# 91| 18: [IntegerLiteral] 9
# 91| 19: [IntegerLiteral] 0
# 91| 20: [IntegerLiteral] 1
# 91| 21: [IntegerLiteral] 2
# 91| 22: [IntegerLiteral] 3
# 91| -1: [TypeAccess] Object
# 91| 0: [IntegerLiteral] 23
# 93| 6: [LocalVariableDeclStmt] var ...;
# 93| 1: [LocalVariableDeclExpr] l4
# 94| 0: [LambdaExpr] ...->...
# 94| -4: [AnonymousClass] new Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,String>(...) { ... }
# 94| 1: [Constructor]
# 94| 5: [BlockStmt] { ... }
# 94| 0: [SuperConstructorInvocationStmt] super(...)
# 94| 2: [Method] invoke
# 94| 3: [TypeAccess] String
#-----| 4: (Parameters)
# 94| 0: [Parameter] p0
# 94| 0: [TypeAccess] int
# 94| 1: [Parameter] p1
# 94| 0: [TypeAccess] int
# 94| 2: [Parameter] p2
# 94| 0: [TypeAccess] int
# 94| 3: [Parameter] p3
# 94| 0: [TypeAccess] int
# 94| 4: [Parameter] p4
# 94| 0: [TypeAccess] int
# 94| 5: [Parameter] p5
# 94| 0: [TypeAccess] int
# 94| 6: [Parameter] p6
# 94| 0: [TypeAccess] int
# 94| 7: [Parameter] p7
# 94| 0: [TypeAccess] int
# 94| 8: [Parameter] p8
# 94| 0: [TypeAccess] int
# 94| 9: [Parameter] p9
# 94| 0: [TypeAccess] int
# 94| 10: [Parameter] p10
# 94| 0: [TypeAccess] int
# 94| 11: [Parameter] p11
# 94| 0: [TypeAccess] int
# 94| 12: [Parameter] p12
# 94| 0: [TypeAccess] int
# 94| 13: [Parameter] p13
# 94| 0: [TypeAccess] int
# 94| 14: [Parameter] p14
# 94| 0: [TypeAccess] int
# 94| 15: [Parameter] p15
# 94| 0: [TypeAccess] int
# 94| 16: [Parameter] p16
# 94| 0: [TypeAccess] int
# 94| 17: [Parameter] p17
# 94| 0: [TypeAccess] int
# 94| 18: [Parameter] p18
# 94| 0: [TypeAccess] int
# 94| 19: [Parameter] p19
# 94| 0: [TypeAccess] int
# 94| 20: [Parameter] p20
# 94| 0: [TypeAccess] int
# 94| 21: [Parameter] p21
# 94| 0: [TypeAccess] int
# 94| 5: [BlockStmt] { ... }
# 94| 0: [ReturnStmt] return ...
# 94| 0: [StringLiteral]
# 94| -3: [TypeAccess] Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,String>
# 94| 0: [TypeAccess] Integer
# 94| 1: [TypeAccess] Integer
# 94| 2: [TypeAccess] Integer
# 94| 3: [TypeAccess] Integer
# 94| 4: [TypeAccess] Integer
# 94| 5: [TypeAccess] Integer
# 94| 6: [TypeAccess] Integer
# 94| 7: [TypeAccess] Integer
# 94| 8: [TypeAccess] Integer
# 94| 9: [TypeAccess] Integer
# 94| 10: [TypeAccess] Integer
# 94| 11: [TypeAccess] Integer
# 94| 12: [TypeAccess] Integer
# 94| 13: [TypeAccess] Integer
# 94| 14: [TypeAccess] Integer
# 94| 15: [TypeAccess] Integer
# 94| 16: [TypeAccess] Integer
# 94| 17: [TypeAccess] Integer
# 94| 18: [TypeAccess] Integer
# 94| 19: [TypeAccess] Integer
# 94| 20: [TypeAccess] Integer
# 94| 21: [TypeAccess] Integer
# 94| 22: [TypeAccess] String
# 95| 7: [ExprStmt] <Expr>;
# 95| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 95| 0: [TypeAccess] Unit
# 95| 1: [MethodAccess] invoke(...)
# 95| -1: [VarAccess] l4
# 95| 0: [IntegerLiteral] 1
# 95| 1: [IntegerLiteral] 2
# 95| 2: [IntegerLiteral] 3
# 95| 3: [IntegerLiteral] 4
# 95| 4: [IntegerLiteral] 5
# 95| 5: [IntegerLiteral] 6
# 95| 6: [IntegerLiteral] 7
# 95| 7: [IntegerLiteral] 8
# 95| 8: [IntegerLiteral] 9
# 95| 9: [IntegerLiteral] 0
# 95| 10: [IntegerLiteral] 1
# 95| 11: [IntegerLiteral] 2
# 95| 12: [IntegerLiteral] 3
# 95| 13: [IntegerLiteral] 4
# 95| 14: [IntegerLiteral] 5
# 95| 15: [IntegerLiteral] 6
# 95| 16: [IntegerLiteral] 7
# 95| 17: [IntegerLiteral] 8
# 95| 18: [IntegerLiteral] 9
# 95| 19: [IntegerLiteral] 0
# 95| 20: [IntegerLiteral] 1
# 95| 21: [IntegerLiteral] 2
# 54| 2: [Class] MyLambda
# 54| 1: [Constructor] MyLambda
# 54| 5: [BlockStmt] { ... }
@@ -5884,6 +6260,68 @@ samConversion.kt:
# 46| -3: [TypeAccess] Function1<Integer,Boolean>
# 46| 0: [TypeAccess] Integer
# 46| 1: [TypeAccess] Boolean
# 57| 5: [Method] test
# 57| 3: [TypeAccess] Unit
# 57| 5: [BlockStmt] { ... }
# 58| 0: [LocalVariableDeclStmt] var ...;
# 58| 1: [LocalVariableDeclExpr] i0
# 58| 0: [CastExpr] (...)...
# 58| 0: [TypeAccess] InterfaceFn1Sus
# 58| 1: [ClassInstanceExpr] new (...)
# 58| -4: [AnonymousClass] new InterfaceFn1Sus(...) { ... }
# 58| 1: [Constructor]
#-----| 4: (Parameters)
# 58| 0: [Parameter] <fn>
# 58| 5: [BlockStmt] { ... }
# 58| 0: [SuperConstructorInvocationStmt] super(...)
# 58| 1: [ExprStmt] <Expr>;
# 58| 0: [AssignExpr] ...=...
# 58| 0: [VarAccess] this.<fn>
# 58| -1: [ThisAccess] this
# 58| 1: [VarAccess] <fn>
# 58| 2: [FieldDeclaration] Function2<Integer,Integer,Unit> <fn>;
# 58| -1: [TypeAccess] Function2<Integer,Integer,Unit>
# 58| 0: [TypeAccess] Integer
# 58| 1: [TypeAccess] Integer
# 58| 2: [TypeAccess] Unit
# 58| 3: [Method] fn1
# 58| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 58| 0: [Parameter] i
# 58| 0: [TypeAccess] int
# 58| 1: [Parameter] j
# 58| 0: [TypeAccess] int
# 58| 5: [BlockStmt] { ... }
# 58| 0: [ReturnStmt] return ...
# 58| 0: [MethodAccess] invoke(...)
# 58| -1: [VarAccess] <fn>
# 58| 0: [VarAccess] i
# 58| 1: [VarAccess] j
# 58| -3: [TypeAccess] InterfaceFn1Sus
# 58| 0: [LambdaExpr] ...->...
# 58| -4: [AnonymousClass] new Function2<Integer,Integer,Unit>(...) { ... }
# 58| 1: [Constructor]
# 58| 5: [BlockStmt] { ... }
# 58| 0: [SuperConstructorInvocationStmt] super(...)
# 58| 2: [Method] invoke
# 58| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 58| 0: [Parameter] a
# 58| 0: [TypeAccess] int
# 58| 1: [Parameter] b
# 58| 0: [TypeAccess] int
# 58| 5: [BlockStmt] { ... }
# 58| 0: [ExprStmt] <Expr>;
# 58| 0: [VarAccess] INSTANCE
# 58| -3: [TypeAccess] Function2<Integer,Integer,Unit>
# 58| 0: [TypeAccess] Integer
# 58| 1: [TypeAccess] Integer
# 58| 2: [TypeAccess] Unit
# 59| 1: [ExprStmt] <Expr>;
# 59| 0: [MethodAccess] fn1(...)
# 59| -1: [VarAccess] i0
# 59| 0: [IntegerLiteral] 1
# 59| 1: [IntegerLiteral] 2
# 16| 2: [Interface] IntPredicate
# 17| 1: [Method] accept
# 17| 3: [TypeAccess] boolean
@@ -5964,6 +6402,14 @@ samConversion.kt:
#-----| 4: (Parameters)
# 50| 0: [Parameter] i
# 50| 0: [TypeAccess] T
# 53| 7: [Interface] InterfaceFn1Sus
# 54| 1: [Method] fn1
# 54| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 54| 0: [Parameter] i
# 54| 0: [TypeAccess] int
# 54| 1: [Parameter] j
# 54| 0: [TypeAccess] int
whenExpr.kt:
# 0| [CompilationUnit] whenExpr
# 0| 1: [Class] WhenExprKt

View File

@@ -2917,6 +2917,288 @@
| funcExprs.kt:77:20:77:55 | Generic<Integer> | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:77:20:77:55 | Integer | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:77:20:77:55 | String | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:82:9:96:1 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:83:5:83:51 | l1 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr |
| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr |
| funcExprs.kt:83:31:83:51 | Function1<Integer,String> | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:83:31:83:51 | String | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:83:31:83:51 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:83:33:83:33 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:83:38:83:38 | i | funcExprs.kt:83:31:83:51 | invoke | VarAccess |
| funcExprs.kt:83:40:83:49 | toString(...) | funcExprs.kt:83:31:83:51 | invoke | MethodAccess |
| funcExprs.kt:84:5:84:6 | l1 | funcExprs.kt:82:9:96:1 | fn | VarAccess |
| funcExprs.kt:84:8:84:16 | <implicit coercion to unit> | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr |
| funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:84:8:84:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodAccess |
| funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:86:5:86:59 | l2 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr |
| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr |
| funcExprs.kt:86:39:86:59 | Function1<Integer,String> | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:86:39:86:59 | String | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:86:39:86:59 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:86:41:86:41 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:86:46:86:46 | i | funcExprs.kt:86:39:86:59 | invoke | VarAccess |
| funcExprs.kt:86:48:86:57 | toString(...) | funcExprs.kt:86:39:86:59 | invoke | MethodAccess |
| funcExprs.kt:87:5:87:6 | l2 | funcExprs.kt:82:9:96:1 | fn | VarAccess |
| funcExprs.kt:87:8:87:16 | <implicit coercion to unit> | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr |
| funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:87:8:87:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodAccess |
| funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:89:5:90:69 | l3 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr |
| funcExprs.kt:90:15:90:69 | 0 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 1 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 2 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 3 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 4 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 5 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 6 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 7 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 8 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 9 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 10 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 11 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 12 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 13 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 14 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 15 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 16 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 17 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 18 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 19 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 20 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 21 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | 22 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr |
| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess |
| funcExprs.kt:90:15:90:69 | FunctionN<String> | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:90:15:90:69 | String | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:15:90:69 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | int | funcExprs.kt:90:15:90:69 | invoke | TypeAccess |
| funcExprs.kt:90:15:90:69 | invoke(...) | funcExprs.kt:90:15:90:69 | invoke | MethodAccess |
| funcExprs.kt:90:15:90:69 | this | funcExprs.kt:90:15:90:69 | invoke | ThisAccess |
| funcExprs.kt:90:17:90:17 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:19:90:19 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:21:90:21 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:23:90:23 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:25:90:25 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:27:90:27 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:29:90:29 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:31:90:31 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:33:90:33 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:35:90:35 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:37:90:37 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:39:90:39 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:41:90:41 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:43:90:43 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:45:90:45 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:47:90:47 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:49:90:49 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:51:90:51 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:53:90:53 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:55:90:55 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:57:90:57 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:59:90:59 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:61:90:61 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:90:67:90:68 | | funcExprs.kt:90:15:90:69 | invoke | StringLiteral |
| funcExprs.kt:91:5:91:6 | l3 | funcExprs.kt:82:9:96:1 | fn | VarAccess |
| funcExprs.kt:91:8:91:60 | 23 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:8:91:60 | <implicit coercion to unit> | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr |
| funcExprs.kt:91:8:91:60 | Object | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:91:8:91:60 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:91:8:91:60 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodAccess |
| funcExprs.kt:91:8:91:60 | new Object[] | funcExprs.kt:82:9:96:1 | fn | ArrayCreationExpr |
| funcExprs.kt:91:8:91:60 | {...} | funcExprs.kt:82:9:96:1 | fn | ArrayInit |
| funcExprs.kt:91:15:91:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:17:91:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:19:91:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:21:91:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:23:91:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:25:91:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:27:91:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:29:91:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:31:91:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:33:91:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:35:91:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:37:91:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:39:91:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:41:91:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:43:91:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:45:91:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:47:91:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:49:91:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:51:91:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:53:91:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:93:5:94:67 | l4 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr |
| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr |
| funcExprs.kt:94:15:94:67 | Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,String> | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:15:94:67 | String | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:15:94:67 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:94:17:94:17 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:19:94:19 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:21:94:21 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:23:94:23 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:25:94:25 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:27:94:27 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:29:94:29 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:31:94:31 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:33:94:33 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:35:94:35 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:37:94:37 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:39:94:39 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:41:94:41 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:43:94:43 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:45:94:45 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:47:94:47 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:49:94:49 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:51:94:51 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:53:94:53 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:55:94:55 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:57:94:57 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:59:94:59 | int | file://:0:0:0:0 | <none> | TypeAccess |
| funcExprs.kt:94:65:94:66 | | funcExprs.kt:94:15:94:67 | invoke | StringLiteral |
| funcExprs.kt:95:5:95:6 | l4 | funcExprs.kt:82:9:96:1 | fn | VarAccess |
| funcExprs.kt:95:8:95:58 | <implicit coercion to unit> | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr |
| funcExprs.kt:95:8:95:58 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess |
| funcExprs.kt:95:8:95:58 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodAccess |
| funcExprs.kt:95:15:95:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:17:95:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:19:95:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:21:95:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:23:95:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:25:95:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:27:95:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:29:95:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:31:95:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:33:95:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:35:95:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:37:95:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:39:95:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:41:95:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:43:95:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:45:95:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:47:95:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:49:95:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:51:95:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:53:95:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:55:95:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| funcExprs.kt:95:57:95:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral |
| kFunctionInvoke.kt:4:5:4:24 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| kFunctionInvoke.kt:4:11:4:19 | String | file://:0:0:0:0 | <none> | TypeAccess |
| kFunctionInvoke.kt:7:1:10:1 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
@@ -3632,6 +3914,43 @@
| samConversion.kt:46:39:46:42 | true | samConversion.kt:46:32:46:44 | invoke | BooleanLiteral |
| samConversion.kt:50:5:50:25 | boolean | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:50:12:50:15 | T | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:54:13:54:35 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:54:21:54:26 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:54:29:54:34 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:57:9:60:1 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:5:58:45 | i0 | samConversion.kt:57:9:60:1 | test | LocalVariableDeclExpr |
| samConversion.kt:58:14:58:45 | (...)... | samConversion.kt:57:9:60:1 | test | CastExpr |
| samConversion.kt:58:14:58:45 | ...=... | samConversion.kt:58:14:58:45 | | AssignExpr |
| samConversion.kt:58:14:58:45 | <fn> | samConversion.kt:58:14:58:45 | | VarAccess |
| samConversion.kt:58:14:58:45 | <fn> | samConversion.kt:58:14:58:45 | fn1 | VarAccess |
| samConversion.kt:58:14:58:45 | Function2<Integer,Integer,Unit> | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | i | samConversion.kt:58:14:58:45 | fn1 | VarAccess |
| samConversion.kt:58:14:58:45 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:14:58:45 | invoke(...) | samConversion.kt:58:14:58:45 | fn1 | MethodAccess |
| samConversion.kt:58:14:58:45 | j | samConversion.kt:58:14:58:45 | fn1 | VarAccess |
| samConversion.kt:58:14:58:45 | new (...) | samConversion.kt:57:9:60:1 | test | ClassInstanceExpr |
| samConversion.kt:58:14:58:45 | this | samConversion.kt:58:14:58:45 | | ThisAccess |
| samConversion.kt:58:14:58:45 | this.<fn> | samConversion.kt:58:14:58:45 | | VarAccess |
| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:57:9:60:1 | test | LambdaExpr |
| samConversion.kt:58:30:58:45 | Function2<Integer,Integer,Unit> | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:30:58:45 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:30:58:45 | Unit | samConversion.kt:57:9:60:1 | test | TypeAccess |
| samConversion.kt:58:32:58:32 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:35:58:35 | int | file://:0:0:0:0 | <none> | TypeAccess |
| samConversion.kt:58:40:58:43 | INSTANCE | samConversion.kt:58:30:58:45 | invoke | VarAccess |
| samConversion.kt:59:5:59:6 | i0 | samConversion.kt:57:9:60:1 | test | VarAccess |
| samConversion.kt:59:8:59:15 | fn1(...) | samConversion.kt:57:9:60:1 | test | MethodAccess |
| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:9:60:1 | test | IntegerLiteral |
| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:9:60:1 | test | IntegerLiteral |
| whenExpr.kt:1:1:9:1 | int | file://:0:0:0:0 | <none> | TypeAccess |
| whenExpr.kt:1:14:1:19 | int | file://:0:0:0:0 | <none> | TypeAccess |
| whenExpr.kt:2:10:8:3 | <Stmt> | whenExpr.kt:1:1:9:1 | testWhen | StmtExpr |

View File

@@ -15,6 +15,10 @@ lambdaExpr
| funcExprs.kt:35:29:35:112 | ...->... | stmt body | funcExprs.kt:35:29:35:112 | invoke | invoke(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int) | funcExprs.kt:35:29:35:112 | new Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit>(...) { ... } |
| funcExprs.kt:36:29:36:117 | ...->... | stmt body | funcExprs.kt:36:29:36:117 | invoke | invoke(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int) | funcExprs.kt:36:29:36:117 | new FunctionN<String>(...) { ... } |
| funcExprs.kt:75:12:75:22 | ...->... | stmt body | funcExprs.kt:75:12:75:22 | invoke | invoke(Class3.Generic) | funcExprs.kt:75:12:75:22 | new Function1<Generic<Generic<Integer>>,String>(...) { ... } |
| funcExprs.kt:83:31:83:51 | ...->... | stmt body | funcExprs.kt:83:31:83:51 | invoke | invoke(int) | funcExprs.kt:83:31:83:51 | new Function1<Integer,String>(...) { ... } |
| funcExprs.kt:86:39:86:59 | ...->... | stmt body | funcExprs.kt:86:39:86:59 | invoke | invoke(int) | funcExprs.kt:86:39:86:59 | new Function1<Integer,String>(...) { ... } |
| funcExprs.kt:90:15:90:69 | ...->... | stmt body | funcExprs.kt:90:15:90:69 | invoke | invoke(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int) | funcExprs.kt:90:15:90:69 | new FunctionN<String>(...) { ... } |
| funcExprs.kt:94:15:94:67 | ...->... | stmt body | funcExprs.kt:94:15:94:67 | invoke | invoke(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int) | funcExprs.kt:94:15:94:67 | new Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,String>(...) { ... } |
| samConversion.kt:2:31:2:45 | ...->... | stmt body | samConversion.kt:2:31:2:45 | invoke | invoke(int) | samConversion.kt:2:31:2:45 | new Function1<Integer,Boolean>(...) { ... } |
| samConversion.kt:4:27:4:42 | ...->... | stmt body | samConversion.kt:4:27:4:42 | invoke | invoke(int,int) | samConversion.kt:4:27:4:42 | new Function2<Integer,Integer,Unit>(...) { ... } |
| samConversion.kt:7:29:7:46 | ...->... | stmt body | samConversion.kt:7:29:7:46 | invoke | invoke(java.lang.String,int) | samConversion.kt:7:29:7:46 | new Function2<String,Integer,Boolean>(...) { ... } |
@@ -22,6 +26,7 @@ lambdaExpr
| samConversion.kt:11:12:13:5 | ...->... | stmt body | samConversion.kt:11:12:13:5 | invoke | invoke(int) | samConversion.kt:11:12:13:5 | new Function1<Integer,Boolean>(...) { ... } |
| samConversion.kt:43:31:45:68 | ...->... | stmt body | samConversion.kt:43:31:45:68 | invoke | invoke(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int) | samConversion.kt:43:31:45:68 | new FunctionN<Boolean>(...) { ... } |
| samConversion.kt:46:32:46:44 | ...->... | stmt body | samConversion.kt:46:32:46:44 | invoke | invoke(int) | samConversion.kt:46:32:46:44 | new Function1<Integer,Boolean>(...) { ... } |
| samConversion.kt:58:30:58:45 | ...->... | stmt body | samConversion.kt:58:30:58:45 | invoke | invoke(int,int) | samConversion.kt:58:30:58:45 | new Function2<Integer,Integer,Unit>(...) { ... } |
memberRefExprs
| funcExprs.kt:38:26:38:38 | ...::... | funcExprs.kt:38:26:38:38 | invoke | invoke() | funcExprs.kt:38:26:38:38 | new Function0<Integer>(...) { ... } |
| funcExprs.kt:39:26:39:36 | ...::... | funcExprs.kt:39:26:39:36 | invoke | invoke() | funcExprs.kt:39:26:39:36 | new Function0<Integer>(...) { ... } |
@@ -38,54 +43,38 @@ memberRefExprs
| samConversion.kt:5:27:5:31 | ...::... | samConversion.kt:5:27:5:31 | invoke | invoke(int,int) | samConversion.kt:5:27:5:31 | new Function2<Integer,Integer,Unit>(...) { ... } |
| samConversion.kt:41:13:41:16 | ...::... | samConversion.kt:41:13:41:16 | invoke | invoke(java.lang.Object[]) | samConversion.kt:41:13:41:16 | new FunctionN<Boolean>(...) { ... } |
modifiers
| delegatedProperties.kt:6:32:9:9 | ...->... | delegatedProperties.kt:6:32:9:9 | invoke | override |
| delegatedProperties.kt:6:32:9:9 | ...->... | delegatedProperties.kt:6:32:9:9 | invoke | public |
| funcExprs.kt:22:26:22:33 | ...->... | funcExprs.kt:22:26:22:33 | invoke | override |
| funcExprs.kt:22:26:22:33 | ...->... | funcExprs.kt:22:26:22:33 | invoke | public |
| funcExprs.kt:23:26:23:33 | ...->... | funcExprs.kt:23:26:23:33 | invoke | override |
| funcExprs.kt:23:26:23:33 | ...->... | funcExprs.kt:23:26:23:33 | invoke | public |
| funcExprs.kt:24:26:24:33 | ...->... | funcExprs.kt:24:26:24:33 | invoke | override |
| funcExprs.kt:24:26:24:33 | ...->... | funcExprs.kt:24:26:24:33 | invoke | public |
| funcExprs.kt:25:29:25:38 | ...->... | funcExprs.kt:25:29:25:38 | invoke | override |
| funcExprs.kt:25:29:25:38 | ...->... | funcExprs.kt:25:29:25:38 | invoke | public |
| funcExprs.kt:26:29:26:34 | ...->... | funcExprs.kt:26:29:26:34 | invoke | override |
| funcExprs.kt:26:29:26:34 | ...->... | funcExprs.kt:26:29:26:34 | invoke | public |
| funcExprs.kt:27:29:27:42 | ...->... | funcExprs.kt:27:29:27:42 | invoke | override |
| funcExprs.kt:27:29:27:42 | ...->... | funcExprs.kt:27:29:27:42 | invoke | public |
| funcExprs.kt:29:29:29:37 | ...->... | funcExprs.kt:29:29:29:37 | invoke | override |
| funcExprs.kt:29:29:29:37 | ...->... | funcExprs.kt:29:29:29:37 | invoke | public |
| funcExprs.kt:30:28:30:50 | ...->... | funcExprs.kt:30:28:30:50 | invoke | override |
| funcExprs.kt:30:28:30:50 | ...->... | funcExprs.kt:30:28:30:50 | invoke | public |
| funcExprs.kt:31:28:31:40 | ...->... | funcExprs.kt:31:28:31:40 | invoke | override |
| funcExprs.kt:31:28:31:40 | ...->... | funcExprs.kt:31:28:31:40 | invoke | public |
| funcExprs.kt:32:28:32:44 | ...->... | funcExprs.kt:32:28:32:44 | invoke | override |
| funcExprs.kt:32:28:32:44 | ...->... | funcExprs.kt:32:28:32:44 | invoke | public |
| funcExprs.kt:33:28:33:51 | ...->... | funcExprs.kt:33:28:33:51 | invoke | override |
| funcExprs.kt:33:28:33:51 | ...->... | funcExprs.kt:33:28:33:51 | invoke | public |
| funcExprs.kt:33:37:33:47 | ...->... | funcExprs.kt:33:37:33:47 | invoke | override |
| funcExprs.kt:33:37:33:47 | ...->... | funcExprs.kt:33:37:33:47 | invoke | public |
| funcExprs.kt:35:29:35:112 | ...->... | funcExprs.kt:35:29:35:112 | invoke | override |
| funcExprs.kt:35:29:35:112 | ...->... | funcExprs.kt:35:29:35:112 | invoke | public |
| funcExprs.kt:36:29:36:117 | ...->... | funcExprs.kt:36:29:36:117 | invoke | override |
| delegatedProperties.kt:6:32:9:9 | ...->... | delegatedProperties.kt:6:32:9:9 | invoke | override, public |
| funcExprs.kt:22:26:22:33 | ...->... | funcExprs.kt:22:26:22:33 | invoke | override, public |
| funcExprs.kt:23:26:23:33 | ...->... | funcExprs.kt:23:26:23:33 | invoke | override, public |
| funcExprs.kt:24:26:24:33 | ...->... | funcExprs.kt:24:26:24:33 | invoke | override, public |
| funcExprs.kt:25:29:25:38 | ...->... | funcExprs.kt:25:29:25:38 | invoke | override, public |
| funcExprs.kt:26:29:26:34 | ...->... | funcExprs.kt:26:29:26:34 | invoke | override, public |
| funcExprs.kt:27:29:27:42 | ...->... | funcExprs.kt:27:29:27:42 | invoke | override, public |
| funcExprs.kt:29:29:29:37 | ...->... | funcExprs.kt:29:29:29:37 | invoke | override, public |
| funcExprs.kt:30:28:30:50 | ...->... | funcExprs.kt:30:28:30:50 | invoke | override, public |
| funcExprs.kt:31:28:31:40 | ...->... | funcExprs.kt:31:28:31:40 | invoke | override, public |
| funcExprs.kt:32:28:32:44 | ...->... | funcExprs.kt:32:28:32:44 | invoke | override, public |
| funcExprs.kt:33:28:33:51 | ...->... | funcExprs.kt:33:28:33:51 | invoke | override, public |
| funcExprs.kt:33:37:33:47 | ...->... | funcExprs.kt:33:37:33:47 | invoke | override, public |
| funcExprs.kt:35:29:35:112 | ...->... | funcExprs.kt:35:29:35:112 | invoke | override, public |
| funcExprs.kt:36:29:36:117 | ...->... | funcExprs.kt:36:29:36:117 | invoke | override, public |
| funcExprs.kt:36:29:36:117 | ...->... | funcExprs.kt:36:29:36:117 | invoke | public |
| funcExprs.kt:36:29:36:117 | ...->... | funcExprs.kt:36:29:36:117 | invoke | public |
| funcExprs.kt:75:12:75:22 | ...->... | funcExprs.kt:75:12:75:22 | invoke | override |
| funcExprs.kt:75:12:75:22 | ...->... | funcExprs.kt:75:12:75:22 | invoke | public |
| samConversion.kt:2:31:2:45 | ...->... | samConversion.kt:2:31:2:45 | invoke | override |
| samConversion.kt:2:31:2:45 | ...->... | samConversion.kt:2:31:2:45 | invoke | public |
| samConversion.kt:4:27:4:42 | ...->... | samConversion.kt:4:27:4:42 | invoke | override |
| samConversion.kt:4:27:4:42 | ...->... | samConversion.kt:4:27:4:42 | invoke | public |
| samConversion.kt:7:29:7:46 | ...->... | samConversion.kt:7:29:7:46 | invoke | override |
| samConversion.kt:7:29:7:46 | ...->... | samConversion.kt:7:29:7:46 | invoke | public |
| samConversion.kt:9:33:11:5 | ...->... | samConversion.kt:9:33:11:5 | invoke | override |
| samConversion.kt:9:33:11:5 | ...->... | samConversion.kt:9:33:11:5 | invoke | public |
| samConversion.kt:11:12:13:5 | ...->... | samConversion.kt:11:12:13:5 | invoke | override |
| samConversion.kt:11:12:13:5 | ...->... | samConversion.kt:11:12:13:5 | invoke | public |
| samConversion.kt:43:31:45:68 | ...->... | samConversion.kt:43:31:45:68 | invoke | override |
| funcExprs.kt:75:12:75:22 | ...->... | funcExprs.kt:75:12:75:22 | invoke | override, public |
| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:83:31:83:51 | invoke | override, public |
| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:86:39:86:59 | invoke | override, public, suspend |
| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:90:15:90:69 | invoke | override, public |
| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:90:15:90:69 | invoke | public |
| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:94:15:94:67 | invoke | override, public, suspend |
| samConversion.kt:2:31:2:45 | ...->... | samConversion.kt:2:31:2:45 | invoke | override, public |
| samConversion.kt:4:27:4:42 | ...->... | samConversion.kt:4:27:4:42 | invoke | override, public |
| samConversion.kt:7:29:7:46 | ...->... | samConversion.kt:7:29:7:46 | invoke | override, public |
| samConversion.kt:9:33:11:5 | ...->... | samConversion.kt:9:33:11:5 | invoke | override, public |
| samConversion.kt:11:12:13:5 | ...->... | samConversion.kt:11:12:13:5 | invoke | override, public |
| samConversion.kt:43:31:45:68 | ...->... | samConversion.kt:43:31:45:68 | invoke | override, public |
| samConversion.kt:43:31:45:68 | ...->... | samConversion.kt:43:31:45:68 | invoke | public |
| samConversion.kt:43:31:45:68 | ...->... | samConversion.kt:43:31:45:68 | invoke | public |
| samConversion.kt:46:32:46:44 | ...->... | samConversion.kt:46:32:46:44 | invoke | override |
| samConversion.kt:46:32:46:44 | ...->... | samConversion.kt:46:32:46:44 | invoke | public |
| samConversion.kt:46:32:46:44 | ...->... | samConversion.kt:46:32:46:44 | invoke | override, public |
| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:58:30:58:45 | invoke | override, public, suspend |
nonOverrideInvoke
| funcExprs.kt:36:29:36:117 | ...->... | funcExprs.kt:36:29:36:117 | invoke | 23 |
| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:90:15:90:69 | invoke | 23 |
| samConversion.kt:43:31:45:68 | ...->... | samConversion.kt:43:31:45:68 | invoke | 23 |

View File

@@ -78,3 +78,19 @@ class Class3 {
class Generic<T> { }
}
suspend fun fn() {
val l1: (Int) -> String = { i -> i.toString() }
l1.invoke(5) // calls kotlin/jvm/functions/Function1.invoke
val l2: suspend (Int) -> String = { i -> i.toString() }
l2.invoke(5) // calls kotlin/jvm/functions/Function2.invoke
val l3: (Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int) -> String
= { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ -> ""}
l3.invoke(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3) // 23 args, calls kotlin/jvm/functions/FunctionN.invoke
val l4: suspend (Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int,Int) -> String
= { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ -> ""}
l4.invoke(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2) // 22 args, calls kotlin/jvm/functions/FunctionN.invoke
}

View File

@@ -19,9 +19,9 @@ query predicate memberRefExprs(MemberRefExpr e, Method m, string signature, Anon
e.getAnonymousClass() = an
}
query predicate modifiers(LambdaExpr le, Method m, string modifier) {
query predicate modifiers(LambdaExpr le, Method m, string modifiers) {
le.getAnonymousClass().getAMethod() = m and
m.hasModifier(modifier)
modifiers = concat(string s | m.hasModifier(s) | s, ", ")
}
query predicate nonOverrideInvoke(LambdaExpr le, Method m, int pCount) {

View File

@@ -49,3 +49,12 @@ fun fn(boo: Boolean) {
fun interface SomePredicate<T> {
fun fn(i: T): Boolean
}
fun interface InterfaceFn1Sus {
suspend fun fn1(i: Int, j: Int)
}
suspend fun test() {
val i0 = InterfaceFn1Sus { a, b -> Unit }
i0.fn1(1,2)
}

View File

@@ -0,0 +1,4 @@
package kotlin.coroutines;
// This is a stub for the Kotlin Continuation interface.
public interface Continuation<T> { }

View File

@@ -1,5 +1,19 @@
import kotlin.coroutines.Continuation;
public class Java {
void javaFun() {
new Kotlin().kotlinFun();
}
public class Djava extends Base {
@Override
public String fn0(int x) {
return super.fn0(x);
}
@Override
public Object fn1(int x, Continuation<? super String> $completion) {
return super.fn1(x, $completion);
}
}
}

View File

@@ -3,3 +3,13 @@ public class Kotlin {
// TODO: Java().javaFun();
}
}
open class Base {
open fun fn0(x: Int) : String = ""
open suspend fun fn1(x: Int) : String = ""
}
class Dkotlin : Base() {
override fun fn0(x: Int): String = super.fn0(x)
override suspend fun fn1(x: Int): String = super.fn1(x)
}

View File

@@ -1 +0,0 @@
| Java.java:3:3:3:26 | kotlinFun(...) | Kotlin.kt:2:2:4:2 | kotlinFun |

View File

@@ -1,5 +0,0 @@
import java
from MethodAccess ma, Method m
where m = ma.getMethod()
select ma, m

View File

@@ -0,0 +1,23 @@
methods
| Java.java:4:7:4:13 | javaFun | javaFun() |
| Java.java:10:17:10:19 | fn0 | fn0(int) |
| Java.java:15:17:15:19 | fn1 | fn1(int,kotlin.coroutines.Continuation) |
| Kotlin.kt:2:2:4:2 | kotlinFun | kotlinFun() |
| Kotlin.kt:8:10:8:38 | fn0 | fn0(int) |
| Kotlin.kt:9:18:9:46 | fn1 | fn1(int) |
| Kotlin.kt:13:14:13:51 | fn0 | fn0(int) |
| Kotlin.kt:14:22:14:59 | fn1 | fn1(int) |
overrides
| Java.java:10:17:10:19 | fn0 | Kotlin.kt:8:10:8:38 | fn0 |
| Java.java:15:17:15:19 | fn1 | java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 |
| Kotlin.kt:13:14:13:51 | fn0 | Kotlin.kt:8:10:8:38 | fn0 |
| Kotlin.kt:14:22:14:59 | fn1 | Kotlin.kt:9:18:9:46 | fn1 |
signature_mismatch
| Kotlin.kt:9:18:9:46 | fn1 | fn1(int) |
| java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 | fn1(int,kotlin.coroutines.Continuation) |
#select
| Java.java:5:3:5:26 | kotlinFun(...) | Kotlin.kt:2:2:4:2 | kotlinFun |
| Java.java:11:11:11:22 | fn0(...) | Kotlin.kt:8:10:8:38 | fn0 |
| Java.java:16:11:16:35 | fn1(...) | java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 |
| Kotlin.kt:13:46:13:51 | fn0(...) | Kotlin.kt:8:10:8:38 | fn0 |
| Kotlin.kt:14:54:14:59 | fn1(...) | Kotlin.kt:9:18:9:46 | fn1 |

View File

@@ -0,0 +1,21 @@
import java
from MethodAccess ma, Method m
where m = ma.getMethod()
select ma, m
query predicate methods(Method m, string sig) {
m.fromSource() and
m.getSignature() = sig
}
query predicate overrides(Method m1, Method m2) {
m1.fromSource() and
m1.overrides(m2)
}
query predicate signature_mismatch(Method m, string sig) {
m.getDeclaringType().getQualifiedName() = "Base" and
m.getName() = "fn1" and
m.getSignature() = sig
}

View File

@@ -274,6 +274,7 @@
| methods5.kt:10:13:10:18 | f1(...) | MethodAccess |
| methods5.kt:10:13:10:18 | new (...) | ClassInstanceExpr |
| methods5.kt:10:16:10:17 | 42 | IntegerLiteral |
| methods6.kt:3:9:4:1 | Unit | TypeAccess |
| methods.kt:2:1:3:1 | Unit | TypeAccess |
| methods.kt:2:20:2:25 | int | TypeAccess |
| methods.kt:2:28:2:33 | int | TypeAccess |

View File

@@ -36,6 +36,7 @@ methods
| methods5.kt:0:0:0:0 | Methods5Kt | methods5.kt:3:1:11:1 | x | x() | public, static | |
| methods5.kt:5:3:5:27 | | methods5.kt:5:3:5:27 | a | a(int) | public | |
| methods5.kt:9:3:9:32 | | methods5.kt:9:3:9:32 | f1 | f1(foo.bar.C1,int) | public | |
| methods6.kt:0:0:0:0 | Methods6Kt | methods6.kt:3:9:4:1 | s | s() | public, static, suspend | |
| methods.kt:0:0:0:0 | MethodsKt | methods.kt:2:1:3:1 | topLevelMethod | topLevelMethod(int,int) | public, static | |
| methods.kt:5:1:20:1 | Class | methods.kt:6:5:7:5 | classMethod | classMethod(int,int) | public | |
| methods.kt:5:1:20:1 | Class | methods.kt:9:5:12:5 | anotherClassMethod | anotherClassMethod(int,int) | public | |

View File

@@ -0,0 +1,4 @@
package foo.bar
suspend fun s() {
}