Cleanup of expansion option naming

Options that expand to other options are expansion options and the options they expand to have values that were expansions. This can be a bit confusing. Removes the isExpansion() call that is somewhat ambiguous, and forces option users to explicitly check the option definition for this information.

Also provide a parallel boolean function for implicit requirements, so that we stop querying for the length of the implicit requirement all over the place.

RELNOTES: None.
PiperOrigin-RevId: 169461566
GitOrigin-RevId: 4acb36c048a620abd7a0f5dff274851bd6dd9c28
Change-Id: I75068dceefa40f56201d3b6817d551741137085d
diff --git a/java/com/google/devtools/common/options/OptionDefinition.java b/java/com/google/devtools/common/options/OptionDefinition.java
index 38ea4bc..40da044 100644
--- a/java/com/google/devtools/common/options/OptionDefinition.java
+++ b/java/com/google/devtools/common/options/OptionDefinition.java
@@ -185,6 +185,11 @@
     return (getOptionExpansion().length > 0 || usesExpansionFunction());
   }
 
+  /** Returns whether the arg is an expansion option. */
+  public boolean hasImplicitRequirements() {
+    return (getImplicitRequirements().length > 0);
+  }
+
   /**
    * Returns whether the arg is an expansion option defined by an expansion function (and not a
    * constant expansion value).
diff --git a/java/com/google/devtools/common/options/OptionValueDescription.java b/java/com/google/devtools/common/options/OptionValueDescription.java
index ca709dc..8222aee 100644
--- a/java/com/google/devtools/common/options/OptionValueDescription.java
+++ b/java/com/google/devtools/common/options/OptionValueDescription.java
@@ -69,7 +69,7 @@
       return new RepeatableOptionValueDescription(option);
     } else if (option.isExpansionOption()) {
       return new ExpansionOptionValueDescription(option);
-    } else if (option.getImplicitRequirements().length > 0) {
+    } else if (option.hasImplicitRequirements()) {
       return new OptionWithImplicitRequirementsValueDescription(option);
     } else if (option.isWrapperOption()) {
       return new WrapperOptionValueDescription(option);
@@ -331,7 +331,7 @@
 
     private OptionWithImplicitRequirementsValueDescription(OptionDefinition optionDefinition) {
       super(optionDefinition);
-      if (optionDefinition.getImplicitRequirements().length == 0) {
+      if (!optionDefinition.hasImplicitRequirements()) {
         throw new ConstructionException(
             "Options without implicit requirements can't be tracked using "
                 + "OptionWithImplicitRequirementsValueDescription");
diff --git a/java/com/google/devtools/common/options/OptionsParserImpl.java b/java/com/google/devtools/common/options/OptionsParserImpl.java
index 94568be..d3a3751 100644
--- a/java/com/google/devtools/common/options/OptionsParserImpl.java
+++ b/java/com/google/devtools/common/options/OptionsParserImpl.java
@@ -146,10 +146,10 @@
         // the other options alphabetically.
         .sorted(
             (v1, v2) -> {
-              if (v1.isImplicitRequirement()) {
-                return v2.isImplicitRequirement() ? 0 : 1;
+              if (v1.getOptionDefinition().hasImplicitRequirements()) {
+                return v2.getOptionDefinition().hasImplicitRequirements() ? 0 : 1;
               }
-              if (v2.isImplicitRequirement()) {
+              if (v2.getOptionDefinition().hasImplicitRequirements()) {
                 return -1;
               }
               return v1.getOptionDefinition()
@@ -157,7 +157,7 @@
                   .compareTo(v2.getOptionDefinition().getOptionName());
             })
         // Ignore expansion options.
-        .filter(value -> !value.isExpansion())
+        .filter(value -> !value.getOptionDefinition().isExpansionOption())
         .map(
             value ->
                 "--"
@@ -422,7 +422,7 @@
       }
 
       // Collect any implicit requirements.
-      if (optionDefinition.getImplicitRequirements().length > 0) {
+      if (optionDefinition.hasImplicitRequirements()) {
         implicitRequirements.put(
             optionDefinition, Arrays.asList(optionDefinition.getImplicitRequirements()));
       }
diff --git a/java/com/google/devtools/common/options/OptionsUsage.java b/java/com/google/devtools/common/options/OptionsUsage.java
index f481734..68a460e 100644
--- a/java/com/google/devtools/common/options/OptionsUsage.java
+++ b/java/com/google/devtools/common/options/OptionsUsage.java
@@ -146,7 +146,7 @@
       usage.append(paragraphFill(expandsMsg.toString(), /*indent=*/ 6, /*width=*/ 80));
       usage.append('\n');
     }
-    if (optionDefinition.getImplicitRequirements().length > 0) {
+    if (optionDefinition.hasImplicitRequirements()) {
       StringBuilder requiredMsg = new StringBuilder("Using this option will also add: ");
       for (String req : optionDefinition.getImplicitRequirements()) {
         requiredMsg.append(req).append(" ");
diff --git a/java/com/google/devtools/common/options/ParsedOptionDescription.java b/java/com/google/devtools/common/options/ParsedOptionDescription.java
index 1c897c3..036ac41 100644
--- a/java/com/google/devtools/common/options/ParsedOptionDescription.java
+++ b/java/com/google/devtools/common/options/ParsedOptionDescription.java
@@ -82,14 +82,6 @@
     return tags.contains(OptionMetadataTag.HIDDEN) || tags.contains(OptionMetadataTag.INTERNAL);
   }
 
-  boolean isExpansion() {
-    return optionDefinition.isExpansionOption();
-  }
-
-  boolean isImplicitRequirement() {
-    return optionDefinition.getImplicitRequirements().length > 0;
-  }
-
   public String getUnconvertedValue() {
     return unconvertedValue;
   }
@@ -128,4 +120,5 @@
     }
     return result.toString();
   }
+
 }