CheckerQuery: Make returned lists immutable

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I988573b2ed5364f5f2c844517db25e0d597fa9d3
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++) {