diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java index 1cfab202b9..8554ecf6fc 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/group/GroupQueryProcessor.java @@ -17,21 +17,30 @@ package com.google.gerrit.server.query.group; import static com.google.common.base.Preconditions.checkState; import static com.google.gerrit.server.query.group.GroupQueryBuilder.FIELD_LIMIT; -import com.google.gerrit.reviewdb.client.AccountGroup; +import com.google.gerrit.index.IndexConfig; +import com.google.gerrit.index.query.AndSource; +import com.google.gerrit.index.query.IndexPredicate; +import com.google.gerrit.index.query.Predicate; +import com.google.gerrit.index.query.QueryProcessor; +import com.google.gerrit.metrics.MetricMaker; import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.account.AccountLimits; import com.google.gerrit.server.account.GroupControl; -import com.google.gerrit.server.index.IndexConfig; -import com.google.gerrit.server.index.IndexPredicate; +import com.google.gerrit.server.group.InternalGroup; import com.google.gerrit.server.index.group.GroupIndexCollection; import com.google.gerrit.server.index.group.GroupIndexRewriter; import com.google.gerrit.server.index.group.GroupSchemaDefinitions; -import com.google.gerrit.server.query.AndSource; -import com.google.gerrit.server.query.Predicate; -import com.google.gerrit.server.query.QueryProcessor; import com.google.inject.Inject; import com.google.inject.Provider; -public class GroupQueryProcessor extends QueryProcessor<AccountGroup> { +/** + * Query processor for the group index. + * + * <p>Instances are one-time-use. Other singleton classes should inject a Provider rather than + * holding on to a single instance. + */ +public class GroupQueryProcessor extends QueryProcessor<InternalGroup> { + private final Provider<CurrentUser> userProvider; private final GroupControl.GenericFactory groupControlFactory; static { @@ -44,24 +53,26 @@ public class GroupQueryProcessor extends QueryProcessor<AccountGroup> { @Inject protected GroupQueryProcessor( Provider<CurrentUser> userProvider, - Metrics metrics, + AccountLimits.Factory limitsFactory, + MetricMaker metricMaker, IndexConfig indexConfig, GroupIndexCollection indexes, GroupIndexRewriter rewriter, GroupControl.GenericFactory groupControlFactory) { super( - userProvider, - metrics, + metricMaker, GroupSchemaDefinitions.INSTANCE, indexConfig, indexes, rewriter, - FIELD_LIMIT); + FIELD_LIMIT, + () -> limitsFactory.create(userProvider.get()).getQueryLimit()); + this.userProvider = userProvider; this.groupControlFactory = groupControlFactory; } @Override - protected Predicate<AccountGroup> enforceVisibility(Predicate<AccountGroup> pred) { + protected Predicate<InternalGroup> enforceVisibility(Predicate<InternalGroup> pred) { return new AndSource<>( pred, new GroupIsVisibleToPredicate(groupControlFactory, userProvider.get()), start); } |