Skip to content

Commit 121a564

Browse files
committed
Kotlin: extract operator expression when operator is in method call form
1 parent 0f9b6d4 commit 121a564

File tree

10 files changed

+37
-39
lines changed

10 files changed

+37
-39
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1901,9 +1901,8 @@ open class KotlinFileExtractor(
19011901

19021902
val dr = c.dispatchReceiver
19031903
when {
1904-
c.origin == IrStatementOrigin.PLUS &&
1905-
(isNumericFunction(target, "plus")
1906-
|| isFunction(target, "kotlin", "String", "plus", null)) -> {
1904+
isNumericFunction(target, "plus")
1905+
|| isFunction(target, "kotlin", "String", "plus", false) -> {
19071906
val id = tw.getFreshIdLabel<DbAddexpr>()
19081907
val type = useType(c.type)
19091908
tw.writeExprs_addexpr(id, type.javaResult.id, parent, idx)
@@ -1918,28 +1917,28 @@ open class KotlinFileExtractor(
19181917
extractRawMethodAccess(stringPlusFn, c, callable, parent, idx, enclosingStmt, listOf(c.extensionReceiver, c.getValueArgument(0)), null, null)
19191918
}
19201919
}
1921-
c.origin == IrStatementOrigin.MINUS && isNumericFunction(target, "minus") -> {
1920+
isNumericFunction(target, "minus") -> {
19221921
val id = tw.getFreshIdLabel<DbSubexpr>()
19231922
val type = useType(c.type)
19241923
tw.writeExprs_subexpr(id, type.javaResult.id, parent, idx)
19251924
tw.writeExprsKotlinType(id, type.kotlinResult.id)
19261925
binopDisp(id)
19271926
}
1928-
c.origin == IrStatementOrigin.MUL && isNumericFunction(target, "times") -> {
1927+
isNumericFunction(target, "times") -> {
19291928
val id = tw.getFreshIdLabel<DbMulexpr>()
19301929
val type = useType(c.type)
19311930
tw.writeExprs_mulexpr(id, type.javaResult.id, parent, idx)
19321931
tw.writeExprsKotlinType(id, type.kotlinResult.id)
19331932
binopDisp(id)
19341933
}
1935-
c.origin == IrStatementOrigin.DIV && isNumericFunction(target, "div") -> {
1934+
isNumericFunction(target, "div") -> {
19361935
val id = tw.getFreshIdLabel<DbDivexpr>()
19371936
val type = useType(c.type)
19381937
tw.writeExprs_divexpr(id, type.javaResult.id, parent, idx)
19391938
tw.writeExprsKotlinType(id, type.kotlinResult.id)
19401939
binopDisp(id)
19411940
}
1942-
c.origin == IrStatementOrigin.PERC && isNumericFunction(target, "rem") -> {
1941+
isNumericFunction(target, "rem") -> {
19431942
val id = tw.getFreshIdLabel<DbRemexpr>()
19441943
val type = useType(c.type)
19451944
tw.writeExprs_remexpr(id, type.javaResult.id, parent, idx)

java/ql/integration-tests/posix-only/kotlin/gradle_kotlinx_serialization/PrintAst.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ app/src/main/kotlin/testProject/App.kt:
125125
# 0| 1: [ExprStmt] <Expr>;
126126
# 0| 0: [AssignExpr] ...=...
127127
# 0| 0: [VarAccess] result
128-
# 0| 1: [MethodAccess] plus(...)
129-
# 0| -1: [MethodAccess] times(...)
130-
# 0| -1: [VarAccess] result
131-
# 0| 0: [IntegerLiteral] 31
132-
# 0| 0: [MethodAccess] hashCode(...)
128+
# 0| 1: [AddExpr] ... + ...
129+
# 0| 0: [MulExpr] ... * ...
130+
# 0| 0: [VarAccess] result
131+
# 0| 1: [IntegerLiteral] 31
132+
# 0| 1: [MethodAccess] hashCode(...)
133133
# 0| -1: [VarAccess] this.language
134134
# 0| -1: [ThisAccess] this
135135
# 0| 2: [ReturnStmt] return ...

java/ql/test/kotlin/library-tests/data-classes/PrintAst.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ dc.kt:
8989
# 0| 1: [ExprStmt] <Expr>;
9090
# 0| 0: [AssignExpr] ...=...
9191
# 0| 0: [VarAccess] result
92-
# 0| 1: [MethodAccess] plus(...)
93-
# 0| -1: [MethodAccess] times(...)
94-
# 0| -1: [VarAccess] result
95-
# 0| 0: [IntegerLiteral] 31
96-
# 0| 0: [MethodAccess] hashCode(...)
92+
# 0| 1: [AddExpr] ... + ...
93+
# 0| 0: [MulExpr] ... * ...
94+
# 0| 0: [VarAccess] result
95+
# 0| 1: [IntegerLiteral] 31
96+
# 0| 1: [MethodAccess] hashCode(...)
9797
# 0| -1: [TypeAccess] Arrays
9898
# 0| 0: [VarAccess] this.strs
9999
# 0| -1: [ThisAccess] this
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
| dc.kt:0:0:0:0 | hashCode(...) | java.util.Arrays.hashCode |
22
| dc.kt:0:0:0:0 | hashCode(...) | java.util.Arrays.hashCode |
33
| dc.kt:0:0:0:0 | new ProtoMapValue(...) | ProtoMapValue.ProtoMapValue |
4-
| dc.kt:0:0:0:0 | plus(...) | kotlin.Int.plus |
5-
| dc.kt:0:0:0:0 | times(...) | kotlin.Int.times |
64
| dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString |
75
| dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString |
86
| dc.kt:1:1:1:71 | super(...) | java.lang.Object.Object |

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,7 +2473,8 @@ exprs.kt:
24732473
# 127| 0: [VarAccess] str1
24742474
# 127| 1: [VarAccess] str2
24752475
# 127| 2: [StringLiteral] bar
2476-
# 127| 3: [AddExpr] ... + ...
2476+
# 127| 3: [MethodAccess] stringPlus(...)
2477+
# 127| -1: [TypeAccess] Intrinsics
24772478
# 127| 0: [VarAccess] str2
24782479
# 127| 1: [VarAccess] str1
24792480
# 127| 4: [StringLiteral] baz
@@ -3052,15 +3053,16 @@ exprs.kt:
30523053
# 203| 1: [IntegerLiteral] 5
30533054
# 204| 2: [LocalVariableDeclStmt] var ...;
30543055
# 204| 1: [LocalVariableDeclExpr] b1
3055-
# 204| 0: [AddExpr] ... + ...
3056+
# 204| 0: [MethodAccess] stringPlus(...)
3057+
# 204| -1: [TypeAccess] Intrinsics
30563058
# 204| 0: [VarAccess] s
30573059
# 204| 1: [IntegerLiteral] 5
30583060
# 205| 3: [LocalVariableDeclStmt] var ...;
30593061
# 205| 1: [LocalVariableDeclExpr] b2
3060-
# 205| 0: [MethodAccess] plus(...)
3061-
# 205| -1: [NotNullExpr] ...!!
3062+
# 205| 0: [AddExpr] ... + ...
3063+
# 205| 0: [NotNullExpr] ...!!
30623064
# 205| 0: [VarAccess] s
3063-
# 205| 0: [IntegerLiteral] 5
3065+
# 205| 1: [IntegerLiteral] 5
30643066
# 206| 4: [LocalVariableDeclStmt] var ...;
30653067
# 206| 1: [LocalVariableDeclExpr] b3
30663068
# 206| 0: [AddExpr] ... + ...

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,12 @@
7373
| exprs.kt:113:14:113:21 | ... && ... | exprs.kt:113:14:113:15 | b1 | exprs.kt:113:20:113:21 | b2 |
7474
| exprs.kt:114:14:114:21 | ... \|\| ... | exprs.kt:114:14:114:15 | b1 | exprs.kt:114:20:114:21 | b2 |
7575
| exprs.kt:127:31:127:41 | ... + ... | exprs.kt:127:31:127:34 | str1 | exprs.kt:127:38:127:41 | str2 |
76-
| exprs.kt:127:50:127:60 | ... + ... | exprs.kt:127:50:127:53 | str2 | exprs.kt:127:57:127:60 | str1 |
7776
| exprs.kt:128:16:128:26 | ... + ... | exprs.kt:128:16:128:19 | str1 | exprs.kt:128:23:128:26 | str2 |
7877
| exprs.kt:131:12:131:23 | ... > ... | exprs.kt:131:12:131:19 | variable | exprs.kt:131:23:131:23 | 0 |
7978
| exprs.kt:135:12:135:20 | ... + ... | exprs.kt:135:12:135:14 | 123 | exprs.kt:135:18:135:20 | 456 |
8079
| exprs.kt:161:8:161:16 | ... (value not-equals) ... | exprs.kt:161:8:161:8 | r | exprs.kt:161:13:161:16 | null |
8180
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:190:36:190:37 | a2 |
82-
| exprs.kt:204:19:204:23 | ... + ... | exprs.kt:204:19:204:19 | s | exprs.kt:204:23:204:23 | 5 |
81+
| exprs.kt:205:23:205:29 | ... + ... | exprs.kt:205:20:205:21 | ...!! | exprs.kt:205:28:205:28 | 5 |
8382
| exprs.kt:206:19:206:25 | ... + ... | exprs.kt:206:20:206:21 | ...!! | exprs.kt:206:25:206:25 | 5 |
8483
| exprs.kt:224:12:224:47 | ... (value equals) ... | exprs.kt:224:12:224:27 | notNullPrimitive | exprs.kt:224:32:224:47 | notNullPrimitive |
8584
| exprs.kt:225:12:225:48 | ... (value equals) ... | exprs.kt:225:12:225:27 | notNullPrimitive | exprs.kt:225:32:225:48 | nullablePrimitive |

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,7 +1349,8 @@
13491349
| exprs.kt:127:38:127:41 | str2 | exprs.kt:4:1:136:1 | topLevelMethod | VarAccess |
13501350
| exprs.kt:127:43:127:47 | bar | exprs.kt:4:1:136:1 | topLevelMethod | StringLiteral |
13511351
| exprs.kt:127:50:127:53 | str2 | exprs.kt:4:1:136:1 | topLevelMethod | VarAccess |
1352-
| exprs.kt:127:50:127:60 | ... + ... | exprs.kt:4:1:136:1 | topLevelMethod | AddExpr |
1352+
| exprs.kt:127:50:127:60 | Intrinsics | exprs.kt:4:1:136:1 | topLevelMethod | TypeAccess |
1353+
| exprs.kt:127:50:127:60 | stringPlus(...) | exprs.kt:4:1:136:1 | topLevelMethod | MethodAccess |
13531354
| exprs.kt:127:57:127:60 | str1 | exprs.kt:4:1:136:1 | topLevelMethod | VarAccess |
13541355
| exprs.kt:127:62:127:65 | baz | exprs.kt:4:1:136:1 | topLevelMethod | StringLiteral |
13551356
| exprs.kt:128:5:128:26 | str6 | exprs.kt:4:1:136:1 | topLevelMethod | LocalVariableDeclExpr |
@@ -1554,12 +1555,13 @@
15541555
| exprs.kt:203:26:203:26 | 5 | exprs.kt:200:5:211:5 | x | IntegerLiteral |
15551556
| exprs.kt:204:9:204:23 | b1 | exprs.kt:200:5:211:5 | x | LocalVariableDeclExpr |
15561557
| exprs.kt:204:19:204:19 | s | exprs.kt:200:5:211:5 | x | VarAccess |
1557-
| exprs.kt:204:19:204:23 | ... + ... | exprs.kt:200:5:211:5 | x | AddExpr |
1558+
| exprs.kt:204:19:204:23 | Intrinsics | exprs.kt:200:5:211:5 | x | TypeAccess |
1559+
| exprs.kt:204:19:204:23 | stringPlus(...) | exprs.kt:200:5:211:5 | x | MethodAccess |
15581560
| exprs.kt:204:23:204:23 | 5 | exprs.kt:200:5:211:5 | x | IntegerLiteral |
15591561
| exprs.kt:205:9:205:29 | b2 | exprs.kt:200:5:211:5 | x | LocalVariableDeclExpr |
15601562
| exprs.kt:205:19:205:19 | s | exprs.kt:200:5:211:5 | x | VarAccess |
15611563
| exprs.kt:205:20:205:21 | ...!! | exprs.kt:200:5:211:5 | x | NotNullExpr |
1562-
| exprs.kt:205:23:205:29 | plus(...) | exprs.kt:200:5:211:5 | x | MethodAccess |
1564+
| exprs.kt:205:23:205:29 | ... + ... | exprs.kt:200:5:211:5 | x | AddExpr |
15631565
| exprs.kt:205:28:205:28 | 5 | exprs.kt:200:5:211:5 | x | IntegerLiteral |
15641566
| exprs.kt:206:9:206:25 | b3 | exprs.kt:200:5:211:5 | x | LocalVariableDeclExpr |
15651567
| exprs.kt:206:19:206:19 | s | exprs.kt:200:5:211:5 | x | VarAccess |

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ test.kt:
4343
# 9| 0: [TypeAccess] String
4444
# 9| 5: [BlockStmt] { ... }
4545
# 9| 0: [ReturnStmt] return ...
46-
# 9| 0: [MethodAccess] plus(...)
47-
# 9| -1: [VarAccess] s
48-
# 9| 0: [StringLiteral]
46+
# 9| 0: [AddExpr] ... + ...
47+
# 9| 0: [VarAccess] s
48+
# 9| 1: [StringLiteral]
4949
# 10| 5: [Method] fn2
5050
# 10| 3: [TypeAccess] String
5151
#-----| 4: (Parameters)
@@ -63,9 +63,9 @@ test.kt:
6363
# 12| 0: [TypeAccess] int
6464
# 12| 5: [BlockStmt] { ... }
6565
# 12| 0: [ReturnStmt] return ...
66-
# 12| 0: [MethodAccess] minus(...)
67-
# 12| -1: [VarAccess] i
68-
# 12| 0: [IntegerLiteral] 10
66+
# 12| 0: [SubExpr] ... - ...
67+
# 12| 0: [VarAccess] i
68+
# 12| 1: [IntegerLiteral] 10
6969
# 13| 7: [Method] fn2
7070
# 13| 3: [TypeAccess] int
7171
#-----| 4: (Parameters)
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
diagnostics
2-
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.String.plus in java.lang.String |
32
#select
43
| Integer |
54
| Object |
6-
| int |

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
| dataClass.kt:0:0:0:0 | ... !is ... | NotInstanceOfExpr |
2121
| dataClass.kt:0:0:0:0 | ... (value not-equals) ... | ValueNEExpr |
2222
| dataClass.kt:0:0:0:0 | ... (value not-equals) ... | ValueNEExpr |
23+
| dataClass.kt:0:0:0:0 | ... * ... | MulExpr |
24+
| dataClass.kt:0:0:0:0 | ... + ... | AddExpr |
2325
| dataClass.kt:0:0:0:0 | ... == ... | EQExpr |
2426
| dataClass.kt:0:0:0:0 | ...=... | AssignExpr |
2527
| dataClass.kt:0:0:0:0 | DataClass | TypeAccess |
@@ -42,7 +44,6 @@
4244
| dataClass.kt:0:0:0:0 | other | VarAccess |
4345
| dataClass.kt:0:0:0:0 | other | VarAccess |
4446
| dataClass.kt:0:0:0:0 | other | VarAccess |
45-
| dataClass.kt:0:0:0:0 | plus(...) | MethodAccess |
4647
| dataClass.kt:0:0:0:0 | result | LocalVariableDeclExpr |
4748
| dataClass.kt:0:0:0:0 | result | VarAccess |
4849
| dataClass.kt:0:0:0:0 | result | VarAccess |
@@ -64,7 +65,6 @@
6465
| dataClass.kt:0:0:0:0 | this.y | VarAccess |
6566
| dataClass.kt:0:0:0:0 | this.y | VarAccess |
6667
| dataClass.kt:0:0:0:0 | this.y | VarAccess |
67-
| dataClass.kt:0:0:0:0 | times(...) | MethodAccess |
6868
| dataClass.kt:0:0:0:0 | tmp0_other_with_cast | LocalVariableDeclExpr |
6969
| dataClass.kt:0:0:0:0 | tmp0_other_with_cast | VarAccess |
7070
| dataClass.kt:0:0:0:0 | tmp0_other_with_cast | VarAccess |

0 commit comments

Comments
 (0)