public abstract class BooleanCondition
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
static BooleanCondition |
FALSE |
static BooleanCondition |
TRUE |
Modifier and Type | Method and Description |
---|---|
static BooleanCondition |
and(boolean a,
BooleanCondition b) |
static BooleanCondition |
and(BooleanCondition a,
BooleanCondition b) |
abstract <T> java.lang.Iterable<T> |
children(java.lang.Class<T> type)
Recursively collect all children of type
type . |
protected abstract boolean |
evaluatesTrivially()
Check if the condition evaluates to either
true or false without providing
additional information to the evaluation tree, e.g. |
static BooleanCondition |
not(BooleanCondition bc) |
static BooleanCondition |
or(boolean a,
BooleanCondition b) |
static BooleanCondition |
or(BooleanCondition a,
BooleanCondition b) |
abstract BooleanCondition |
reduce()
Reduce evaluation tree by cutting off branches that evaluate trivially and replacing them with
a leave note corresponding to the value the branch evaluated to.
|
abstract boolean |
value() |
static BooleanCondition |
valueOf(boolean a) |
public static final BooleanCondition TRUE
public static final BooleanCondition FALSE
public static BooleanCondition valueOf(boolean a)
public static BooleanCondition and(BooleanCondition a, BooleanCondition b)
public static BooleanCondition and(boolean a, BooleanCondition b)
public static BooleanCondition or(BooleanCondition a, BooleanCondition b)
public static BooleanCondition or(boolean a, BooleanCondition b)
public static BooleanCondition not(BooleanCondition bc)
public abstract boolean value()
public abstract <T> java.lang.Iterable<T> children(java.lang.Class<T> type)
type
.type
- implementation type of the conditions to collect and return.type
.public abstract BooleanCondition reduce()
Example 1 (T=True, F=False, C=non-trivial check):
OR
/ \ => T
C T
Example 2 (cuts off a not-trivial check):
AND
/ \ => F
C F
Example 3:
AND
/ \ => F
T F
There is no guarantee that the resulting tree is minimal. The only guarantee made is that branches that evaluate trivially will be cut off and replaced by primitive values.
protected abstract boolean evaluatesTrivially()
true
or false
without providing
additional information to the evaluation tree, e.g. through checks to a remote service such as
PermissionBackend
.
In this case, the tree can be reduced to skip all non-trivial checks resulting in a performance gain.