ConstraintMatcher<T> matcher = createMatcher(user, constraints); matchers.add(matcher);
/** * Returns a ConstraintMatcher that return true iff the object matches the given query's * constraints. This takes in a SQLiteDatabase connection because SQLite is finicky about nesting * connections, so we want to reuse them whenever possible. * * @param state The query. * @param user The user we are testing ACL access for. * @param <T> Subclass of ParseObject. * @return A new instance of ConstraintMatcher. */ /* package */ <T extends ParseObject> ConstraintMatcher<T> createMatcher( ParseQuery.State<T> state, final ParseUser user) { final boolean ignoreACLs = state.ignoreACLs(); final ConstraintMatcher<T> constraintMatcher = createMatcher(user, state.constraints()); return new ConstraintMatcher<T>(user) { @Override public Task<Boolean> matchesAsync(T object, ParseSQLiteDatabase db) { if (!ignoreACLs && !hasReadAccess(user, object)) { return Task.forResult(false); } return constraintMatcher.matchesAsync(object, db); } }; }
final Object keyConstraintValue = keyConstraints.get(operator); ConstraintMatcher<T> matcher = createMatcher(user, operator, keyConstraintValue, key, keyConstraints); matchers.add(matcher);
private static <T extends ParseObject> boolean matches( OfflineQueryLogic logic, ParseQuery.State<T> query, T object, ParseUser user) throws ParseException { Task<Boolean> task = logic.createMatcher(query, user).matchesAsync(object, null); return ParseTaskUtils.wait(task); }