code: private Set<Predicate> copyPredicatesSet() {
      Set<Predicate> predicatesCopy = Sets.newLinkedHashSet();
      for (Predicate predicate : this.predicates) {
        Predicate copyPredicate = new Predicate();
        copyPredicate.setField(predicate.getField());
        copyPredicate.setOperator(predicate.getOperator());
        copyPredicate.setValues(Arrays.copyOf(predicate.getValues(), predicate.getValues().length));
        predicatesCopy.add(copyPredicate);
      }
      return predicatesCopy;
    }
docs: Copies the whole set of predicates, by creating new instances of each one in the given set.
  
  @return the new set of Predicate objects with different instance for each of the Predicate