Skip to content

Commit b763c40

Browse files
committed
hasChildElement: include method -> local class edges
1 parent fff9a75 commit b763c40

13 files changed

+107
-2
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ class Element extends @element, Top {
7979
private predicate hasChildElement(Element parent, Element e) {
8080
cupackage(e, parent)
8181
or
82-
enclInReftype(e, parent)
82+
enclInReftype(e, parent) and
83+
not e instanceof LocalClassOrInterface
84+
or
85+
e.(LocalClassOrInterface).getLocalTypeDeclStmt().getEnclosingCallable() = parent
8386
or
8487
not enclInReftype(e, _) and
8588
e.(Class).getCompilationUnit() = parent

java/ql/test/library-tests/structure/DeclaresMember.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
| D | D |
1414
| Diamond1 | Diamond1 |
1515
| Diamond2 | Diamond2 |
16+
| DoublyLocalClass | DoublyLocalClass |
17+
| DoublyLocalClass | doublyLocalClassMethod |
1618
| I1 | m1 |
1719
| I1other | m1 |
1820
| I2 | f |
@@ -26,6 +28,7 @@
2628
| ITop | f2 |
2729
| ITop | f3 |
2830
| LocalClass | LocalClass |
31+
| LocalClass | localClassMethod |
2932
| LocalClass | n |
3033
| MemberClass | MemberClass |
3134
| Object | Object |

java/ql/test/library-tests/structure/EnclosingCallables.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
| structure/A.java:7:2:7:4 | int | --none-- |
33
| structure/A.java:9:2:9:5 | void | m |
44
| structure/A.java:10:22:10:24 | int | --none-- |
5+
| structure/A.java:10:29:10:32 | void | localClassMethod |
6+
| structure/A.java:10:80:10:83 | void | doublyLocalClassMethod |
57
| structure/A.java:11:3:11:5 | m(...) | m |
68
| structure/A.java:15:17:15:17 | A | --none-- |
79
| structure/A.java:16:2:16:4 | int | --none-- |

java/ql/test/library-tests/structure/EnclosingStatements.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
| structure/A.java:7:2:7:4 | int | --none-- |
33
| structure/A.java:9:2:9:5 | void | --none-- |
44
| structure/A.java:10:22:10:24 | int | --none-- |
5+
| structure/A.java:10:29:10:32 | void | --none-- |
6+
| structure/A.java:10:80:10:83 | void | --none-- |
57
| structure/A.java:11:3:11:5 | m(...) | stmt on line 11 |
68
| structure/A.java:15:17:15:17 | A | --none-- |
79
| structure/A.java:16:2:16:4 | int | --none-- |
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
| structure/A.java:0:0:0:0 | A | structure/A.java:3:11:3:11 | I |
2+
| structure/A.java:0:0:0:0 | A | structure/A.java:5:14:5:14 | A |
3+
| structure/A.java:0:0:0:0 | A | structure/A.java:15:7:15:7 | B |
4+
| structure/A.java:0:0:0:0 | A | structure/A.java:20:7:20:7 | C |
5+
| structure/A.java:0:0:0:0 | A | structure/A.java:24:7:24:7 | D |
6+
| structure/A.java:5:14:5:14 | A | structure/A.java:5:14:5:14 | A |
7+
| structure/A.java:5:14:5:14 | A | structure/A.java:6:6:6:6 | x |
8+
| structure/A.java:5:14:5:14 | A | structure/A.java:7:6:7:6 | y |
9+
| structure/A.java:5:14:5:14 | A | structure/A.java:8:8:8:18 | MemberClass |
10+
| structure/A.java:5:14:5:14 | A | structure/A.java:9:7:9:7 | m |
11+
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:8:8:8:18 | MemberClass |
12+
| structure/A.java:9:7:9:7 | m | structure/A.java:10:9:10:18 | LocalClass |
13+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:9:10:18 | LocalClass |
14+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
15+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
16+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
17+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
18+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
19+
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
20+
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
21+
| structure/A.java:15:7:15:7 | B | structure/A.java:17:12:17:26 | MemberInterface |
22+
| structure/A.java:20:7:20:7 | C | structure/A.java:20:7:20:7 | C |
23+
| structure/A.java:20:7:20:7 | C | structure/A.java:21:6:21:6 | w |
24+
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | <obinit> |
25+
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | D |
26+
| structure/A.java:24:7:24:7 | D | structure/A.java:25:8:25:8 | new C(...) { ... } |
27+
| structure/A.java:25:8:25:8 | new C(...) { ... } | structure/A.java:25:8:25:8 | |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import java
2+
3+
from Element e1, Element e2
4+
where
5+
e1.hasChildElement(e2) and
6+
e1.getFile().toString() = "A"
7+
select e1, e2

java/ql/test/library-tests/structure/HasMethod.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
| structure/A.java:5:14:5:14 | A | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
2+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:9:10:18 | LocalClass |
3+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
24
| structure/A.java:15:7:15:7 | B | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
35
| structure/A.java:24:7:24:7 | D | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
46
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | <obinit> | structure/A.java:24:7:24:7 | D |

java/ql/test/library-tests/structure/InSameTopLevelType.expected

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
| structure/A.java:5:14:5:14 | A | structure/A.java:10:9:10:18 | LocalClass |
1515
| structure/A.java:5:14:5:14 | A | structure/A.java:10:26:10:26 | n |
1616
| structure/A.java:5:14:5:14 | A | structure/A.java:10:26:10:26 | n |
17+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:34:10:49 | localClassMethod |
18+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:34:10:49 | localClassMethod |
19+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
20+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
21+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
22+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
23+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
24+
| structure/A.java:5:14:5:14 | A | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
1725
| structure/A.java:6:6:6:6 | x | structure/A.java:7:6:7:6 | y |
1826
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:6:6:6:6 | x |
1927
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:6:6:6:6 | x |
@@ -23,6 +31,10 @@
2331
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:9:7:9:7 | m |
2432
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:26:10:26 | n |
2533
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:26:10:26 | n |
34+
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:34:10:49 | localClassMethod |
35+
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:34:10:49 | localClassMethod |
36+
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
37+
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
2638
| structure/A.java:9:7:9:7 | m | structure/A.java:6:6:6:6 | x |
2739
| structure/A.java:9:7:9:7 | m | structure/A.java:7:6:7:6 | y |
2840
| structure/A.java:9:7:9:7 | m | structure/A.java:10:26:10:26 | n |
@@ -38,8 +50,41 @@
3850
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:9:7:9:7 | m |
3951
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
4052
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
53+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
54+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
55+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
56+
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
4157
| structure/A.java:10:26:10:26 | n | structure/A.java:6:6:6:6 | x |
4258
| structure/A.java:10:26:10:26 | n | structure/A.java:7:6:7:6 | y |
59+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:6:6:6:6 | x |
60+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:7:6:7:6 | y |
61+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:9:7:9:7 | m |
62+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:26:10:26 | n |
63+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:6:6:6:6 | x |
64+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:6:6:6:6 | x |
65+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:7:6:7:6 | y |
66+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:7:6:7:6 | y |
67+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
68+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
69+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
70+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
71+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:9:7:9:7 | m |
72+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:9:7:9:7 | m |
73+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
74+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
75+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
76+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
77+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:26:10:26 | n |
78+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:26:10:26 | n |
79+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:34:10:49 | localClassMethod |
80+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:34:10:49 | localClassMethod |
81+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
82+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
83+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:6:6:6:6 | x |
84+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:7:6:7:6 | y |
85+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:9:7:9:7 | m |
86+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:26:10:26 | n |
87+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:34:10:49 | localClassMethod |
4388
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
4489
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
4590
| structure/A.java:15:7:15:7 | B | structure/A.java:17:12:17:26 | MemberInterface |

java/ql/test/library-tests/structure/IsInType.expected

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@
1414
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:9:10:18 | LocalClass |
1515
| structure/A.java:10:26:10:26 | n | structure/A.java:5:14:5:14 | A |
1616
| structure/A.java:10:26:10:26 | n | structure/A.java:10:9:10:18 | LocalClass |
17+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:5:14:5:14 | A |
18+
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:9:10:18 | LocalClass |
19+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:5:14:5:14 | A |
20+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:5:14:5:14 | A |
21+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
22+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
23+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
24+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
25+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:5:14:5:14 | A |
26+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:9:10:18 | LocalClass |
27+
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
1728
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
1829
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
1930
| structure/A.java:16:6:16:6 | z | structure/A.java:15:7:15:7 | B |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:5:14:5:14 | A |
22
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:5:14:5:14 | A |
3+
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
34
| structure/A.java:17:12:17:26 | MemberInterface | structure/A.java:15:7:15:7 | B |
45
| structure/A.java:25:8:25:8 | new C(...) { ... } | structure/A.java:24:7:24:7 | D |

0 commit comments

Comments
 (0)