Merge remote-tracking branch 'aosp/upstream-master' into desugar

* aosp/upstream-master:
  Fix expansion option output formatting in html output
  Categorize query options.

Test: m -j checkbuild
Change-Id: Id22a2d82c97f438047eb6ca94ac945d62656363a
diff --git a/java/com/google/devtools/common/options/OptionDocumentationCategory.java b/java/com/google/devtools/common/options/OptionDocumentationCategory.java
index 2354abf..e288b13 100644
--- a/java/com/google/devtools/common/options/OptionDocumentationCategory.java
+++ b/java/com/google/devtools/common/options/OptionDocumentationCategory.java
@@ -90,4 +90,7 @@
    * based on execution-environment requirements.
    */
   TOOLCHAIN,
+
+  /** This option relates to query output and semantics. */
+  QUERY,
 }
diff --git a/java/com/google/devtools/common/options/OptionsUsage.java b/java/com/google/devtools/common/options/OptionsUsage.java
index 61829e2..8e36c4a 100644
--- a/java/com/google/devtools/common/options/OptionsUsage.java
+++ b/java/com/google/devtools/common/options/OptionsUsage.java
@@ -201,22 +201,29 @@
       usage.append(paragraphFill(escaper.escape(annotation.help()), /*indent=*/ 0, /*width=*/ 80));
       usage.append('\n');
     }
-    ImmutableList<String> expansion = getExpansionIfKnown(optionField, optionsData);
-    if (expansion == null) {
-      usage.append("    Expands to unknown options.<br>\n");
-    } else if (!expansion.isEmpty()) {
+
+    if (!optionsData.getExpansionDataForField(optionField).isEmpty()) {
+      // If this is an expansion option, list the expansion if known, or at least specify that we
+      // don't know.
       usage.append("<br/>\n");
-      StringBuilder expandsMsg = new StringBuilder("Expands to:<br/>\n");
-      for (String exp : expansion) {
-        // TODO(ulfjack): Can we link to the expanded flags here?
-        expandsMsg
-            .append("&nbsp;&nbsp;<code>")
-            .append(escaper.escape(exp))
-            .append("</code><br/>\n");
+      ImmutableList<String> expansion = getExpansionIfKnown(optionField, optionsData);
+      StringBuilder expandsMsg;
+      if (expansion == null) {
+        expandsMsg = new StringBuilder("Expands to unknown options.<br/>\n");
+      } else {
+        Preconditions.checkArgument(!expansion.isEmpty());
+        expandsMsg = new StringBuilder("Expands to:<br/>\n");
+        for (String exp : expansion) {
+          // TODO(ulfjack): Can we link to the expanded flags here?
+          expandsMsg
+              .append("&nbsp;&nbsp;<code>")
+              .append(escaper.escape(exp))
+              .append("</code><br/>\n");
+        }
       }
       usage.append(expandsMsg.toString());
-      usage.append('\n');
     }
+
     usage.append("</dd>\n");
   }