Submit: Fix NPE

isMergeable which is called both at submit time as well as when generating
the description of the submit button, may return a (Boolean)null, which
currently throws a NPE when auto unboxed into a boolean type.

Change-Id: I38875bab4fe63f8574f9e80542e5acb16e430f1c
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
index f7fab69..35fcb2e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
@@ -101,6 +101,8 @@
       "Other hidden changes in this topic are not ready";
   private static final String CLICK_FAILURE_OTHER_TOOLTIP =
       "Clicking the button would fail for other changes in the topic";
+  private static final String CLICK_FAILURE_TOOLTIP =
+      "Clicking the button would fail.";
 
   public enum Status {
     SUBMITTED, MERGED
@@ -265,7 +267,12 @@
         // TODO(dborowitz): This is ugly; consider providing a way to not read
         // stored fields from the index in the first place.
         c.setMergeable(null);
-        if (!c.isMergeable()) {
+        Boolean mergeable = c.isMergeable();
+        if (mergeable == null) {
+          log.error("Ephemeral error checking if change is submittable");
+          return CLICK_FAILURE_TOOLTIP;
+        }
+        if (!mergeable) {
           return CLICK_FAILURE_OTHER_TOOLTIP;
         }
         checkSubmitRule(c, c.currentPatchSet(), false);
@@ -306,7 +313,7 @@
         .setVisible(false);
     }
 
-    boolean enabled;
+    Boolean enabled;
     try {
       enabled = cd.isMergeable();
     } catch (OrmException e) {
@@ -336,7 +343,7 @@
           .setTitle(Strings.emptyToNull(
               submitTopicTooltip.replace(params)))
           .setVisible(true)
-          .setEnabled(enabled);
+          .setEnabled(Boolean.TRUE.equals(enabled));
       }
     } else {
       RevId revId = resource.getPatchSet().getRevision();
@@ -348,7 +355,7 @@
         .setLabel(label)
         .setTitle(Strings.emptyToNull(titlePattern.replace(params)))
         .setVisible(true)
-        .setEnabled(enabled);
+        .setEnabled(Boolean.TRUE.equals(enabled));
     }
   }