ChangeQueryBuilder: Expose schema as a method on Arguments

Rather than constantly calling a static helper to extract it from the
IndexCollection, just store the relevant search ChangeIndex and expose
its schema with an instance method.

Change-Id: Ie6e57f66b6b80df0cab4260c2a01749ae5e41448
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
index a0a7a3c..e64b53f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
@@ -15,7 +15,6 @@
 package com.google.gerrit.server.query.change;
 
 import static com.google.gerrit.server.query.change.ChangeData.asChanges;
-import static com.google.gerrit.server.query.change.InternalChangeQuery.schema;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
@@ -46,6 +45,7 @@
 import com.google.gerrit.server.index.ChangeIndex;
 import com.google.gerrit.server.index.FieldDef;
 import com.google.gerrit.server.index.IndexCollection;
+import com.google.gerrit.server.index.Schema;
 import com.google.gerrit.server.patch.PatchListCache;
 import com.google.gerrit.server.project.ChangeControl;
 import com.google.gerrit.server.project.ListChildProjects;
@@ -151,11 +151,11 @@
     final GitRepositoryManager repoManager;
     final ProjectCache projectCache;
     final Provider<ListChildProjects> listChildProjects;
-    final IndexCollection indexes;
     final SubmitStrategyFactory submitStrategyFactory;
     final ConflictsCache conflictsCache;
     final TrackingFooters trackingFooters;
     final boolean allowsDrafts;
+    final ChangeIndex index;
 
     private final Provider<CurrentUser> self;
 
@@ -188,9 +188,10 @@
           capabilityControlFactory, changeControlGenericFactory,
           changeDataFactory, fillArgs, plcUtil, accountResolver, groupBackend,
           allProjectsName, allUsersName, patchListCache, repoManager,
-          projectCache, listChildProjects, indexes, submitStrategyFactory,
+          projectCache, listChildProjects, submitStrategyFactory,
           conflictsCache, trackingFooters,
-          cfg == null ? true : cfg.getBoolean("change", "allowDrafts", true));
+          cfg == null ? true : cfg.getBoolean("change", "allowDrafts", true),
+          indexes != null ? indexes.getSearchIndex() : null);
     }
 
     private Arguments(
@@ -212,11 +213,11 @@
         GitRepositoryManager repoManager,
         ProjectCache projectCache,
         Provider<ListChildProjects> listChildProjects,
-        IndexCollection indexes,
         SubmitStrategyFactory submitStrategyFactory,
         ConflictsCache conflictsCache,
         TrackingFooters trackingFooters,
-        boolean allowsDrafts) {
+        boolean allowsDrafts,
+        ChangeIndex index) {
      this.db = db;
      this.queryProvider = queryProvider;
      this.rewriter = rewriter;
@@ -235,11 +236,11 @@
      this.repoManager = repoManager;
      this.projectCache = projectCache;
      this.listChildProjects = listChildProjects;
-     this.indexes = indexes;
      this.submitStrategyFactory = submitStrategyFactory;
      this.conflictsCache = conflictsCache;
      this.trackingFooters = trackingFooters;
      this.allowsDrafts = allowsDrafts;
+     this.index = index;
     }
 
     Arguments asUser(CurrentUser otherUser) {
@@ -248,8 +249,8 @@
           capabilityControlFactory, changeControlGenericFactory,
           changeDataFactory, fillArgs, plcUtil, accountResolver, groupBackend,
           allProjectsName, allUsersName, patchListCache, repoManager,
-          projectCache, listChildProjects, indexes, submitStrategyFactory,
-          conflictsCache, trackingFooters, allowsDrafts);
+          projectCache, listChildProjects, submitStrategyFactory,
+          conflictsCache, trackingFooters, allowsDrafts, index);
     }
 
     Arguments asUser(Account.Id otherId) {
@@ -284,6 +285,10 @@
         throw new QueryParseException(NotSignedInException.MESSAGE, e);
       }
     }
+
+    Schema<ChangeData> getSchema() {
+      return index != null ? index.getSchema() : null;
+    }
   }
 
   private final Arguments args;
@@ -351,8 +356,7 @@
 
   @Operator
   public Predicate<ChangeData> comment(String value) {
-    ChangeIndex index = args.indexes.getSearchIndex();
-    return new CommentPredicate(index, value);
+    return new CommentPredicate(args.index, value);
   }
 
   @Operator
@@ -408,7 +412,7 @@
     }
 
     if ("mergeable".equalsIgnoreCase(value)) {
-      return new IsMergeablePredicate(schema(args.indexes), args.fillArgs);
+      return new IsMergeablePredicate(args.getSchema(), args.fillArgs);
     }
 
     try {
@@ -471,9 +475,9 @@
   @Operator
   public Predicate<ChangeData> topic(String name) {
     if (name.startsWith("^")) {
-      return new RegexTopicPredicate(schema(args.indexes), name);
+      return new RegexTopicPredicate(args.getSchema(), name);
     }
-    return new TopicPredicate(schema(args.indexes), name);
+    return new TopicPredicate(args.getSchema(), name);
   }
 
   @Operator
@@ -563,8 +567,7 @@
 
   @Operator
   public Predicate<ChangeData> message(String text) {
-    ChangeIndex index = args.indexes.getSearchIndex();
-    return new MessagePredicate(index, text);
+    return new MessagePredicate(args.index, text);
   }
 
   @Operator
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java
index e5fc51d..a21c590 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/EqualsFilePredicate.java
@@ -24,8 +24,7 @@
   static Predicate<ChangeData> create(Arguments args, String value) {
     Predicate<ChangeData> eqPath =
         new EqualsPathPredicate(ChangeQueryBuilder.FIELD_FILE, value);
-    if (!args.indexes.getSearchIndex().getSchema().getFields().containsKey(
-        ChangeField.FILE_PART.getName())) {
+    if (!args.getSchema().hasField(ChangeField.FILE_PART)) {
       return eqPath;
     }
     return Predicate.or(eqPath, new EqualsFilePredicate(value));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
index 7212f9c..15b1d8c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/InternalChangeQuery.java
@@ -165,7 +165,7 @@
     }
   }
 
-  static Schema<ChangeData> schema(@Nullable IndexCollection indexes) {
+  private static Schema<ChangeData> schema(@Nullable IndexCollection indexes) {
     ChangeIndex index = indexes != null ? indexes.getSearchIndex() : null;
     return index != null ? index.getSchema() : null;
   }