Skip to content

Commit c0e1157

Browse files
authored
Merge pull request #9647 from tamasvajk/kotlin-when-branch-encl-stmt
Kotlin: Fix enclosing statement of `when` branches
2 parents c7a6b1e + a50e062 commit c0e1157

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

java/ql/lib/semmle/code/java/Statement.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ class Stmt extends StmtParent, ExprParent, @stmt {
2929
*/
3030
Stmt getEnclosingStmt() {
3131
result = this.getParent() or
32-
result = this.getParent().(SwitchExpr).getEnclosingStmt()
32+
result = this.getParent().(SwitchExpr).getEnclosingStmt() or
33+
result = this.getParent().(WhenExpr).getEnclosingStmt()
3334
}
3435

3536
/** Holds if this statement is the child of the specified parent at the specified (zero-based) position. */

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
enclosing
2+
| stmts.kt:3:5:6:5 | <Expr>; | stmts.kt:2:41:20:1 | { ... } |
3+
| stmts.kt:3:8:4:5 | ... -> ... | stmts.kt:3:5:6:5 | <Expr>; |
4+
| stmts.kt:3:15:4:5 | { ... } | stmts.kt:3:8:4:5 | ... -> ... |
5+
| stmts.kt:4:15:5:5 | ... -> ... | stmts.kt:3:5:6:5 | <Expr>; |
6+
| stmts.kt:4:22:5:5 | { ... } | stmts.kt:4:15:5:5 | ... -> ... |
7+
| stmts.kt:5:12:6:5 | ... -> ... | stmts.kt:3:5:6:5 | <Expr>; |
8+
| stmts.kt:5:12:6:5 | { ... } | stmts.kt:5:12:6:5 | ... -> ... |
9+
| stmts.kt:7:5:8:16 | while (...) | stmts.kt:2:41:20:1 | { ... } |
10+
| stmts.kt:8:9:8:16 | return ... | stmts.kt:7:5:8:16 | while (...) |
11+
| stmts.kt:9:5:11:5 | while (...) | stmts.kt:2:41:20:1 | { ... } |
12+
| stmts.kt:9:18:11:5 | { ... } | stmts.kt:9:5:11:5 | while (...) |
13+
| stmts.kt:10:9:10:16 | return ... | stmts.kt:9:18:11:5 | { ... } |
14+
| stmts.kt:12:5:14:18 | do ... while (...) | stmts.kt:12:5:14:18 | { ... } |
15+
| stmts.kt:12:5:14:18 | { ... } | stmts.kt:2:41:20:1 | { ... } |
16+
| stmts.kt:12:8:14:5 | { ... } | stmts.kt:12:5:14:18 | do ... while (...) |
17+
| stmts.kt:13:9:13:16 | return ... | stmts.kt:12:8:14:5 | { ... } |
18+
| stmts.kt:15:5:15:13 | var ...; | stmts.kt:2:41:20:1 | { ... } |
19+
| stmts.kt:17:5:17:58 | var ...; | stmts.kt:2:41:20:1 | { ... } |
20+
| stmts.kt:17:26:17:58 | ... -> ... | stmts.kt:17:5:17:58 | var ...; |
21+
| stmts.kt:17:26:17:58 | ... -> ... | stmts.kt:17:5:17:58 | var ...; |
22+
| stmts.kt:17:35:17:43 | { ... } | stmts.kt:17:26:17:58 | ... -> ... |
23+
| stmts.kt:17:37:17:37 | <Expr>; | stmts.kt:17:35:17:43 | { ... } |
24+
| stmts.kt:17:50:17:58 | { ... } | stmts.kt:17:26:17:58 | ... -> ... |
25+
| stmts.kt:17:52:17:52 | <Expr>; | stmts.kt:17:50:17:58 | { ... } |
26+
| stmts.kt:18:5:18:56 | var ...; | stmts.kt:2:41:20:1 | { ... } |
27+
| stmts.kt:18:26:18:56 | ... -> ... | stmts.kt:18:5:18:56 | var ...; |
28+
| stmts.kt:18:26:18:56 | ... -> ... | stmts.kt:18:5:18:56 | var ...; |
29+
| stmts.kt:18:37:18:37 | <Expr>; | stmts.kt:18:26:18:56 | ... -> ... |
30+
| stmts.kt:18:52:18:52 | <Expr>; | stmts.kt:18:26:18:56 | ... -> ... |
31+
| stmts.kt:19:5:19:16 | return ... | stmts.kt:2:41:20:1 | { ... } |
32+
| stmts.kt:23:11:27:5 | while (...) | stmts.kt:22:27:30:1 | { ... } |
33+
| stmts.kt:23:27:27:5 | { ... } | stmts.kt:23:11:27:5 | while (...) |
34+
| stmts.kt:24:9:26:25 | do ... while (...) | stmts.kt:24:9:26:25 | { ... } |
35+
| stmts.kt:24:9:26:25 | { ... } | stmts.kt:23:27:27:5 | { ... } |
36+
| stmts.kt:24:13:26:9 | { ... } | stmts.kt:24:9:26:25 | do ... while (...) |
37+
| stmts.kt:25:13:25:33 | ... -> ... | stmts.kt:25:13:25:33 | <Expr>; |
38+
| stmts.kt:25:13:25:33 | <Expr>; | stmts.kt:24:13:26:9 | { ... } |
39+
| stmts.kt:25:24:25:33 | break | stmts.kt:25:13:25:33 | ... -> ... |
40+
| stmts.kt:28:5:29:16 | while (...) | stmts.kt:22:27:30:1 | { ... } |
41+
| stmts.kt:29:9:29:16 | continue | stmts.kt:28:5:29:16 | while (...) |
42+
| stmts.kt:33:5:41:5 | try ... | stmts.kt:32:23:42:1 | { ... } |
43+
| stmts.kt:33:9:35:5 | { ... } | stmts.kt:33:5:41:5 | try ... |
44+
| stmts.kt:34:9:34:30 | throw ... | stmts.kt:33:9:35:5 | { ... } |
45+
| stmts.kt:36:5:38:5 | catch (...) | stmts.kt:33:5:41:5 | try ... |
46+
| stmts.kt:36:26:38:5 | { ... } | stmts.kt:36:5:38:5 | catch (...) |
47+
| stmts.kt:37:9:37:16 | return ... | stmts.kt:36:26:38:5 | { ... } |
48+
| stmts.kt:39:13:41:5 | { ... } | stmts.kt:33:5:41:5 | try ... |
49+
| stmts.kt:40:9:40:16 | return ... | stmts.kt:39:13:41:5 | { ... } |
50+
#select
151
| stmts.kt:2:41:20:1 | { ... } | BlockStmt |
252
| stmts.kt:3:5:6:5 | <Expr>; | ExprStmt |
353
| stmts.kt:3:8:4:5 | ... -> ... | WhenBranch |

java/ql/test/kotlin/library-tests/stmts/stmts.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ import java
22

33
from Stmt s
44
select s, s.getPrimaryQlClasses()
5+
6+
query predicate enclosing(Stmt s, Stmt encl) { s.getEnclosingStmt() = encl }

0 commit comments

Comments
 (0)