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, Predicate.Any

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 Details

    • Predicate

      public Predicate()
  • Method Details

    • 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.
    • not

      public static <T> Predicate<T> not(Predicate<T> that)
      Invert the passed node.
    • getChildren

      public List<Predicate<T>> getChildren()
      Get the children of this predicate, if any.
    • getChildCount

      public int getChildCount()
      Same as getChildren().size()
    • getChild

      public Predicate<T> getChild(int i)
      Same as getChildren().get(i)
    • 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.
    • asMatchable

      public Matchable<T> asMatchable()
    • estimateCost

      public int estimateCost()
      Returns a cost estimate to run this predicate, higher figures cost more.
    • hashCode

      public abstract int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public abstract boolean equals(Object other)
      Overrides:
      equals in class Object