diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/config')
3 files changed, 21 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java index 68bf177ce5..175588cc6d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java @@ -40,6 +40,7 @@ import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.syntax.Printer; import java.util.List; +import java.util.Optional; /** * The implementation of the config_feature_flag rule for defining custom flags for Android rules. @@ -115,14 +116,17 @@ public class ConfigFeatureFlag implements RuleConfiguredTargetFactory { + Printer.repr(duplicates.build())); } - String defaultValue = ruleContext.attributes().get("default_value", STRING); - if (!isValidValue.apply(defaultValue)) { + Optional<String> defaultValue = + ruleContext.attributes().isAttributeValueExplicitlySpecified("default_value") + ? Optional.of(ruleContext.attributes().get("default_value", STRING)) + : Optional.empty(); + if (defaultValue.isPresent() && !isValidValue.apply(defaultValue.get())) { ruleContext.attributeError( "default_value", "must be one of " + Printer.repr(values.asList()) + ", but was " - + Printer.repr(defaultValue)); + + Printer.repr(defaultValue.get())); } if (ruleContext.hasErrors()) { @@ -131,22 +135,29 @@ public class ConfigFeatureFlag implements RuleConfiguredTargetFactory { return null; } - String value = + Optional<String> configuredValue = ruleContext .getFragment(ConfigFeatureFlagConfiguration.class) - .getFeatureFlagValue(ruleContext.getOwner()) - .or(defaultValue); + .getFeatureFlagValue(ruleContext.getOwner()); - if (!isValidValue.apply(value)) { + if (configuredValue.isPresent() && !isValidValue.apply(configuredValue.get())) { // TODO(mstaib): When configurationError is available, use that instead. ruleContext.ruleError( "value must be one of " + Printer.repr(values.asList()) + ", but was " - + Printer.repr(value)); + + Printer.repr(configuredValue.get())); return null; } + if (!configuredValue.isPresent() && !defaultValue.isPresent()) { + // TODO(mstaib): When configurationError is available, use that instead. + ruleContext.ruleError("flag has no default and must be set, but was not set"); + return null; + } + + String value = configuredValue.orElseGet(defaultValue::get); + ConfigFeatureFlagProvider provider = ConfigFeatureFlagProvider.create(value, isValidValue); return new RuleConfiguredTargetBuilder(ruleContext) diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java index 9f34de2937..be93cb9353 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.config; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMap; import com.google.common.hash.Hasher; @@ -32,6 +31,7 @@ import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; import java.util.Map; +import java.util.Optional; import java.util.SortedMap; import javax.annotation.Nullable; @@ -141,7 +141,7 @@ public final class ConfigFeatureFlagConfiguration extends BuildConfiguration.Fra * ArtifactOwner for a rule, call {@code ruleContext.getOwner()}. */ public Optional<String> getFeatureFlagValue(ArtifactOwner owner) { - return Optional.fromNullable(flagValues.get(owner.getLabel())); + return Optional.ofNullable(flagValues.get(owner.getLabel())); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java index 7ba3611dad..fb8c973973 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java @@ -411,7 +411,6 @@ platform( .nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON)) .add( attr("default_value", STRING) - .mandatory() .nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON)) .add(ConfigFeatureFlag.getWhitelistAttribute(env)) .build(); |