Fix NullPointerException when cloning from slave

VisibleRefFilter is using secondary index to evaluate the visibility of
refs which cannot work in slave mode since there is no secondary index.

SearchingChangeCacheImpl is the class used by VisibleRefFilter and it's
nullable so bind it to null in slave mode to force VisibleRefFilter to
not rely on that cache.

Change-Id: I5af65f0992b317b4bbd3ce050f3a7907aad713a4
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
index 7ee3cde..3ff6451 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
@@ -350,7 +350,7 @@
     modules.add(new DiffExecutorModule());
     modules.add(new MimeUtil2Module());
     modules.add(cfgInjector.getInstance(GerritGlobalModule.class));
-    modules.add(new SearchingChangeCacheImpl.Module());
+    modules.add(new SearchingChangeCacheImpl.Module(slave));
     modules.add(new InternalAccountDirectory.Module());
     modules.add(new DefaultCacheFactory.Module());
     if (emailModule != null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
index 63a49a1..54ec249 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
@@ -36,6 +36,7 @@
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
 import com.google.inject.name.Named;
+import com.google.inject.util.Providers;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,17 +53,32 @@
   static final String ID_CACHE = "changes";
 
   public static class Module extends CacheModule {
+    private final boolean slave;
+
+    public Module() {
+      this(false);
+    }
+
+    public Module(boolean slave) {
+      this.slave = slave;
+    }
+
     @Override
     protected void configure() {
-      cache(ID_CACHE,
-          Project.NameKey.class,
-          new TypeLiteral<List<CachedChange>>() {})
-        .maximumWeight(0)
-        .loader(Loader.class);
+      if (slave) {
+        bind(SearchingChangeCacheImpl.class)
+            .toProvider(Providers.<SearchingChangeCacheImpl> of(null));
+      } else {
+        cache(ID_CACHE,
+            Project.NameKey.class,
+            new TypeLiteral<List<CachedChange>>() {})
+          .maximumWeight(0)
+          .loader(Loader.class);
 
-      bind(SearchingChangeCacheImpl.class);
-      DynamicSet.bind(binder(), GitReferenceUpdatedListener.class)
-          .to(SearchingChangeCacheImpl.class);
+        bind(SearchingChangeCacheImpl.class);
+        DynamicSet.bind(binder(), GitReferenceUpdatedListener.class)
+            .to(SearchingChangeCacheImpl.class);
+      }
     }
   }