-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Java: Make separate classes for different control flow node kinds #17996
base: main
Are you sure you want to change the base?
Conversation
Only one in Dominance required thinking.
now we need to sort out range analysis
The equivalence relation needed for range analysis is now on underlying `ExprParent`s, as `BasicBlock` is now an IPA type and ids are opaque.
Java: some mechanical transformations
Fix is taken from https://github.com/github/codeql/pull/711/files#diff-24d21bcfe63e29a6ef28151d9bd8eeaa610565c3ed7b846de1eb5fb0be661ae5 It is not clear why anotations are left out.
Java: fix UnreachabaleBasicBlock
This is unrelated to the main purpose of this PR. I have made a separate PR to do it here: github#17988
result = this.(Expr).getEnclosingStmt() | ||
} | ||
|
||
Node getCFGNode() { result.asExpr() = this or result.asStmt() = this } |
Check warning
Code scanning / CodeQL
Acronyms should be PascalCase/camelCase. Warning
private ControlFlowNode mainBranchSucc(ControlFlowNode n, boolean b) { | ||
result = succ(n, BooleanCompletion(_, b)) | ||
} | ||
private Node mainBranchSucc(Node n, boolean b) { result = succ(n, BooleanCompletion(_, b)) } |
Check warning
Code scanning / CodeQL
Missing QLDoc for parameter Warning
@@ -1487,8 +1602,8 @@ | |||
* In the latter case, when `n` occurs as the last node in a finally block, there might be | |||
* multiple different such successors. | |||
*/ | |||
private ControlFlowNode otherBranchSucc(ControlFlowNode n, boolean b) { | |||
exists(ControlFlowNode main | main = mainBranchSucc(n, b.booleanNot()) | | |||
private Node otherBranchSucc(Node n, boolean b) { |
Check warning
Code scanning / CodeQL
Missing QLDoc for parameter Warning
This puts all the logic of a particular control flow node kind into one place and makes it easier to add new kinds.
Put all the ones which might need to be overrridden by subclasses together for ease of reading.
86804e2
to
2ca2a4b
Compare
This PR is built on top of #17970. That should be merged first. Only review after the commit "Undo accidental bugfix".
This PR is purely a refactoring to make the code easier to read and to make it easier to add new kinds of control flow nodes. As a guide I used the equivalent class in the go library.