Return a List from ChangeData.currentFilePaths()

Change-Id: I44049d27f4e62870997671f273b1e06d40b2656f
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
index b16ab2a..716a22b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.server.mail;
 
+import com.google.common.collect.Ordering;
 import com.google.gerrit.common.errors.EmailException;
 import com.google.gerrit.reviewdb.client.AccountProjectWatch.NotifyType;
 import com.google.gerrit.reviewdb.client.Change;
@@ -29,7 +30,6 @@
 import org.eclipse.jgit.lib.Repository;
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -62,9 +62,7 @@
         paths.add(p.getFileName());
       }
     }
-    String[] names = paths.toArray(new String[paths.size()]);
-    Arrays.sort(names);
-    changeData.setCurrentFilePaths(names);
+    changeData.setCurrentFilePaths(Ordering.natural().sortedCopy(paths));
   }
 
   @Override
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index bf3b605..d1fe4ec 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -51,7 +51,6 @@
 import java.io.IOException;
 import java.sql.Timestamp;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -141,7 +140,7 @@
   private ListMultimap<PatchSet.Id, PatchSetApproval> limitedApprovals;
   private ListMultimap<PatchSet.Id, PatchSetApproval> allApprovals;
   private List<PatchSetApproval> currentApprovals;
-  private String[] currentFiles;
+  private List<String> currentFiles;
   private Collection<PatchLineComment> comments;
   private Collection<TrackingId> trackingIds;
   private CurrentUser visibleTo;
@@ -180,11 +179,11 @@
     return limitedIds;
   }
 
-  public void setCurrentFilePaths(String[] filePaths) {
+  public void setCurrentFilePaths(List<String> filePaths) {
     currentFiles = filePaths;
   }
 
-  public String[] currentFilePaths(Provider<ReviewDb> db,
+  public List<String> currentFilePaths(Provider<ReviewDb> db,
       PatchListCache cache) throws OrmException {
     if (currentFiles == null) {
       Change c = change(db);
@@ -200,7 +199,7 @@
       try {
         p = cache.get(c, ps);
       } catch (PatchListNotAvailableException e) {
-        currentFiles = new String[0];
+        currentFiles = Collections.emptyList();
         return currentFiles;
       }
 
@@ -226,8 +225,8 @@
             break;
         }
       }
-      currentFiles = r.toArray(new String[r.size()]);
-      Arrays.sort(currentFiles);
+      Collections.sort(r);
+      currentFiles = Collections.unmodifiableList(r);
     }
     return currentFiles;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexFilePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexFilePredicate.java
index 11856e4..e642860 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexFilePredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RegexFilePredicate.java
@@ -24,7 +24,8 @@
 import dk.brics.automaton.RegExp;
 import dk.brics.automaton.RunAutomaton;
 
-import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 class RegexFilePredicate extends OperatorPredicate<ChangeData> {
   private final Provider<ReviewDb> db;
@@ -67,7 +68,7 @@
 
   @Override
   public boolean match(ChangeData object) throws OrmException {
-    String[] files = object.currentFilePaths(db, cache);
+    List<String> files = object.currentFilePaths(db, cache);
     if (files != null) {
       int begin, end;
 
@@ -76,7 +77,7 @@
         end = find(files, prefixEnd);
       } else {
         begin = 0;
-        end = files.length;
+        end = files.size();
       }
 
       if (prefixOnly) {
@@ -84,7 +85,7 @@
       }
 
       while (begin < end) {
-        if (pattern.run(files[begin++])) {
+        if (pattern.run(files.get(begin++))) {
           return true;
         }
       }
@@ -100,8 +101,8 @@
     }
   }
 
-  private static int find(String[] files, String p) {
-    int r = Arrays.binarySearch(files, p);
+  private static int find(List<String> files, String p) {
+    int r = Collections.binarySearch(files, p);
     return r < 0 ? -(r + 1) : r;
   }
 
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/RegexFilePredicateTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/RegexFilePredicateTest.java
index ce7b25c..1500272 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/RegexFilePredicateTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/RegexFilePredicateTest.java
@@ -76,7 +76,7 @@
   private static ChangeData change(String... files) {
     Arrays.sort(files);
     ChangeData cd = new ChangeData(new Change.Id(1));
-    cd.setCurrentFilePaths(files);
+    cd.setCurrentFilePaths(Arrays.asList(files));
     return cd;
   }
 }