Merge "CheckerQuery: Make returned lists immutable"
diff --git a/java/com/google/gerrit/plugins/checks/CheckerQuery.java b/java/com/google/gerrit/plugins/checks/CheckerQuery.java
index d15c5a7..332cf63 100644
--- a/java/com/google/gerrit/plugins/checks/CheckerQuery.java
+++ b/java/com/google/gerrit/plugins/checks/CheckerQuery.java
@@ -15,6 +15,7 @@
package com.google.gerrit.plugins.checks;
import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.gerrit.index.query.QueryParser.AND;
import static com.google.gerrit.index.query.QueryParser.DEFAULT_FIELD;
import static com.google.gerrit.index.query.QueryParser.FIELD_NAME;
@@ -50,7 +51,6 @@
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
import org.antlr.runtime.tree.Tree;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -237,7 +237,7 @@
return query;
}
- public List<List<ChangeData>> queryMatchingChanges(List<Checker> checkers)
+ public ImmutableList<ImmutableList<ChangeData>> queryMatchingChanges(List<Checker> checkers)
throws ConfigInvalidException {
try {
@@ -255,13 +255,13 @@
}
}
- public List<ChangeData> queryMatchingChanges(Checker checker)
+ public ImmutableList<ChangeData> queryMatchingChanges(Checker checker)
throws ConfigInvalidException, StorageException {
return queryMatchingChanges(
checker.getUuid(), checker.getRepository(), checker.getQuery(), qp -> {});
}
- private List<ChangeData> queryMatchingChanges(
+ private ImmutableList<ChangeData> queryMatchingChanges(
CheckerUuid checkerUuid,
Project.NameKey repository,
Optional<String> optionalQuery,
@@ -318,13 +318,13 @@
}
// TODO(ekempin): Retrying the query should be done by ChangeQueryProcessor.
- private List<ChangeData> executeIndexQueryWithRetry(
+ private ImmutableList<ChangeData> executeIndexQueryWithRetry(
Consumer<ChangeQueryProcessor> queryProcessorSetup, Predicate<ChangeData> predicate)
throws StorageException, QueryParseException {
return executeIndexQueryWithRetry(queryProcessorSetup, ImmutableList.of(predicate)).get(0);
}
- private List<List<ChangeData>> executeIndexQueryWithRetry(
+ private ImmutableList<ImmutableList<ChangeData>> executeIndexQueryWithRetry(
Consumer<ChangeQueryProcessor> queryProcessorSetup, List<Predicate<ChangeData>> predicateList)
throws StorageException, QueryParseException {
try {
@@ -335,7 +335,7 @@
queryProcessorSetup.accept(qp);
return qp.query(predicateList).stream()
.map(predicate -> predicate.entities())
- .collect(Collectors.toList());
+ .collect(toImmutableList());
},
StorageException.class::isInstance);
} catch (Exception e) {
diff --git a/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java b/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
index 98f59cf..e213a50 100644
--- a/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
+++ b/java/com/google/gerrit/plugins/checks/api/QueryPendingChecks.java
@@ -109,7 +109,8 @@
if (!checker.isPresent() || checker.get().isDisabled()) {
return Response.ok(ImmutableList.of());
}
- List<ChangeData> changes = checkerQueryProvider.get().queryMatchingChanges(checker.get());
+ ImmutableList<ChangeData> changes =
+ checkerQueryProvider.get().queryMatchingChanges(checker.get());
return Response.ok(getPendingChecksOfChecker(checker.get(), predicate, changes));
}
// Scheme query
@@ -120,7 +121,7 @@
new IllegalStateException(
String.format("no checker scheme predicate found: %s", finalPredicate)));
ImmutableList<Checker> checkersOfScheme = checkers.listCheckers(scheme);
- List<List<ChangeData>> changes =
+ ImmutableList<ImmutableList<ChangeData>> changes =
checkerQueryProvider.get().queryMatchingChanges(checkersOfScheme);
List<PendingChecksInfo> pendingChecks = new ArrayList<>();
for (int i = 0; i < changes.size(); i++) {