private <T extends ParseObject> ConstraintMatcher<T> createMatcher(ParseUser user, final String operator, final Object constraint, final String key, final KeyConstraints allKeyConstraints) { switch (operator) { case "$inQuery": return createInQueryMatcher(user, constraint, key); case "$notInQuery": return createNotInQueryMatcher(user, constraint, key); case "$select": return createSelectMatcher(user, constraint, key); case "$dontSelect": return createDontSelectMatcher(user, constraint, key); default: /* * All of the other operators we know about are stateless, so return a simple matcher. */ return new ConstraintMatcher<T>(user) { @Override public Task<Boolean> matchesAsync(T object, ParseSQLiteDatabase db) { try { Object value = getValue(object, key); return Task.forResult(matchesStatelessConstraint(operator, constraint, value, allKeyConstraints)); } catch (ParseException e) { return Task.forError(e); } } }; } }