diff options
author | 2017-06-07 14:31:47 -0400 | |
---|---|---|
committer | 2017-06-08 10:52:33 -0400 | |
commit | 28327710a72fb76214d2e4152373723d08506846 (patch) | |
tree | 9b18f517a6b9aea8290704909ef8d3d643730f30 /src/main/java | |
parent | 3e90a89530f4eb69b0440c1cca3778eb1df7a37b (diff) |
Fix ConfigFeatureFlagTransitionFactory to obey PatchTransition equality.
This requirement was added to PatchTransition in commit e6392cd380fce14d719890c78d5eb2657e8a6cfc.
This also adds tests for ConfigFeatureFlagTransitionFactory's other
behaviors.
RELNOTES: None.
PiperOrigin-RevId: 158294134
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java index 8f7ab87954..757ca9e2a5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java @@ -36,13 +36,18 @@ public class ConfigFeatureFlagTransitionFactory implements RuleTransitionFactory /** Transition which resets the set of flag-value pairs to the map it was constructed with. */ private static final class ConfigFeatureFlagValuesTransition implements PatchTransition { private final ImmutableSortedMap<Label, String> flagValues; + private final int cachedHashCode; public ConfigFeatureFlagValuesTransition(Map<Label, String> flagValues) { this.flagValues = ImmutableSortedMap.copyOf(flagValues); + this.cachedHashCode = this.flagValues.hashCode(); } @Override public BuildOptions apply(BuildOptions options) { + if (!options.contains(ConfigFeatureFlagConfiguration.Options.class)) { + return options; + } BuildOptions result = options.clone(); result.get(ConfigFeatureFlagConfiguration.Options.class).replaceFlagValues(flagValues); return result; @@ -52,6 +57,22 @@ public class ConfigFeatureFlagTransitionFactory implements RuleTransitionFactory public boolean defaultsToSelf() { throw new UnsupportedOperationException("supported in dynamic mode only"); } + + @Override + public boolean equals(Object other) { + return other instanceof ConfigFeatureFlagValuesTransition + && this.flagValues.equals(((ConfigFeatureFlagValuesTransition) other).flagValues); + } + + @Override + public int hashCode() { + return cachedHashCode; + } + + @Override + public String toString() { + return String.format("ConfigFeatureFlagValuesTransition{flagValues=%s}", flagValues); + } } private final String attributeName; @@ -72,4 +93,20 @@ public class ConfigFeatureFlagTransitionFactory implements RuleTransitionFactory return new ConfigFeatureFlagValuesTransition( NonconfigurableAttributeMapper.of(rule).get(attributeName, LABEL_KEYED_STRING_DICT)); } + + @Override + public boolean equals(Object other) { + return other instanceof ConfigFeatureFlagTransitionFactory + && this.attributeName.equals(((ConfigFeatureFlagTransitionFactory) other).attributeName); + } + + @Override + public int hashCode() { + return attributeName.hashCode(); + } + + @Override + public String toString() { + return String.format("ConfigFeatureFlagTransitionFactory{attributeName=%s}", attributeName); + } } |