hasChildElement: include method -> local class edges

This commit is contained in:
Chris Smowton
2022-10-10 15:54:35 +01:00
parent fff9a75ff8
commit b763c406b6
13 changed files with 107 additions and 2 deletions

View File

@@ -79,7 +79,10 @@ class Element extends @element, Top {
private predicate hasChildElement(Element parent, Element e) {
cupackage(e, parent)
or
enclInReftype(e, parent)
enclInReftype(e, parent) and
not e instanceof LocalClassOrInterface
or
e.(LocalClassOrInterface).getLocalTypeDeclStmt().getEnclosingCallable() = parent
or
not enclInReftype(e, _) and
e.(Class).getCompilationUnit() = parent

View File

@@ -13,6 +13,8 @@
| D | D |
| Diamond1 | Diamond1 |
| Diamond2 | Diamond2 |
| DoublyLocalClass | DoublyLocalClass |
| DoublyLocalClass | doublyLocalClassMethod |
| I1 | m1 |
| I1other | m1 |
| I2 | f |
@@ -26,6 +28,7 @@
| ITop | f2 |
| ITop | f3 |
| LocalClass | LocalClass |
| LocalClass | localClassMethod |
| LocalClass | n |
| MemberClass | MemberClass |
| Object | Object |

View File

@@ -2,6 +2,8 @@
| structure/A.java:7:2:7:4 | int | --none-- |
| structure/A.java:9:2:9:5 | void | m |
| structure/A.java:10:22:10:24 | int | --none-- |
| structure/A.java:10:29:10:32 | void | localClassMethod |
| structure/A.java:10:80:10:83 | void | doublyLocalClassMethod |
| structure/A.java:11:3:11:5 | m(...) | m |
| structure/A.java:15:17:15:17 | A | --none-- |
| structure/A.java:16:2:16:4 | int | --none-- |

View File

@@ -2,6 +2,8 @@
| structure/A.java:7:2:7:4 | int | --none-- |
| structure/A.java:9:2:9:5 | void | --none-- |
| structure/A.java:10:22:10:24 | int | --none-- |
| structure/A.java:10:29:10:32 | void | --none-- |
| structure/A.java:10:80:10:83 | void | --none-- |
| structure/A.java:11:3:11:5 | m(...) | stmt on line 11 |
| structure/A.java:15:17:15:17 | A | --none-- |
| structure/A.java:16:2:16:4 | int | --none-- |

View File

@@ -0,0 +1,27 @@
| structure/A.java:0:0:0:0 | A | structure/A.java:3:11:3:11 | I |
| structure/A.java:0:0:0:0 | A | structure/A.java:5:14:5:14 | A |
| structure/A.java:0:0:0:0 | A | structure/A.java:15:7:15:7 | B |
| structure/A.java:0:0:0:0 | A | structure/A.java:20:7:20:7 | C |
| structure/A.java:0:0:0:0 | A | structure/A.java:24:7:24:7 | D |
| structure/A.java:5:14:5:14 | A | structure/A.java:5:14:5:14 | A |
| structure/A.java:5:14:5:14 | A | structure/A.java:6:6:6:6 | x |
| structure/A.java:5:14:5:14 | A | structure/A.java:7:6:7:6 | y |
| structure/A.java:5:14:5:14 | A | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:9:7:9:7 | m |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:9:7:9:7 | m | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
| structure/A.java:15:7:15:7 | B | structure/A.java:17:12:17:26 | MemberInterface |
| structure/A.java:20:7:20:7 | C | structure/A.java:20:7:20:7 | C |
| structure/A.java:20:7:20:7 | C | structure/A.java:21:6:21:6 | w |
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | <obinit> |
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | D |
| structure/A.java:24:7:24:7 | D | structure/A.java:25:8:25:8 | new C(...) { ... } |
| structure/A.java:25:8:25:8 | new C(...) { ... } | structure/A.java:25:8:25:8 | |

View File

@@ -0,0 +1,7 @@
import java
from Element e1, Element e2
where
e1.hasChildElement(e2) and
e1.getFile().toString() = "A"
select e1, e2

View File

@@ -1,4 +1,6 @@
| structure/A.java:5:14:5:14 | A | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:15:7:15:7 | B | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
| structure/A.java:24:7:24:7 | D | structure/A.java:9:7:9:7 | m | structure/A.java:5:14:5:14 | A |
| structure/A.java:24:7:24:7 | D | structure/A.java:24:7:24:7 | <obinit> | structure/A.java:24:7:24:7 | D |

View File

@@ -14,6 +14,14 @@
| structure/A.java:5:14:5:14 | A | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:26:10:26 | n |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:26:10:26 | n |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:5:14:5:14 | A | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:6:6:6:6 | x | structure/A.java:7:6:7:6 | y |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:6:6:6:6 | x |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:6:6:6:6 | x |
@@ -23,6 +31,10 @@
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:9:7:9:7 | m |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:9:7:9:7 | m | structure/A.java:6:6:6:6 | x |
| structure/A.java:9:7:9:7 | m | structure/A.java:7:6:7:6 | y |
| structure/A.java:9:7:9:7 | m | structure/A.java:10:26:10:26 | n |
@@ -38,8 +50,41 @@
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:9:7:9:7 | m |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:10:26:10:26 | n | structure/A.java:6:6:6:6 | x |
| structure/A.java:10:26:10:26 | n | structure/A.java:7:6:7:6 | y |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:6:6:6:6 | x |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:7:6:7:6 | y |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:9:7:9:7 | m |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:6:6:6:6 | x |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:6:6:6:6 | x |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:7:6:7:6 | y |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:7:6:7:6 | y |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:9:7:9:7 | m |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:9:7:9:7 | m |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:85:10:106 | doublyLocalClassMethod |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:6:6:6:6 | x |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:7:6:7:6 | y |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:9:7:9:7 | m |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:26:10:26 | n |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:34:10:49 | localClassMethod |
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
| structure/A.java:15:7:15:7 | B | structure/A.java:16:6:16:6 | z |
| structure/A.java:15:7:15:7 | B | structure/A.java:17:12:17:26 | MemberInterface |

View File

@@ -14,6 +14,17 @@
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:26:10:26 | n | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:26:10:26 | n | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:34:10:49 | localClassMethod | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:85:10:106 | doublyLocalClassMethod | structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
| structure/A.java:15:7:15:7 | B | structure/A.java:15:7:15:7 | B |
| structure/A.java:16:6:16:6 | z | structure/A.java:15:7:15:7 | B |

View File

@@ -1,4 +1,5 @@
| structure/A.java:8:8:8:18 | MemberClass | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:9:10:18 | LocalClass | structure/A.java:5:14:5:14 | A |
| structure/A.java:10:61:10:76 | DoublyLocalClass | structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:17:12:17:26 | MemberInterface | structure/A.java:15:7:15:7 | B |
| structure/A.java:25:8:25:8 | new C(...) { ... } | structure/A.java:24:7:24:7 | D |

View File

@@ -2,6 +2,7 @@
| structure/A.java:5:14:5:14 | A |
| structure/A.java:8:8:8:18 | MemberClass |
| structure/A.java:10:9:10:18 | LocalClass |
| structure/A.java:10:61:10:76 | DoublyLocalClass |
| structure/A.java:15:7:15:7 | B |
| structure/A.java:17:12:17:26 | MemberInterface |
| structure/A.java:20:7:20:7 | C |

View File

@@ -2,6 +2,7 @@
| structure/A.java:5:14:5:14 | A | file://:0:0:0:0 | structure |
| structure/A.java:8:8:8:18 | MemberClass | file://:0:0:0:0 | structure |
| structure/A.java:10:9:10:18 | LocalClass | file://:0:0:0:0 | structure |
| structure/A.java:10:61:10:76 | DoublyLocalClass | file://:0:0:0:0 | structure |
| structure/A.java:15:7:15:7 | B | file://:0:0:0:0 | structure |
| structure/A.java:17:12:17:26 | MemberInterface | file://:0:0:0:0 | structure |
| structure/A.java:20:7:20:7 | C | file://:0:0:0:0 | structure |

View File

@@ -7,7 +7,7 @@ public class A {
int y;
class MemberClass { }
void m() {
class LocalClass { int n; }
class LocalClass { int n; void localClassMethod() { class DoublyLocalClass { void doublyLocalClassMethod() { } } } }
m();
}
}