Skip to content

Commit 6cf956d

Browse files
committed
Add CFG test for anonymous variables and fall-throughs with pattern cases
1 parent cc8dcf6 commit 6cf956d

File tree

3 files changed

+100
-24
lines changed

3 files changed

+100
-24
lines changed

java/ql/test/library-tests/pattern-switch/cfg/Test.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,24 @@ case A(B(var x, var y), var z):
9898
break;
9999
}
100100

101+
switch(thing) {
102+
case B(_, _):
103+
case Integer _, String _, A(_, _) when thing.toString().equals("abc"):
104+
case Float _:
105+
break;
106+
default:
107+
break;
108+
}
109+
110+
var result = switch(thing) {
111+
case B(_, _):
112+
case Integer _, String _, A(_, _) when thing.toString().equals("abc"):
113+
case Float _:
114+
yield 1;
115+
default:
116+
yield 2;
117+
};
118+
101119
}
102120

103121
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args --release 21
1+
//semmle-extractor-options: --javac-args --release 22

java/ql/test/library-tests/pattern-switch/cfg/test.expected

Lines changed: 81 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test |
4949
| Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test |
5050
| Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) |
51-
| Test.java:3:41:101:3 | { ... } | Test.java:5:6:5:19 | switch (...) |
51+
| Test.java:3:41:119:3 | { ... } | Test.java:5:6:5:19 | switch (...) |
5252
| Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing |
5353
| Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case <Pattern> |
5454
| Test.java:6:8:6:23 | case <Pattern> | Test.java:6:20:6:20 | s |
@@ -288,26 +288,84 @@
288288
| Test.java:95:21:95:21 | x | Test.java:95:28:95:28 | y |
289289
| Test.java:95:28:95:28 | y | Test.java:95:15:95:29 | B(...) |
290290
| Test.java:95:36:95:36 | z | Test.java:95:13:95:37 | A(...) |
291-
| Test.java:96:10:96:15 | break | Test.java:3:22:3:25 | test |
291+
| Test.java:96:10:96:15 | break | Test.java:101:6:101:18 | switch (...) |
292292
| Test.java:97:8:97:15 | default | Test.java:98:10:98:15 | break |
293-
| Test.java:98:10:98:15 | break | Test.java:3:22:3:25 | test |
294-
| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | <Expr>; |
295-
| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | A |
296-
| Test.java:105:8:105:8 | <Expr>; | Test.java:105:8:105:8 | this |
297-
| Test.java:105:8:105:8 | <Expr>; | Test.java:105:8:105:8 | this |
298-
| Test.java:105:8:105:8 | b | Test.java:105:8:105:8 | ...=... |
299-
| Test.java:105:8:105:8 | field3 | Test.java:105:8:105:8 | ...=... |
300-
| Test.java:105:8:105:8 | super(...) | Test.java:105:8:105:8 | <Expr>; |
301-
| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | b |
302-
| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | field3 |
303-
| Test.java:105:8:105:8 | { ... } | Test.java:105:8:105:8 | super(...) |
304-
| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | <Expr>; |
305-
| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | B |
306-
| Test.java:106:8:106:8 | <Expr>; | Test.java:106:8:106:8 | this |
307-
| Test.java:106:8:106:8 | <Expr>; | Test.java:106:8:106:8 | this |
308-
| Test.java:106:8:106:8 | field1 | Test.java:106:8:106:8 | ...=... |
309-
| Test.java:106:8:106:8 | field2 | Test.java:106:8:106:8 | ...=... |
310-
| Test.java:106:8:106:8 | super(...) | Test.java:106:8:106:8 | <Expr>; |
311-
| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field1 |
312-
| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field2 |
313-
| Test.java:106:8:106:8 | { ... } | Test.java:106:8:106:8 | super(...) |
293+
| Test.java:98:10:98:15 | break | Test.java:101:6:101:18 | switch (...) |
294+
| Test.java:101:6:101:18 | switch (...) | Test.java:101:13:101:17 | thing |
295+
| Test.java:101:13:101:17 | thing | Test.java:102:8:102:20 | case <Pattern> |
296+
| Test.java:102:8:102:20 | case <Pattern> | Test.java:102:15:102:15 | <anonymous local variable> |
297+
| Test.java:102:8:102:20 | case <Pattern> | Test.java:103:8:103:77 | case <Pattern> |
298+
| Test.java:102:13:102:19 | B(...) | Test.java:105:10:105:15 | break |
299+
| Test.java:102:15:102:15 | <anonymous local variable> | Test.java:102:18:102:18 | <anonymous local variable> |
300+
| Test.java:102:18:102:18 | <anonymous local variable> | Test.java:102:13:102:19 | B(...) |
301+
| Test.java:103:8:103:77 | case <Pattern> | Test.java:103:21:103:21 | <anonymous local variable> |
302+
| Test.java:103:8:103:77 | case <Pattern> | Test.java:103:31:103:31 | <anonymous local variable> |
303+
| Test.java:103:8:103:77 | case <Pattern> | Test.java:103:36:103:36 | <anonymous local variable> |
304+
| Test.java:103:8:103:77 | case <Pattern> | Test.java:104:8:104:20 | case <Pattern> |
305+
| Test.java:103:21:103:21 | <anonymous local variable> | Test.java:103:47:103:51 | thing |
306+
| Test.java:103:31:103:31 | <anonymous local variable> | Test.java:103:47:103:51 | thing |
307+
| Test.java:103:34:103:40 | A(...) | Test.java:103:47:103:51 | thing |
308+
| Test.java:103:36:103:36 | <anonymous local variable> | Test.java:103:39:103:39 | <anonymous local variable> |
309+
| Test.java:103:39:103:39 | <anonymous local variable> | Test.java:103:34:103:40 | A(...) |
310+
| Test.java:103:47:103:51 | thing | Test.java:103:47:103:62 | toString(...) |
311+
| Test.java:103:47:103:62 | toString(...) | Test.java:103:71:103:75 | "abc" |
312+
| Test.java:103:47:103:76 | equals(...) | Test.java:104:8:104:20 | case <Pattern> |
313+
| Test.java:103:47:103:76 | equals(...) | Test.java:105:10:105:15 | break |
314+
| Test.java:103:71:103:75 | "abc" | Test.java:103:47:103:76 | equals(...) |
315+
| Test.java:104:8:104:20 | case <Pattern> | Test.java:104:19:104:19 | <anonymous local variable> |
316+
| Test.java:104:8:104:20 | case <Pattern> | Test.java:106:8:106:15 | default |
317+
| Test.java:104:19:104:19 | <anonymous local variable> | Test.java:105:10:105:15 | break |
318+
| Test.java:105:10:105:15 | break | Test.java:110:6:117:7 | var ...; |
319+
| Test.java:106:8:106:15 | default | Test.java:107:10:107:15 | break |
320+
| Test.java:107:10:107:15 | break | Test.java:110:6:117:7 | var ...; |
321+
| Test.java:110:6:117:7 | var ...; | Test.java:110:19:110:31 | switch (...) |
322+
| Test.java:110:10:110:31 | result | Test.java:3:22:3:25 | test |
323+
| Test.java:110:19:110:31 | switch (...) | Test.java:110:26:110:30 | thing |
324+
| Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case <Pattern> |
325+
| Test.java:111:8:111:20 | case <Pattern> | Test.java:111:15:111:15 | <anonymous local variable> |
326+
| Test.java:111:8:111:20 | case <Pattern> | Test.java:112:8:112:77 | case <Pattern> |
327+
| Test.java:111:13:111:19 | B(...) | Test.java:114:10:114:17 | yield ... |
328+
| Test.java:111:15:111:15 | <anonymous local variable> | Test.java:111:18:111:18 | <anonymous local variable> |
329+
| Test.java:111:18:111:18 | <anonymous local variable> | Test.java:111:13:111:19 | B(...) |
330+
| Test.java:112:8:112:77 | case <Pattern> | Test.java:112:21:112:21 | <anonymous local variable> |
331+
| Test.java:112:8:112:77 | case <Pattern> | Test.java:112:31:112:31 | <anonymous local variable> |
332+
| Test.java:112:8:112:77 | case <Pattern> | Test.java:112:36:112:36 | <anonymous local variable> |
333+
| Test.java:112:8:112:77 | case <Pattern> | Test.java:113:8:113:20 | case <Pattern> |
334+
| Test.java:112:21:112:21 | <anonymous local variable> | Test.java:112:47:112:51 | thing |
335+
| Test.java:112:31:112:31 | <anonymous local variable> | Test.java:112:47:112:51 | thing |
336+
| Test.java:112:34:112:40 | A(...) | Test.java:112:47:112:51 | thing |
337+
| Test.java:112:36:112:36 | <anonymous local variable> | Test.java:112:39:112:39 | <anonymous local variable> |
338+
| Test.java:112:39:112:39 | <anonymous local variable> | Test.java:112:34:112:40 | A(...) |
339+
| Test.java:112:47:112:51 | thing | Test.java:112:47:112:62 | toString(...) |
340+
| Test.java:112:47:112:62 | toString(...) | Test.java:112:71:112:75 | "abc" |
341+
| Test.java:112:47:112:76 | equals(...) | Test.java:113:8:113:20 | case <Pattern> |
342+
| Test.java:112:47:112:76 | equals(...) | Test.java:114:10:114:17 | yield ... |
343+
| Test.java:112:71:112:75 | "abc" | Test.java:112:47:112:76 | equals(...) |
344+
| Test.java:113:8:113:20 | case <Pattern> | Test.java:113:19:113:19 | <anonymous local variable> |
345+
| Test.java:113:8:113:20 | case <Pattern> | Test.java:115:8:115:15 | default |
346+
| Test.java:113:19:113:19 | <anonymous local variable> | Test.java:114:10:114:17 | yield ... |
347+
| Test.java:114:10:114:17 | yield ... | Test.java:114:16:114:16 | 1 |
348+
| Test.java:114:16:114:16 | 1 | Test.java:110:10:110:31 | result |
349+
| Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... |
350+
| Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 |
351+
| Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result |
352+
| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | <Expr>; |
353+
| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | A |
354+
| Test.java:123:8:123:8 | <Expr>; | Test.java:123:8:123:8 | this |
355+
| Test.java:123:8:123:8 | <Expr>; | Test.java:123:8:123:8 | this |
356+
| Test.java:123:8:123:8 | b | Test.java:123:8:123:8 | ...=... |
357+
| Test.java:123:8:123:8 | field3 | Test.java:123:8:123:8 | ...=... |
358+
| Test.java:123:8:123:8 | super(...) | Test.java:123:8:123:8 | <Expr>; |
359+
| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | b |
360+
| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | field3 |
361+
| Test.java:123:8:123:8 | { ... } | Test.java:123:8:123:8 | super(...) |
362+
| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | <Expr>; |
363+
| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | B |
364+
| Test.java:124:8:124:8 | <Expr>; | Test.java:124:8:124:8 | this |
365+
| Test.java:124:8:124:8 | <Expr>; | Test.java:124:8:124:8 | this |
366+
| Test.java:124:8:124:8 | field1 | Test.java:124:8:124:8 | ...=... |
367+
| Test.java:124:8:124:8 | field2 | Test.java:124:8:124:8 | ...=... |
368+
| Test.java:124:8:124:8 | super(...) | Test.java:124:8:124:8 | <Expr>; |
369+
| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field1 |
370+
| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field2 |
371+
| Test.java:124:8:124:8 | { ... } | Test.java:124:8:124:8 | super(...) |

0 commit comments

Comments
 (0)