Skip to content

Commit 5c50666

Browse files
committed
Java: Extend qldoc.
1 parent 2ddffc4 commit 5c50666

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/**
2+
* Provides different types of control flow successor types.
3+
*/
4+
15
import java
26
private import codeql.util.Boolean
37

@@ -6,20 +10,62 @@ private newtype TSuccessorType =
610
TBooleanSuccessor(Boolean branch) or
711
TExceptionSuccessor()
812

13+
/** The type of a control flow successor. */
914
class SuccessorType extends TSuccessorType {
1015
string toString() { result = "SuccessorType" }
1116
}
1217

18+
/** A normal control flow successor. */
1319
class NormalSuccessor extends SuccessorType, TNormalSuccessor { }
1420

21+
/**
22+
* An exceptional control flow successor.
23+
*
24+
* This marks control flow edges that are taken when an exception is thrown.
25+
*/
1526
class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { }
1627

28+
/**
29+
* A conditional control flow successor.
30+
*
31+
* This currently only includes boolean successors (`BooleanSuccessor`).
32+
*/
1733
class ConditionalSuccessor extends SuccessorType, TBooleanSuccessor {
34+
/** Gets the Boolean value of this successor. */
1835
boolean getValue() { this = TBooleanSuccessor(result) }
1936
}
2037

38+
/**
39+
* A Boolean control flow successor.
40+
*
41+
* For example, this program fragment:
42+
*
43+
* ```java
44+
* if (x < 0)
45+
* return 0;
46+
* else
47+
* return 1;
48+
* ```
49+
*
50+
* has a control flow graph containing Boolean successors:
51+
*
52+
* ```
53+
* if
54+
* |
55+
* x < 0
56+
* / \
57+
* / \
58+
* / \
59+
* true false
60+
* | \
61+
* return 0 return 1
62+
* ```
63+
*/
2164
class BooleanSuccessor = ConditionalSuccessor;
2265

66+
/**
67+
* A nullness control flow successor. This is currently unused for Java.
68+
*/
2369
class NullnessSuccessor extends ConditionalSuccessor {
2470
NullnessSuccessor() { none() }
2571
}

0 commit comments

Comments
 (0)