code: public static <S extends Storable> Filter<S> filterFor(Class<S> type, String expression) {
          SoftValuedCache<Object, Filter<S>> filterCache = getFilterCache(type);
          synchronized (filterCache) {
              Filter<S> filter = filterCache.get(expression);
              if (filter == null) {
                  filter = new FilterParser<S>(type, expression).parseRoot();
                  filterCache.put(expression, filter);
              }
              return filter;
          }
      }
docs: Returns a cached filter instance that operates on the given type and
  filter expression.
  
  @param type type of Storable that query is made against
  @param expression query filter expression to parse
  @return canonical Filter instance
  @throws IllegalArgumentException if type or filter expression is null
  @throws MalformedFilterException if filter expression is malformed