mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Extract field receiver in field read/write
This commit is contained in:
@@ -1632,6 +1632,11 @@ open class KotlinFileExtractor(
|
||||
val vId = useField(owner)
|
||||
tw.writeVariableBinding(id, vId)
|
||||
tw.writeStatementEnclosingExpr(id, exprParent.enclosingStmt)
|
||||
|
||||
val receiver = e.receiver
|
||||
if (receiver != null) {
|
||||
extractExpressionExpr(receiver, callable, id, -1, exprParent.enclosingStmt)
|
||||
}
|
||||
}
|
||||
is IrGetEnumValue -> {
|
||||
val exprParent = parent.expr(e, callable)
|
||||
@@ -1679,6 +1684,11 @@ open class KotlinFileExtractor(
|
||||
val vId = useField(e.symbol.owner)
|
||||
tw.writeVariableBinding(lhsId, vId)
|
||||
extractExpressionExpr(e.value, callable, id, 1, exprParent.enclosingStmt)
|
||||
|
||||
val receiver = e.receiver
|
||||
if (receiver != null) {
|
||||
extractExpressionExpr(receiver, callable, lhsId, -1, exprParent.enclosingStmt)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
logger.warnElement(Severity.ErrorSevere, "Unhandled IrSet* element.", e)
|
||||
|
||||
@@ -703,10 +703,12 @@ exprs.kt:
|
||||
# 162| 1: [VarAccess] r
|
||||
# 163| 1: [LocalVariableDeclStmt] var ...;
|
||||
# 163| 1: [LocalVariableDeclExpr] height
|
||||
# 163| 0: [VarAccess] height
|
||||
# 163| 0: [VarAccess] r2.height
|
||||
# 163| -1: [VarAccess] r2
|
||||
# 164| 2: [ExprStmt] <Expr>;
|
||||
# 164| 0: [AssignExpr] ...=...
|
||||
# 164| 0: [VarAccess] height
|
||||
# 164| 0: [VarAccess] r2.height
|
||||
# 164| -1: [VarAccess] r2
|
||||
# 164| 1: [IntegerLiteral] 3
|
||||
# 178| 5: [Method] enums
|
||||
# 178| 5: [BlockStmt] { ... }
|
||||
@@ -746,7 +748,8 @@ exprs.kt:
|
||||
# 142| 3: [Method] getN
|
||||
# 142| 5: [BlockStmt] { ... }
|
||||
# 142| 0: [ReturnStmt] return ...
|
||||
# 142| 0: [VarAccess] n
|
||||
# 142| 0: [VarAccess] this.n
|
||||
# 142| -1: [ThisAccess] this
|
||||
# 142| 3: [FieldDeclaration] int n;
|
||||
# 142| -1: [TypeAccess] int
|
||||
# 143| 5: [Method] foo
|
||||
@@ -808,7 +811,8 @@ exprs.kt:
|
||||
# 172| 7: [Method] getRgb
|
||||
# 172| 5: [BlockStmt] { ... }
|
||||
# 172| 0: [ReturnStmt] return ...
|
||||
# 172| 0: [VarAccess] rgb
|
||||
# 172| 0: [VarAccess] this.rgb
|
||||
# 172| -1: [ThisAccess] this
|
||||
# 172| 7: [FieldDeclaration] int rgb;
|
||||
# 172| -1: [TypeAccess] int
|
||||
# 183| 8: [Interface] Interface1
|
||||
@@ -821,7 +825,8 @@ exprs.kt:
|
||||
# 186| 3: [Method] getA1
|
||||
# 186| 5: [BlockStmt] { ... }
|
||||
# 186| 0: [ReturnStmt] return ...
|
||||
# 186| 0: [VarAccess] a1
|
||||
# 186| 0: [VarAccess] this.a1
|
||||
# 186| -1: [ThisAccess] this
|
||||
# 186| 3: [FieldDeclaration] int a1;
|
||||
# 186| -1: [TypeAccess] int
|
||||
# 186| 0: [IntegerLiteral] 1
|
||||
@@ -843,7 +848,8 @@ exprs.kt:
|
||||
# 190| 3: [Method] getA3
|
||||
# 190| 5: [BlockStmt] { ... }
|
||||
# 190| 0: [ReturnStmt] return ...
|
||||
# 190| 0: [VarAccess] a3
|
||||
# 190| 0: [VarAccess] this.a3
|
||||
# 190| -1: [ThisAccess] this
|
||||
# 190| 3: [FieldDeclaration] String a3;
|
||||
# 190| -1: [TypeAccess] String
|
||||
# 190| 0: [MethodAccess] toString(...)
|
||||
|
||||
@@ -477,7 +477,8 @@
|
||||
| exprs.kt:139:13:139:23 | ::class | exprs.kt:138:1:140:1 | getClass | ClassExpr |
|
||||
| exprs.kt:142:1:144:1 | <obinit>(...) | exprs.kt:142:1:144:1 | C | MethodAccess |
|
||||
| exprs.kt:142:9:142:18 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:142:9:142:18 | n | exprs.kt:142:9:142:18 | getN | VarAccess |
|
||||
| exprs.kt:142:9:142:18 | this | exprs.kt:142:9:142:18 | getN | ThisAccess |
|
||||
| exprs.kt:142:9:142:18 | this.n | exprs.kt:142:9:142:18 | getN | VarAccess |
|
||||
| exprs.kt:143:27:143:31 | C | exprs.kt:143:5:143:33 | foo | TypeAccess |
|
||||
| exprs.kt:143:27:143:31 | new C(...) | exprs.kt:143:5:143:33 | foo | ClassInstanceExpr |
|
||||
| exprs.kt:143:29:143:30 | 42 | exprs.kt:143:5:143:33 | foo | IntegerLiteral |
|
||||
@@ -528,9 +529,11 @@
|
||||
| exprs.kt:162:29:162:29 | Rectangle | exprs.kt:159:1:166:1 | foo | TypeAccess |
|
||||
| exprs.kt:162:29:162:29 | r | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:163:9:163:30 | height | exprs.kt:159:1:166:1 | foo | LocalVariableDeclExpr |
|
||||
| exprs.kt:163:25:163:30 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:163:22:163:23 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:163:25:163:30 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:164:9:164:10 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:164:9:164:17 | ...=... | exprs.kt:159:1:166:1 | foo | AssignExpr |
|
||||
| exprs.kt:164:9:164:17 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:164:9:164:17 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
|
||||
| exprs.kt:164:21:164:21 | 3 | exprs.kt:159:1:166:1 | foo | IntegerLiteral |
|
||||
| exprs.kt:168:1:170:1 | <obinit>(...) | exprs.kt:168:6:170:1 | Direction | MethodAccess |
|
||||
| exprs.kt:168:1:170:1 | Direction | exprs.kt:168:6:170:1 | Direction | TypeAccess |
|
||||
@@ -541,7 +544,8 @@
|
||||
| exprs.kt:172:1:176:1 | Unit | exprs.kt:172:6:176:1 | Color | TypeAccess |
|
||||
| exprs.kt:172:1:176:1 | new Enum(...) | exprs.kt:172:6:176:1 | Color | ClassInstanceExpr |
|
||||
| exprs.kt:172:18:172:29 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
|
||||
| exprs.kt:172:18:172:29 | this | exprs.kt:172:18:172:29 | getRgb | ThisAccess |
|
||||
| exprs.kt:172:18:172:29 | this.rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
|
||||
| exprs.kt:179:5:179:31 | south | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
|
||||
| exprs.kt:179:27:179:31 | SOUTH | exprs.kt:178:1:181:1 | enums | VarAccess |
|
||||
| exprs.kt:180:5:180:27 | green | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
|
||||
@@ -549,8 +553,9 @@
|
||||
| exprs.kt:185:1:193:1 | <obinit>(...) | exprs.kt:185:1:193:1 | Class1 | MethodAccess |
|
||||
| exprs.kt:186:5:186:14 | ...=... | exprs.kt:185:1:193:1 | <obinit> | AssignExpr |
|
||||
| exprs.kt:186:5:186:14 | a1 | exprs.kt:185:1:193:1 | <obinit> | VarAccess |
|
||||
| exprs.kt:186:5:186:14 | a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
|
||||
| exprs.kt:186:5:186:14 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:186:5:186:14 | this | exprs.kt:186:5:186:14 | getA1 | ThisAccess |
|
||||
| exprs.kt:186:5:186:14 | this.a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
|
||||
| exprs.kt:186:14:186:14 | 1 | exprs.kt:185:1:193:1 | <obinit> | IntegerLiteral |
|
||||
| exprs.kt:188:9:188:18 | a2 | exprs.kt:187:13:192:5 | getObject | LocalVariableDeclExpr |
|
||||
| exprs.kt:188:18:188:18 | 2 | exprs.kt:187:13:192:5 | getObject | IntegerLiteral |
|
||||
@@ -561,7 +566,8 @@
|
||||
| exprs.kt:190:13:190:49 | ...=... | exprs.kt:189:16:191:9 | <obinit> | AssignExpr |
|
||||
| exprs.kt:190:13:190:49 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:190:13:190:49 | a3 | exprs.kt:189:16:191:9 | <obinit> | VarAccess |
|
||||
| exprs.kt:190:13:190:49 | a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
|
||||
| exprs.kt:190:13:190:49 | this | exprs.kt:190:13:190:49 | getA3 | ThisAccess |
|
||||
| exprs.kt:190:13:190:49 | this.a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
|
||||
| exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:189:16:191:9 | <obinit> | MethodAccess |
|
||||
| exprs.kt:190:31:190:32 | this | exprs.kt:189:16:191:9 | <obinit> | ThisAccess |
|
||||
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:189:16:191:9 | <obinit> | AddExpr |
|
||||
|
||||
@@ -20,6 +20,8 @@ parameterizedType
|
||||
| generics.kt:13:1:18:1 | C1<String,Integer> | generics.kt:13:1:18:1 | C1 | 1 | Integer |
|
||||
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 0 | String |
|
||||
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 1 | String |
|
||||
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 0 | T |
|
||||
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 1 | W |
|
||||
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 0 | U |
|
||||
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 1 | U |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 0 | T |
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
varAcc
|
||||
| variables.kt:3:5:3:21 | prop |
|
||||
| variables.kt:3:5:3:21 | prop |
|
||||
| variables.kt:3:5:3:21 | this.prop |
|
||||
| variables.kt:10:1:10:21 | topLevel |
|
||||
| variables.kt:16:11:16:18 | o |
|
||||
| variables.kt:16:11:16:18 | this.o |
|
||||
instAcc
|
||||
| variables.kt:3:5:3:21 | this |
|
||||
| variables.kt:16:11:16:18 | this |
|
||||
| variables.kt:21:9:21:9 | this |
|
||||
| variables.kt:21:11:21:15 | this |
|
||||
| variables.kt:24:9:24:9 | this |
|
||||
|
||||
Reference in New Issue
Block a user