diff options
Diffstat (limited to 'java/com/google/devtools/common/options/OptionsParser.java')
-rw-r--r-- | java/com/google/devtools/common/options/OptionsParser.java | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/java/com/google/devtools/common/options/OptionsParser.java b/java/com/google/devtools/common/options/OptionsParser.java index fb7161c..6f1d7b6 100644 --- a/java/com/google/devtools/common/options/OptionsParser.java +++ b/java/com/google/devtools/common/options/OptionsParser.java @@ -33,7 +33,6 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; @@ -299,7 +298,7 @@ public class OptionsParser implements OptionsProvider { getOptionsSortedByCategory(); ImmutableMap<OptionDocumentationCategory, String> optionCategoryDescriptions = OptionFilterDescriptions.getOptionCategoriesEnumDescription(productName); - for (Entry<OptionDocumentationCategory, List<OptionDefinition>> e : + for (Map.Entry<OptionDocumentationCategory, List<OptionDefinition>> e : optionsByCategory.entrySet()) { String categoryDescription = optionCategoryDescriptions.get(e.getKey()); List<OptionDefinition> categorizedOptionList = e.getValue(); @@ -463,7 +462,7 @@ public class OptionsParser implements OptionsProvider { ImmutableMap<OptionDocumentationCategory, String> optionCategoryDescriptions = OptionFilterDescriptions.getOptionCategoriesEnumDescription(productName); - for (Entry<OptionDocumentationCategory, List<OptionDefinition>> e : + for (Map.Entry<OptionDocumentationCategory, List<OptionDefinition>> e : optionsByCategory.entrySet()) { desc.append("<dl>"); String categoryDescription = optionCategoryDescriptions.get(e.getKey()); @@ -619,13 +618,26 @@ public class OptionsParser implements OptionsProvider { } } - public void parseOptionsFixedAtSpecificPriority( - OptionPriority priority, String source, List<String> args) throws OptionsParsingException { - Preconditions.checkNotNull(priority, "Priority not specified for arglist " + args); + /** + * Parses the args at the priority of the provided option. This is useful for after-the-fact + * expansion. + * + * @param optionToExpand the option that is being "expanded" after the fact. The provided args + * will have the same priority as this option. + * @param source a description of where the expansion arguments came from. + * @param args the arguments to parse as the expansion. Order matters, as the value of a flag may + * be in the following argument. + */ + public void parseArgsAsExpansionOfOption( + ParsedOptionDescription optionToExpand, String source, List<String> args) + throws OptionsParsingException { + Preconditions.checkNotNull( + optionToExpand, "Option for expansion not specified for arglist " + args); Preconditions.checkArgument( - priority.getPriorityCategory() != OptionPriority.PriorityCategory.DEFAULT, + optionToExpand.getPriority().getPriorityCategory() + != OptionPriority.PriorityCategory.DEFAULT, "Priority cannot be default, which was specified for arglist " + args); - residue.addAll(impl.parseOptionsFixedAtSpecificPriority(priority, o -> source, args)); + residue.addAll(impl.parseArgsAsExpansionOfOption(optionToExpand, o -> source, args)); if (!allowResidue && !residue.isEmpty()) { String errorMsg = "Unrecognized arguments: " + Joiner.on(' ').join(residue); throw new OptionsParsingException(errorMsg); |