org.parboiled.common.Predicates Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2007 Google Inc., adapted in 2010 by Mathias Doenitz
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.parboiled.common;
import java.util.Collection;
public final class Predicates {
private Predicates() {}
/**
* Returns a predicate that always evaluates to {@code true}.
*
* @return a predicate
*/
@SuppressWarnings("unchecked")
public static Predicate alwaysTrue() {
return (Predicate) AlwaysTruePredicate.INSTANCE;
}
/**
* Returns a predicate that always evaluates to {@code false}.
*
* @return a predicate
*/
@SuppressWarnings("unchecked")
public static Predicate alwaysFalse() {
return (Predicate) AlwaysFalsePredicate.INSTANCE;
}
/**
* Returns a predicate that evaluates to {@code true} if the object reference
* being tested is null.
*
* @return a predicate
*/
@SuppressWarnings("unchecked")
public static Predicate isNull() {
return (Predicate) IsNullPredicate.INSTANCE;
}
/**
* Returns a predicate that evaluates to {@code true} if the object reference
* being tested is not null.
*
* @return a predicate
*/
@SuppressWarnings("unchecked")
public static Predicate notNull() {
return (Predicate) NotNullPredicate.INSTANCE;
}
/**
* Returns a predicate that evaluates to {@code true} if the given predicate
* evaluates to {@code false}.
*
* @param predicate the inner predicate
* @return a predicate
*/
public static Predicate not(Predicate predicate) {
return new NotPredicate(predicate);
}
/**
* Returns a predicate that evaluates to {@code true} if each of its
* components evaluates to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as a false
* predicate is found. It defensively copies the iterable passed in, so future
* changes to it won't alter the behavior of this predicate. If {@code
* components} is empty, the returned predicate will always evaluate to {@code
* true}.
*
* @param components the components
* @return a predicate
*/
public static Predicate and(Collection extends Predicate super T>> components) {
return new AndPredicate(components);
}
/**
* Returns a predicate that evaluates to {@code true} if each of its
* components evaluates to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as a false
* predicate is found. It defensively copies the array passed in, so future
* changes to it won't alter the behavior of this predicate. If {@code
* components} is empty, the returned predicate will always evaluate to {@code
* true}.
*
* @param components the components
* @return a predicate
*/
public static Predicate and(Predicate super T>... components) {
return new AndPredicate(ImmutableList.of(components));
}
/**
* Returns a predicate that evaluates to {@code true} if both of its
* components evaluate to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as a false
* predicate is found.
*
* @param first the first
* @param second the second
* @return a predicate
*/
public static Predicate and(Predicate super T> first, Predicate super T> second) {
Preconditions.checkArgNotNull(first, "first");
Preconditions.checkArgNotNull(second, "second");
return new AndPredicate(ImmutableList.>of(first, second));
}
/**
* Returns a predicate that evaluates to {@code true} if any one of its
* components evaluates to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as as soon as a
* true predicate is found. It defensively copies the iterable passed in, so
* future changes to it won't alter the behavior of this predicate. If {@code
* components} is empty, the returned predicate will always evaluate to {@code
* false}.
*
* @param components the components
* @return a predicate
*/
public static Predicate or(Collection extends Predicate super T>> components) {
return new OrPredicate(components);
}
/**
* Returns a predicate that evaluates to {@code true} if any one of its
* components evaluates to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as as soon as a
* true predicate is found. It defensively copies the array passed in, so
* future changes to it won't alter the behavior of this predicate. If {@code
* components} is empty, the returned predicate will always evaluate to {@code
* false}.
*
* @param components the components
* @return a predicate
*/
public static Predicate or(Predicate super T>... components) {
return new OrPredicate(ImmutableList.of(components));
}
/**
* Returns a predicate that evaluates to {@code true} if either of its
* components evaluates to {@code true}. The components are evaluated in
* order, and evaluation will be "short-circuited" as soon as as soon as a
* true predicate is found.
*
* @param first the first
* @param second the second
* @return a predicate
*/
public static Predicate or(Predicate super T> first, Predicate super T> second) {
Preconditions.checkArgNotNull(first, "first");
Preconditions.checkArgNotNull(second, "second");
return new OrPredicate(ImmutableList.>of(first, second));
}
/**
* Returns a predicate that evaluates to {@code true} if the object being
* tested {@code equals()} the given target or both are null.
*
* @param target the target
* @return a predicate
*/
public static Predicate equalTo(T target) {
return (target == null) ? Predicates.isNull() : new IsEqualToPredicate(target);
}
/**
* Returns a predicate that evaluates to {@code true} if the object being
* tested is an instance of the given class. If the object being tested
* is {@code null} this predicate evaluates to {@code false}.
*
* @param clazz the clazz
* @return a predicate
*/
public static Predicate