aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar mstaib <mstaib@google.com>2017-06-07 14:31:47 -0400
committerGravatar John Cater <jcater@google.com>2017-06-08 10:52:33 -0400
commit28327710a72fb76214d2e4152373723d08506846 (patch)
tree9b18f517a6b9aea8290704909ef8d3d643730f30 /src/main/java/com/google/devtools/build/lib/rules
parent3e90a89530f4eb69b0440c1cca3778eb1df7a37b (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/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java37
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);
+ }
}