DefaultAdvertiseRefsHook: Avoid Repository#getAllRefs

Change-Id: I8987d674b8fdfbab163fa50088845aaf1a11b103
diff --git a/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java b/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
index f255ea2..a8594e7 100644
--- a/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
+++ b/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
@@ -14,13 +14,14 @@
 
 package com.google.gerrit.server.git;
 
+import com.google.common.collect.ImmutableList;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook;
@@ -44,19 +45,10 @@
   protected Map<String, Ref> getAdvertisedRefs(Repository repo, RevWalk revWalk)
       throws ServiceMayNotContinueException {
     try {
-      Map<String, Ref> refs;
-      List<String> prefixes = opts.prefixes();
-      if (prefixes.isEmpty() || prefixes.get(0).isEmpty()) {
-        refs = repo.getAllRefs();
-      } else {
-        refs = new HashMap<>();
-        for (String prefix : prefixes) {
-          for (Ref ref : repo.getRefDatabase().getRefsByPrefix(prefix)) {
-            refs.put(ref.getName(), ref);
-          }
-        }
-      }
-      return perm.filter(refs, repo, opts);
+      List<String> prefixes =
+          !opts.prefixes().isEmpty() ? opts.prefixes() : ImmutableList.of(RefDatabase.ALL);
+      return perm.filter(
+          repo.getRefDatabase().getRefsByPrefix(prefixes.toArray(new String[0])), repo, opts);
     } catch (IOException | PermissionBackendException e) {
       ServiceMayNotContinueException ex = new ServiceMayNotContinueException();
       ex.initCause(e);