Skip to content

Commit 719bbe4

Browse files
committed
Java: Extend qldoc.
1 parent 2ddffc4 commit 719bbe4

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

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

Lines changed: 47 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,63 @@ private newtype TSuccessorType =
610
TBooleanSuccessor(Boolean branch) or
711
TExceptionSuccessor()
812

13+
/** The type of a control flow successor. */
914
class SuccessorType extends TSuccessorType {
15+
/** Gets a textual representation of successor type. */
1016
string toString() { result = "SuccessorType" }
1117
}
1218

19+
/** A normal control flow successor. */
1320
class NormalSuccessor extends SuccessorType, TNormalSuccessor { }
1421

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

29+
/**
30+
* A conditional control flow successor.
31+
*
32+
* This currently only includes boolean successors (`BooleanSuccessor`).
33+
*/
1734
class ConditionalSuccessor extends SuccessorType, TBooleanSuccessor {
35+
/** Gets the Boolean value of this successor. */
1836
boolean getValue() { this = TBooleanSuccessor(result) }
1937
}
2038

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

67+
/**
68+
* A nullness control flow successor. This is currently unused for Java.
69+
*/
2370
class NullnessSuccessor extends ConditionalSuccessor {
2471
NullnessSuccessor() { none() }
2572
}

0 commit comments

Comments
 (0)