Fill in missing intermediate label values automatically

Change-Id: I81e6052ee22fea91267d0f428fe008c5cb13b132
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelType.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelType.java
index ae21a4e..9afa804 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelType.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelType.java
@@ -75,6 +75,32 @@
     return abbr.toString();
   }
 
+  private static List<LabelValue> sortValues(List<LabelValue> values) {
+    values = new ArrayList<LabelValue>(values);
+    if (values.size() <= 1) {
+      return Collections.unmodifiableList(values);
+    }
+    Collections.sort(values, new Comparator<LabelValue>() {
+      public int compare(LabelValue o1, LabelValue o2) {
+        return o1.getValue() - o2.getValue();
+      }
+    });
+    short min = values.get(0).getValue();
+    short max = values.get(values.size() - 1).getValue();
+    short v = min;
+    short i = 0;
+    List<LabelValue> result = new ArrayList<LabelValue>(max - min + 1);
+    // Fill in any missing values with empty text.
+    while (i < values.size()) {
+      while (v < values.get(i).getValue()) {
+        result.add(new LabelValue(v++, ""));
+      }
+      v++;
+      result.add(values.get(i++));
+    }
+    return Collections.unmodifiableList(result);
+  }
+
   protected String name;
   protected String id;
 
@@ -96,12 +122,7 @@
   public LabelType(String name, List<LabelValue> valueList) {
     this.name = checkName(name);
     canOverride = true;
-    values = new ArrayList<LabelValue>(valueList);
-    Collections.sort(values, new Comparator<LabelValue>() {
-      public int compare(LabelValue o1, LabelValue o2) {
-        return o1.getValue() - o2.getValue();
-      }
-    });
+    values = sortValues(valueList);
 
     abbreviatedName = defaultAbbreviation(name);
     functionName = "MaxWithBlock";
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelValue.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelValue.java
index c349376..cd29e05 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelValue.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/LabelValue.java
@@ -49,8 +49,11 @@
   }
 
   public String format() {
-    return new StringBuilder().append(formatValue())
-        .append(' ').append(text).toString();
+    StringBuilder sb = new StringBuilder(formatValue());
+    if (!text.isEmpty()) {
+      sb.append(' ').append(text);
+    }
+    return sb.toString();
   }
 
   @Override