code: public Query<S> query(String filter) throws FetchException {
          synchronized (mStringToQuery) {
              Query<S> query = mStringToQuery.get(filter);
              if (query == null) {
                  if (filter == null) {
                      throw new IllegalArgumentException("Query filter must not be null");
                  }
                  query = query(Filter.filterFor(mType, filter), null);
                  mStringToQuery.put(filter, query);
              }
              return query;
          }
      }
docs: Returns a new or cached query for the given filter.
  
  @throws IllegalArgumentException if filter is null