in java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java [647:759]
public Predicate<ChangeData> is(String value) throws QueryParseException {
if ("starred".equalsIgnoreCase(value)) {
return starredBySelf();
}
if ("watched".equalsIgnoreCase(value)) {
return new IsWatchedByPredicate(args);
}
if ("visible".equalsIgnoreCase(value)) {
return isVisible();
}
if ("reviewed".equalsIgnoreCase(value)) {
return ChangePredicates.unreviewed();
}
if ("owner".equalsIgnoreCase(value)) {
return ChangePredicates.owner(self());
}
if ("uploader".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.UPLOADER, "is:uploader");
return ChangePredicates.uploader(self());
}
if ("reviewer".equalsIgnoreCase(value)) {
return Predicate.and(
Predicate.not(new BooleanPredicate(ChangeField.WIP)), ReviewerPredicate.reviewer(self()));
}
if ("cc".equalsIgnoreCase(value)) {
return ReviewerPredicate.cc(self());
}
if ("mergeable".equalsIgnoreCase(value)) {
if (!args.indexMergeable) {
throw new QueryParseException("'is:mergeable' operator is not supported by server");
}
return new BooleanPredicate(ChangeField.MERGEABLE);
}
if ("merge".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.MERGE, "is:merge");
return new BooleanPredicate(ChangeField.MERGE);
}
if ("private".equalsIgnoreCase(value)) {
return new BooleanPredicate(ChangeField.PRIVATE);
}
if ("attention".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.ATTENTION_SET_USERS, "is:attention");
return new IsAttentionPredicate();
}
if ("assigned".equalsIgnoreCase(value)) {
return Predicate.not(ChangePredicates.assignee(Account.id(ChangeField.NO_ASSIGNEE)));
}
if ("unassigned".equalsIgnoreCase(value)) {
return ChangePredicates.assignee(Account.id(ChangeField.NO_ASSIGNEE));
}
if ("pure-revert".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.IS_PURE_REVERT, "is:pure-revert");
return ChangePredicates.pureRevert("1");
}
if ("submittable".equalsIgnoreCase(value)) {
if (!args.index.getSchema().hasField(ChangeField.IS_SUBMITTABLE)) {
// SubmittablePredicate will match if *any* of the submit records are OK,
// but we need to check that they're *all* OK, so check that none of the
// submit records match any of the negative cases. To avoid checking yet
// more negative cases for CLOSED and FORCED, instead make sure at least
// one submit record is OK.
return Predicate.and(
new SubmittablePredicate(SubmitRecord.Status.OK),
Predicate.not(new SubmittablePredicate(SubmitRecord.Status.NOT_READY)),
Predicate.not(new SubmittablePredicate(SubmitRecord.Status.RULE_ERROR)));
}
checkFieldAvailable(ChangeField.IS_SUBMITTABLE, "is:submittable");
return new IsSubmittablePredicate();
}
if ("ignored".equalsIgnoreCase(value)) {
return ignoredBySelf();
}
if ("started".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.STARTED, "is:started");
return new BooleanPredicate(ChangeField.STARTED);
}
if ("wip".equalsIgnoreCase(value)) {
return new BooleanPredicate(ChangeField.WIP);
}
if ("cherrypick".equalsIgnoreCase(value)) {
checkFieldAvailable(ChangeField.CHERRY_PICK, "is:cherrypick");
return new BooleanPredicate(ChangeField.CHERRY_PICK);
}
// for plugins the value will be operandName_pluginName
List<String> names = PLUGIN_SPLITTER.splitToList(value);
if (names.size() == 2) {
ChangeIsOperandFactory op = args.isOperands.get(names.get(1), names.get(0));
if (op != null) {
return op.create(this);
}
}
return status(value);
}