@Override
 public Collection<CriteriaImpl> findPredicates(BaseLanguageObject obj) {
   if (obj != null) {
     PreOrderNavigator.doVisit(obj, this);
   }
   return getPredicates();
 }
 public static final List<SubqueryContainer<?>> getValueIteratorProviders(
     Collection<? extends LanguageObject> languageObjects) {
   if (languageObjects == null || languageObjects.isEmpty()) {
     return Collections.emptyList();
   }
   List<SubqueryContainer<?>> result = new LinkedList<SubqueryContainer<?>>();
   ValueIteratorProviderCollectorVisitor visitor =
       new ValueIteratorProviderCollectorVisitor(result);
   for (LanguageObject obj : languageObjects) {
     PreOrderNavigator.doVisit(obj, visitor);
   }
   return result;
 }
 public static final void getValueIteratorProviders(
     LanguageObject obj, List<SubqueryContainer<?>> valueIteratorProviders) {
   ValueIteratorProviderCollectorVisitor visitor =
       new ValueIteratorProviderCollectorVisitor(valueIteratorProviders);
   PreOrderNavigator.doVisit(obj, visitor);
 }
 /**
  * Helper to quickly get the ValueIteratorProvider instances from obj
  *
  * @param obj Language object
  * @return java.util.ArrayList of found ValueIteratorProvider
  */
 public static final List<SubqueryContainer<?>> getValueIteratorProviders(LanguageObject obj) {
   ValueIteratorProviderCollectorVisitor visitor = new ValueIteratorProviderCollectorVisitor();
   PreOrderNavigator.doVisit(obj, visitor);
   return visitor.getValueIteratorProviders();
 }