Class Predicate<T>
- java.lang.Object
-
- com.google.gerrit.index.query.Predicate<T>
-
- Type Parameters:
T
- type of object the predicate can evaluate in memory.
- Direct Known Subclasses:
AndPredicate
,ApprovalPredicate
,IndexedQuery
,NotPredicate
,OperatorPredicate
,OrPredicate
public abstract class Predicate<T> extends Object
An abstract predicate tree for any form of query.Implementations should be immutable, such that the meaning of a predicate never changes once constructed. They should ensure their immutable promise by defensively copying any structures which might be modified externally, but was passed into the object's constructor.
However, implementations may retain non-thread-safe caches internally, to speed up evaluation operations within the context of one thread's evaluation of the predicate. As a result, callers should assume predicates are not thread-safe, but that two predicate graphs produce the same results given the same inputs if they are
equals(Object)
.Predicates should support deep inspection whenever possible, so that generic algorithms can be written to operate against them. Predicates which contain other predicates should override
getChildren()
to return the list of children nested within the predicate.
-
-
Constructor Summary
Constructors Constructor Description Predicate()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static <T> Predicate<T>
and(Predicate<T>... that)
Combine the passed predicates into a single AND node.static <T> Predicate<T>
and(Collection<? extends Predicate<T>> that)
Combine the passed predicates into a single AND node.static <T> Predicate<T>
any()
A predicate that matches any input, always, with no cost.Matchable<T>
asMatchable()
abstract Predicate<T>
copy(Collection<? extends Predicate<T>> children)
Create a copy of this predicate, with new children.abstract boolean
equals(Object other)
int
estimateCost()
Returns a cost estimate to run this predicate, higher figures cost more.Predicate<T>
getChild(int i)
Same asgetChildren().get(i)
int
getChildCount()
Same asgetChildren().size()
List<Predicate<T>>
getChildren()
Get the children of this predicate, if any.List<Predicate<T>>
getFlattenedPredicateList()
Returns a list of this predicate and all its descendants.int
getLeafCount()
Get the number of leaf terms in this predicate.String
getPredicateString()
abstract int
hashCode()
boolean
isLeaf()
boolean
isMatchable()
static <T> Predicate<T>
not(Predicate<T> that)
Invert the passed node.static <T> Predicate<T>
or(Predicate<T>... that)
Combine the passed predicates into a single OR node.static <T> Predicate<T>
or(Collection<? extends Predicate<T>> that)
Combine the passed predicates into a single OR node.boolean
supportedForQueries()
Whether this predicate can be used in search queries.
-
-
-
Method Detail
-
getPredicateString
public String getPredicateString()
-
isLeaf
public boolean isLeaf()
-
any
public static <T> Predicate<T> any()
A predicate that matches any input, always, with no cost.
-
and
@SafeVarargs public static <T> Predicate<T> and(Predicate<T>... that)
Combine the passed predicates into a single AND node.
-
and
public static <T> Predicate<T> and(Collection<? extends Predicate<T>> that)
Combine the passed predicates into a single AND node.
-
or
@SafeVarargs public static <T> Predicate<T> or(Predicate<T>... that)
Combine the passed predicates into a single OR node.
-
or
public static <T> Predicate<T> or(Collection<? extends Predicate<T>> that)
Combine the passed predicates into a single OR node.
-
getChildCount
public int getChildCount()
Same asgetChildren().size()
-
getLeafCount
public int getLeafCount()
Get the number of leaf terms in this predicate.
-
getFlattenedPredicateList
public List<Predicate<T>> getFlattenedPredicateList()
Returns a list of this predicate and all its descendants.
-
copy
public abstract Predicate<T> copy(Collection<? extends Predicate<T>> children)
Create a copy of this predicate, with new children.
-
isMatchable
public boolean isMatchable()
-
supportedForQueries
public boolean supportedForQueries()
Whether this predicate can be used in search queries.
-
estimateCost
public int estimateCost()
Returns a cost estimate to run this predicate, higher figures cost more.
-
-