Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ed2c6e6

Browse files
committed
Kotlin: Function calls
1 parent 94eefbf commit ed2c6e6

6 files changed

Lines changed: 75 additions & 14 deletions

File tree

java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,14 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) {
499499
tw.writeHasLocation(id, locId)
500500
id
501501
} else -> {
502-
logger.warn("Unrecognised IrCall: " + c.render())
503-
return
502+
val id = tw.getFreshIdLabel<DbMethodaccess>()
503+
val typeId = useType(c.type)
504+
val locId = tw.getLocation(c.startOffset, c.endOffset)
505+
val methodId = useFunction(c.symbol.owner)
506+
tw.writeExprs_methodaccess(id, typeId, parent, idx)
507+
tw.writeHasLocation(id, locId)
508+
tw.writeCallableBinding(id, methodId)
509+
id
504510
}
505511
}
506512
val dr = c.dispatchReceiver
@@ -560,14 +566,23 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) {
560566
}
561567
}
562568
is IrGetValue -> {
563-
val id = tw.getFreshIdLabel<DbVaraccess>()
564-
val typeId = useType(e.type)
565-
val locId = tw.getLocation(e.startOffset, e.endOffset)
566-
tw.writeExprs_varaccess(id, typeId, parent, idx)
567-
tw.writeHasLocation(id, locId)
568-
569-
val vId = useValueDeclaration(e.symbol.owner)
570-
tw.writeVariableBinding(id, vId)
569+
val owner = e.symbol.owner
570+
if (owner is IrValueParameter && owner.index == -1) {
571+
val id = tw.getFreshIdLabel<DbThisaccess>()
572+
val typeId = useType(e.type)
573+
val locId = tw.getLocation(e.startOffset, e.endOffset)
574+
tw.writeExprs_thisaccess(id, typeId, parent, idx)
575+
tw.writeHasLocation(id, locId)
576+
} else {
577+
val id = tw.getFreshIdLabel<DbVaraccess>()
578+
val typeId = useType(e.type)
579+
val locId = tw.getLocation(e.startOffset, e.endOffset)
580+
tw.writeExprs_varaccess(id, typeId, parent, idx)
581+
tw.writeHasLocation(id, locId)
582+
583+
val vId = useValueDeclaration(owner)
584+
tw.writeVariableBinding(id, vId)
585+
}
571586
}
572587
is IrSetValue -> {
573588
val id = tw.getFreshIdLabel<DbAssignexpr>()

java/ql/test/kotlin/library-tests/exprs/exprs.expected

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,26 @@
1111
| exprs.kt:7:14:7:14 | x |
1212
| exprs.kt:7:14:7:18 | ... % ... |
1313
| exprs.kt:7:18:7:18 | y |
14+
| exprs.kt:8:14:8:14 | x |
15+
| exprs.kt:8:14:8:20 | (no string representation) |
16+
| exprs.kt:8:20:8:20 | y |
17+
| exprs.kt:9:14:9:14 | x |
18+
| exprs.kt:9:14:9:20 | (no string representation) |
19+
| exprs.kt:9:20:9:20 | y |
20+
| exprs.kt:10:14:10:14 | x |
21+
| exprs.kt:10:14:10:21 | (no string representation) |
22+
| exprs.kt:10:21:10:21 | y |
23+
| exprs.kt:11:14:11:14 | x |
24+
| exprs.kt:11:14:11:20 | (no string representation) |
25+
| exprs.kt:11:20:11:20 | y |
26+
| exprs.kt:12:15:12:15 | x |
27+
| exprs.kt:12:15:12:20 | (no string representation) |
28+
| exprs.kt:12:20:12:20 | y |
29+
| exprs.kt:13:15:13:15 | x |
30+
| exprs.kt:13:15:13:21 | (no string representation) |
31+
| exprs.kt:13:21:13:21 | y |
32+
| exprs.kt:14:15:14:15 | x |
33+
| exprs.kt:14:17:14:21 | (no string representation) |
1434
| exprs.kt:15:15:15:15 | x |
1535
| exprs.kt:15:15:15:20 | ... == ... |
1636
| exprs.kt:15:20:15:20 | y |
@@ -30,6 +50,17 @@
3050
| exprs.kt:20:15:20:15 | x |
3151
| exprs.kt:20:15:20:20 | ... >= ... |
3252
| exprs.kt:20:20:20:20 | y |
53+
| exprs.kt:21:15:21:15 | x |
54+
| exprs.kt:21:15:21:25 | (no string representation) |
55+
| exprs.kt:21:20:21:20 | x |
56+
| exprs.kt:21:20:21:25 | (no string representation) |
57+
| exprs.kt:21:25:21:25 | y |
58+
| exprs.kt:22:15:22:15 | x |
59+
| exprs.kt:22:15:22:26 | (no string representation) |
60+
| exprs.kt:22:15:22:26 | (no string representation) |
61+
| exprs.kt:22:21:22:21 | x |
62+
| exprs.kt:22:21:22:26 | (no string representation) |
63+
| exprs.kt:22:26:22:26 | y |
3364
| exprs.kt:23:14:23:17 | true |
3465
| exprs.kt:24:14:24:18 | false |
3566
| exprs.kt:31:13:31:15 | x |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
| methods.kt:10:9:10:25 | classMethod(...) |
2+
| methods.kt:10:9:10:25 | this |
3+
| methods.kt:10:21:10:21 | a |
4+
| methods.kt:10:24:10:24 | 3 |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import java
2+
3+
from Expr e
4+
select e
5+

java/ql/test/kotlin/library-tests/methods/methods.expected

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
| methods.kt:0:0:0:0 | hashCode |
1818
| methods.kt:0:0:0:0 | toString |
1919
| methods.kt:0:0:0:0 | toString |
20-
| methods.kt:5:1:8:1 | <init> |
21-
| methods.kt:5:1:8:1 | equals |
22-
| methods.kt:5:1:8:1 | hashCode |
23-
| methods.kt:5:1:8:1 | toString |
20+
| methods.kt:5:1:13:1 | <init> |
21+
| methods.kt:5:1:13:1 | equals |
22+
| methods.kt:5:1:13:1 | hashCode |
23+
| methods.kt:5:1:13:1 | toString |
2424
| methods.kt:6:5:7:5 | classMethod |
25+
| methods.kt:9:5:12:5 | anotherClassMethod |

java/ql/test/kotlin/library-tests/methods/methods.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,10 @@ fun topLevelMethod(x: Int, y: Int) {
55
class Class {
66
fun classMethod(x: Int, y: Int) {
77
}
8+
9+
fun anotherClassMethod(a: Int, b: Int) {
10+
classMethod(a, 3)
11+
// TODO topLevelMethod(b, 4)
12+
}
813
}
914

0 commit comments

Comments
 (0)