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

Skip to content

Commit 1e64887

Browse files
tamasvajkigfoo
authored andcommitted
Extract field receiver in field read/write
1 parent 10ae157 commit 1e64887

5 files changed

Lines changed: 40 additions & 14 deletions

File tree

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,11 @@ open class KotlinFileExtractor(
16321632
val vId = useField(owner)
16331633
tw.writeVariableBinding(id, vId)
16341634
tw.writeStatementEnclosingExpr(id, exprParent.enclosingStmt)
1635+
1636+
val receiver = e.receiver
1637+
if (receiver != null) {
1638+
extractExpressionExpr(receiver, callable, id, -1, exprParent.enclosingStmt)
1639+
}
16351640
}
16361641
is IrGetEnumValue -> {
16371642
val exprParent = parent.expr(e, callable)
@@ -1679,6 +1684,11 @@ open class KotlinFileExtractor(
16791684
val vId = useField(e.symbol.owner)
16801685
tw.writeVariableBinding(lhsId, vId)
16811686
extractExpressionExpr(e.value, callable, id, 1, exprParent.enclosingStmt)
1687+
1688+
val receiver = e.receiver
1689+
if (receiver != null) {
1690+
extractExpressionExpr(receiver, callable, lhsId, -1, exprParent.enclosingStmt)
1691+
}
16821692
}
16831693
else -> {
16841694
logger.warnElement(Severity.ErrorSevere, "Unhandled IrSet* element.", e)

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -703,10 +703,12 @@ exprs.kt:
703703
# 162| 1: [VarAccess] r
704704
# 163| 1: [LocalVariableDeclStmt] var ...;
705705
# 163| 1: [LocalVariableDeclExpr] height
706-
# 163| 0: [VarAccess] height
706+
# 163| 0: [VarAccess] r2.height
707+
# 163| -1: [VarAccess] r2
707708
# 164| 2: [ExprStmt] <Expr>;
708709
# 164| 0: [AssignExpr] ...=...
709-
# 164| 0: [VarAccess] height
710+
# 164| 0: [VarAccess] r2.height
711+
# 164| -1: [VarAccess] r2
710712
# 164| 1: [IntegerLiteral] 3
711713
# 178| 5: [Method] enums
712714
# 178| 5: [BlockStmt] { ... }
@@ -746,7 +748,8 @@ exprs.kt:
746748
# 142| 3: [Method] getN
747749
# 142| 5: [BlockStmt] { ... }
748750
# 142| 0: [ReturnStmt] return ...
749-
# 142| 0: [VarAccess] n
751+
# 142| 0: [VarAccess] this.n
752+
# 142| -1: [ThisAccess] this
750753
# 142| 3: [FieldDeclaration] int n;
751754
# 142| -1: [TypeAccess] int
752755
# 143| 5: [Method] foo
@@ -808,7 +811,8 @@ exprs.kt:
808811
# 172| 7: [Method] getRgb
809812
# 172| 5: [BlockStmt] { ... }
810813
# 172| 0: [ReturnStmt] return ...
811-
# 172| 0: [VarAccess] rgb
814+
# 172| 0: [VarAccess] this.rgb
815+
# 172| -1: [ThisAccess] this
812816
# 172| 7: [FieldDeclaration] int rgb;
813817
# 172| -1: [TypeAccess] int
814818
# 183| 8: [Interface] Interface1
@@ -821,7 +825,8 @@ exprs.kt:
821825
# 186| 3: [Method] getA1
822826
# 186| 5: [BlockStmt] { ... }
823827
# 186| 0: [ReturnStmt] return ...
824-
# 186| 0: [VarAccess] a1
828+
# 186| 0: [VarAccess] this.a1
829+
# 186| -1: [ThisAccess] this
825830
# 186| 3: [FieldDeclaration] int a1;
826831
# 186| -1: [TypeAccess] int
827832
# 186| 0: [IntegerLiteral] 1
@@ -843,7 +848,8 @@ exprs.kt:
843848
# 190| 3: [Method] getA3
844849
# 190| 5: [BlockStmt] { ... }
845850
# 190| 0: [ReturnStmt] return ...
846-
# 190| 0: [VarAccess] a3
851+
# 190| 0: [VarAccess] this.a3
852+
# 190| -1: [ThisAccess] this
847853
# 190| 3: [FieldDeclaration] String a3;
848854
# 190| -1: [TypeAccess] String
849855
# 190| 0: [MethodAccess] toString(...)

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,8 @@
477477
| exprs.kt:139:13:139:23 | ::class | exprs.kt:138:1:140:1 | getClass | ClassExpr |
478478
| exprs.kt:142:1:144:1 | <obinit>(...) | exprs.kt:142:1:144:1 | C | MethodAccess |
479479
| exprs.kt:142:9:142:18 | int | file://:0:0:0:0 | <none> | TypeAccess |
480-
| exprs.kt:142:9:142:18 | n | exprs.kt:142:9:142:18 | getN | VarAccess |
480+
| exprs.kt:142:9:142:18 | this | exprs.kt:142:9:142:18 | getN | ThisAccess |
481+
| exprs.kt:142:9:142:18 | this.n | exprs.kt:142:9:142:18 | getN | VarAccess |
481482
| exprs.kt:143:27:143:31 | C | exprs.kt:143:5:143:33 | foo | TypeAccess |
482483
| exprs.kt:143:27:143:31 | new C(...) | exprs.kt:143:5:143:33 | foo | ClassInstanceExpr |
483484
| exprs.kt:143:29:143:30 | 42 | exprs.kt:143:5:143:33 | foo | IntegerLiteral |
@@ -528,9 +529,11 @@
528529
| exprs.kt:162:29:162:29 | Rectangle | exprs.kt:159:1:166:1 | foo | TypeAccess |
529530
| exprs.kt:162:29:162:29 | r | exprs.kt:159:1:166:1 | foo | VarAccess |
530531
| exprs.kt:163:9:163:30 | height | exprs.kt:159:1:166:1 | foo | LocalVariableDeclExpr |
531-
| exprs.kt:163:25:163:30 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
532+
| exprs.kt:163:22:163:23 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
533+
| exprs.kt:163:25:163:30 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
534+
| exprs.kt:164:9:164:10 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
532535
| exprs.kt:164:9:164:17 | ...=... | exprs.kt:159:1:166:1 | foo | AssignExpr |
533-
| exprs.kt:164:9:164:17 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
536+
| exprs.kt:164:9:164:17 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
534537
| exprs.kt:164:21:164:21 | 3 | exprs.kt:159:1:166:1 | foo | IntegerLiteral |
535538
| exprs.kt:168:1:170:1 | <obinit>(...) | exprs.kt:168:6:170:1 | Direction | MethodAccess |
536539
| exprs.kt:168:1:170:1 | Direction | exprs.kt:168:6:170:1 | Direction | TypeAccess |
@@ -541,16 +544,18 @@
541544
| exprs.kt:172:1:176:1 | Unit | exprs.kt:172:6:176:1 | Color | TypeAccess |
542545
| exprs.kt:172:1:176:1 | new Enum(...) | exprs.kt:172:6:176:1 | Color | ClassInstanceExpr |
543546
| exprs.kt:172:18:172:29 | int | file://:0:0:0:0 | <none> | TypeAccess |
544-
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
547+
| exprs.kt:172:18:172:29 | this | exprs.kt:172:18:172:29 | getRgb | ThisAccess |
548+
| exprs.kt:172:18:172:29 | this.rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
545549
| exprs.kt:179:5:179:31 | south | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
546550
| exprs.kt:179:27:179:31 | SOUTH | exprs.kt:178:1:181:1 | enums | VarAccess |
547551
| exprs.kt:180:5:180:27 | green | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
548552
| exprs.kt:180:23:180:27 | GREEN | exprs.kt:178:1:181:1 | enums | VarAccess |
549553
| exprs.kt:185:1:193:1 | <obinit>(...) | exprs.kt:185:1:193:1 | Class1 | MethodAccess |
550554
| exprs.kt:186:5:186:14 | ...=... | exprs.kt:185:1:193:1 | <obinit> | AssignExpr |
551555
| exprs.kt:186:5:186:14 | a1 | exprs.kt:185:1:193:1 | <obinit> | VarAccess |
552-
| exprs.kt:186:5:186:14 | a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
553556
| exprs.kt:186:5:186:14 | int | file://:0:0:0:0 | <none> | TypeAccess |
557+
| exprs.kt:186:5:186:14 | this | exprs.kt:186:5:186:14 | getA1 | ThisAccess |
558+
| exprs.kt:186:5:186:14 | this.a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
554559
| exprs.kt:186:14:186:14 | 1 | exprs.kt:185:1:193:1 | <obinit> | IntegerLiteral |
555560
| exprs.kt:188:9:188:18 | a2 | exprs.kt:187:13:192:5 | getObject | LocalVariableDeclExpr |
556561
| exprs.kt:188:18:188:18 | 2 | exprs.kt:187:13:192:5 | getObject | IntegerLiteral |
@@ -561,7 +566,8 @@
561566
| exprs.kt:190:13:190:49 | ...=... | exprs.kt:189:16:191:9 | <obinit> | AssignExpr |
562567
| exprs.kt:190:13:190:49 | String | file://:0:0:0:0 | <none> | TypeAccess |
563568
| exprs.kt:190:13:190:49 | a3 | exprs.kt:189:16:191:9 | <obinit> | VarAccess |
564-
| exprs.kt:190:13:190:49 | a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
569+
| exprs.kt:190:13:190:49 | this | exprs.kt:190:13:190:49 | getA3 | ThisAccess |
570+
| exprs.kt:190:13:190:49 | this.a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
565571
| exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:189:16:191:9 | <obinit> | MethodAccess |
566572
| exprs.kt:190:31:190:32 | this | exprs.kt:189:16:191:9 | <obinit> | ThisAccess |
567573
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:189:16:191:9 | <obinit> | AddExpr |

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ parameterizedType
2020
| generics.kt:13:1:18:1 | C1<String,Integer> | generics.kt:13:1:18:1 | C1 | 1 | Integer |
2121
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 0 | String |
2222
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 1 | String |
23+
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 0 | T |
24+
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 1 | W |
2325
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 0 | U |
2426
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 1 | U |
2527
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 0 | T |

java/ql/test/kotlin/library-tests/variables/variableAccesses.expected

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
varAcc
22
| variables.kt:3:5:3:21 | prop |
3-
| variables.kt:3:5:3:21 | prop |
3+
| variables.kt:3:5:3:21 | this.prop |
44
| variables.kt:10:1:10:21 | topLevel |
5-
| variables.kt:16:11:16:18 | o |
5+
| variables.kt:16:11:16:18 | this.o |
66
instAcc
7+
| variables.kt:3:5:3:21 | this |
8+
| variables.kt:16:11:16:18 | this |
79
| variables.kt:21:9:21:9 | this |
810
| variables.kt:21:11:21:15 | this |
911
| variables.kt:24:9:24:9 | this |

0 commit comments

Comments
 (0)