diff options
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/common/options/OptionsParser.java | 102 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/common/options/OptionsParserImpl.java | 84 |
2 files changed, 107 insertions, 79 deletions
diff --git a/src/main/java/com/google/devtools/common/options/OptionsParser.java b/src/main/java/com/google/devtools/common/options/OptionsParser.java index 6ad7bb2185..54642a135d 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsParser.java +++ b/src/main/java/com/google/devtools/common/options/OptionsParser.java @@ -272,36 +272,64 @@ public class OptionsParser implements OptionsProvider { * by which other option. */ public static class OptionValueDescription { - private final String name; + private final OptionDefinition optionDefinition; + private final boolean isDefaultValue; @Nullable private final String originalValueString; @Nullable private final Object value; @Nullable private final OptionPriority priority; @Nullable private final String source; @Nullable private final String implicitDependant; @Nullable private final String expandedFrom; - private final boolean allowMultiple; - public OptionValueDescription( - String name, + private OptionValueDescription( + OptionDefinition optionDefinition, + boolean isDefaultValue, @Nullable String originalValueString, @Nullable Object value, @Nullable OptionPriority priority, @Nullable String source, @Nullable String implicitDependant, - @Nullable String expandedFrom, - boolean allowMultiple) { - this.name = name; + @Nullable String expandedFrom) { + this.optionDefinition = optionDefinition; + this.isDefaultValue = isDefaultValue; this.originalValueString = originalValueString; this.value = value; this.priority = priority; this.source = source; this.implicitDependant = implicitDependant; this.expandedFrom = expandedFrom; - this.allowMultiple = allowMultiple; + } + + public static OptionValueDescription newOptionValue( + OptionDefinition optionDefinition, + @Nullable String originalValueString, + @Nullable Object value, + @Nullable OptionPriority priority, + @Nullable String source, + @Nullable String implicitDependant, + @Nullable String expandedFrom) { + return new OptionValueDescription( + optionDefinition, + false, + originalValueString, + value, + priority, + source, + implicitDependant, + expandedFrom); + } + + public static OptionValueDescription newDefaultValue(OptionDefinition optionDefinition) { + return new OptionValueDescription( + optionDefinition, true, null, null, OptionPriority.DEFAULT, null, null, null); + } + + public OptionDefinition getOptionDefinition() { + return optionDefinition; } public String getName() { - return name; + return optionDefinition.getOptionName(); } public String getOriginalValueString() { @@ -312,7 +340,11 @@ public class OptionsParser implements OptionsProvider { // options use unchecked ListMultimaps due to limitations of Java generics. @SuppressWarnings({"unchecked", "rawtypes"}) public Object getValue() { - if (allowMultiple) { + if (isDefaultValue) { + // If no value was present, we want the default value for this option. + return optionDefinition.getDefaultValue(); + } + if (getAllowMultiple() && value != null) { // Sort the results by option priority and return them in a new list. // The generic type of the list is not known at runtime, so we can't // use it here. It was already checked in the constructor, so this is @@ -362,29 +394,38 @@ public class OptionsParser implements OptionsProvider { } public boolean getAllowMultiple() { - return allowMultiple; + return optionDefinition.allowsMultiple(); } @Override public String toString() { StringBuilder result = new StringBuilder(); - result.append("option '").append(name).append("' "); - result.append("set to '").append(value).append("' "); - result.append("with priority ").append(priority); - if (source != null) { - result.append(" and source '").append(source).append("'"); - } - if (implicitDependant != null) { - result.append(" implicitly by "); + result.append("option '").append(optionDefinition.getOptionName()).append("' "); + if (isDefaultValue) { + result + .append("set to its default value: '") + .append(optionDefinition.getUnparsedDefaultValue()) + .append("'"); + return result.toString(); + } else { + result.append("set to '").append(value).append("' "); + result.append("with priority ").append(priority); + if (source != null) { + result.append(" and source '").append(source).append("'"); + } + if (implicitDependant != null) { + result.append(" implicitly by "); + } + return result.toString(); } - return result.toString(); } // Need to suppress unchecked warnings, because the "multiple occurrence" // options use unchecked ListMultimaps due to limitations of Java generics. @SuppressWarnings({"unchecked", "rawtypes"}) void addValue(OptionPriority addedPriority, Object addedValue) { - Preconditions.checkState(allowMultiple); + Preconditions.checkState(optionDefinition.allowsMultiple()); + Preconditions.checkState(!isDefaultValue); ListMultimap optionValueList = (ListMultimap) value; if (addedValue instanceof List<?>) { optionValueList.putAll(addedPriority, (List<?>) addedValue); @@ -402,21 +443,18 @@ public class OptionsParser implements OptionsProvider { * <p>Note that the unparsed value and the source parameters can both be null. */ public static class UnparsedOptionValueDescription { - private final String name; private final OptionDefinition optionDefinition; - private final String unparsedValue; + @Nullable private final String unparsedValue; private final OptionPriority priority; - private final String source; + @Nullable private final String source; private final boolean explicit; public UnparsedOptionValueDescription( - String name, OptionDefinition optionDefinition, - String unparsedValue, + @Nullable String unparsedValue, OptionPriority priority, - String source, + @Nullable String source, boolean explicit) { - this.name = name; this.optionDefinition = optionDefinition; this.unparsedValue = unparsedValue; this.priority = priority; @@ -425,7 +463,7 @@ public class OptionsParser implements OptionsProvider { } public String getName() { - return name; + return optionDefinition.getOptionName(); } OptionDefinition getOptionDefinition() { return optionDefinition; @@ -460,10 +498,6 @@ public class OptionsParser implements OptionsProvider { return optionDefinition.getImplicitRequirements().length > 0; } - boolean allowMultiple() { - return optionDefinition.allowsMultiple(); - } - public String getUnparsedValue() { return unparsedValue; } @@ -483,7 +517,7 @@ public class OptionsParser implements OptionsProvider { @Override public String toString() { StringBuilder result = new StringBuilder(); - result.append("option '").append(name).append("' "); + result.append("option '").append(optionDefinition.getOptionName()).append("' "); result.append("set to '").append(unparsedValue).append("' "); result.append("with priority ").append(priority); if (source != null) { diff --git a/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java b/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java index 6ae8170bf3..026060653e 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java +++ b/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java @@ -169,21 +169,10 @@ class OptionsParserImpl { List<OptionValueDescription> asListOfEffectiveOptions() { List<OptionValueDescription> result = new ArrayList<>(); for (Map.Entry<String, OptionDefinition> mapEntry : optionsData.getAllOptionDefinitions()) { - String fieldName = mapEntry.getKey(); OptionDefinition optionDefinition = mapEntry.getValue(); OptionValueDescription entry = parsedValues.get(optionDefinition); if (entry == null) { - Object value = optionDefinition.getDefaultValue(); - result.add( - new OptionValueDescription( - fieldName, - /*originalValueString=*/ null, - value, - OptionPriority.DEFAULT, - /*source=*/ null, - /*implicitDependant=*/ null, - /*expandedFrom=*/ null, - false)); + result.add(OptionValueDescription.newDefaultValue(optionDefinition)); } else { result.add(entry); } @@ -262,21 +251,20 @@ class OptionsParserImpl { // Record the new value: parsedValues.put( optionDefinition, - new OptionValueDescription( - name, null, value, priority, source, implicitDependant, expandedFrom, false)); + OptionValueDescription.newOptionValue( + optionDefinition, null, value, priority, source, implicitDependant, expandedFrom)); } } else { parsedValues.put( optionDefinition, - new OptionValueDescription( - name, null, value, priority, source, implicitDependant, expandedFrom, false)); + OptionValueDescription.newOptionValue( + optionDefinition, null, value, priority, source, implicitDependant, expandedFrom)); maybeAddDeprecationWarning(optionDefinition); } } private void addListValue( OptionDefinition optionDefinition, - String originalName, Object value, OptionPriority priority, String source, @@ -285,15 +273,14 @@ class OptionsParserImpl { OptionValueDescription entry = parsedValues.get(optionDefinition); if (entry == null) { entry = - new OptionValueDescription( - originalName, + OptionValueDescription.newOptionValue( + optionDefinition, /* originalValueString */ null, ArrayListMultimap.create(), priority, source, implicitDependant, - expandedFrom, - true); + expandedFrom); parsedValues.put(optionDefinition, entry); maybeAddDeprecationWarning(optionDefinition); } @@ -348,15 +335,14 @@ class OptionsParserImpl { String unparsedFlagExpression = optionsIterator.next(); ParseOptionResult parseResult = parseOption(unparsedFlagExpression, optionsIterator); builder.add( - new OptionValueDescription( - parseResult.optionDefinition.getOptionName(), + OptionValueDescription.newOptionValue( + parseResult.optionDefinition, parseResult.value, /* value */ null, /* priority */ null, /* source */ null, implicitDependant, - /* expendedFrom */ null, - parseResult.optionDefinition.allowsMultiple())); + /* expendedFrom */ null)); } return builder.build(); } @@ -379,15 +365,14 @@ class OptionsParserImpl { String unparsedFlagExpression = optionsIterator.next(); ParseOptionResult parseResult = parseOption(unparsedFlagExpression, optionsIterator); builder.add( - new OptionValueDescription( - parseResult.optionDefinition.getOptionName(), + OptionValueDescription.newOptionValue( + parseResult.optionDefinition, parseResult.value, /* value */ null, /* priority */ null, /* source */ null, /* implicitDependant */ null, - flagName, - parseResult.optionDefinition.allowsMultiple())); + flagName)); } return builder.build(); } @@ -448,11 +433,10 @@ class OptionsParserImpl { OptionDefinition optionDefinition = parseOptionResult.optionDefinition; @Nullable String value = parseOptionResult.value; - final String originalName = optionDefinition.getOptionName(); - if (optionDefinition.isWrapperOption()) { if (value.startsWith("-")) { - String sourceMessage = "Unwrapped from wrapper option --" + originalName; + String sourceMessage = + "Unwrapped from wrapper option --" + optionDefinition.getOptionName(); List<String> unparsed = parse( priority, @@ -475,8 +459,14 @@ class OptionsParserImpl { continue; } else { - throw new OptionsParsingException("Invalid --" + originalName + " value format. " - + "You may have meant --" + originalName + "=--" + value); + throw new OptionsParsingException( + "Invalid --" + + optionDefinition.getOptionName() + + " value format. " + + "You may have meant --" + + optionDefinition.getOptionName() + + "=--" + + value); } } @@ -486,11 +476,10 @@ class OptionsParserImpl { // correctly canonicalize flags. UnparsedOptionValueDescription unparsedOptionValueDescription = new UnparsedOptionValueDescription( - originalName, optionDefinition, value, priority, - sourceFunction.apply(originalName), + sourceFunction.apply(optionDefinition.getOptionName()), expandedFrom == null); unparsedValues.add(unparsedOptionValueDescription); if (optionDefinition.allowsMultiple()) { @@ -506,14 +495,20 @@ class OptionsParserImpl { ImmutableList<String> expansion = optionsData.getEvaluatedExpansion(optionDefinition, value); - String sourceMessage = "expanded from option --" - + originalName - + " from " - + sourceFunction.apply(originalName); + String sourceMessage = + "expanded from option --" + + optionDefinition.getOptionName() + + " from " + + sourceFunction.apply(optionDefinition.getOptionName()); Function<Object, String> expansionSourceFunction = o -> sourceMessage; maybeAddDeprecationWarning(optionDefinition); List<String> unparsed = - parse(priority, expansionSourceFunction, null, originalName, expansion); + parse( + priority, + expansionSourceFunction, + null, + optionDefinition.getOptionName(), + expansion); if (!unparsed.isEmpty()) { // Throw an assertion, because this indicates an error in the code that specified the // expansion for the current option. @@ -540,10 +535,10 @@ class OptionsParserImpl { if (!optionDefinition.allowsMultiple()) { setValue( optionDefinition, - originalName, + optionDefinition.getOptionName(), convertedValue, priority, - sourceFunction.apply(originalName), + sourceFunction.apply(optionDefinition.getOptionName()), implicitDependent, expandedFrom); } else { @@ -554,10 +549,9 @@ class OptionsParserImpl { // for the field declaration. addListValue( optionDefinition, - originalName, convertedValue, priority, - sourceFunction.apply(originalName), + sourceFunction.apply(optionDefinition.getOptionName()), implicitDependent, expandedFrom); } |