Use AutoValue for `ConfigMatchingProvider` PiperOrigin-RevId: 364372452
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD index edbf472..a85fba4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD +++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -1619,6 +1619,7 @@ "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", + "//third_party:auto_value", "//third_party:guava", ], )
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigMatchingProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigMatchingProvider.java index c0b7fa6..114319d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigMatchingProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigMatchingProvider.java
@@ -14,6 +14,8 @@ package com.google.devtools.build.lib.analysis.config; +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; @@ -21,7 +23,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import java.util.Map; -import java.util.Set; /** * A "configuration target" that asserts whether or not it matches the configuration it's bound to. @@ -32,12 +33,8 @@ */ @Immutable @AutoCodec -public final class ConfigMatchingProvider implements TransitiveInfoProvider { - private final Label label; - private final ImmutableMultimap<String, String> settingsMap; - private final Map<Label, String> flagSettingsMap; - private final ImmutableSet<String> requiredFragmentOptions; - private final boolean matches; +@AutoValue +public abstract class ConfigMatchingProvider implements TransitiveInfoProvider { /** * @param label the build label corresponding to this matcher @@ -50,47 +47,41 @@ * configured target */ @AutoCodec.Instantiator - public ConfigMatchingProvider( + public static ConfigMatchingProvider create( Label label, ImmutableMultimap<String, String> settingsMap, - Map<Label, String> flagSettingsMap, + ImmutableMap<Label, String> flagSettingsMap, ImmutableSet<String> requiredFragmentOptions, boolean matches) { - this.label = label; - this.settingsMap = settingsMap; - this.flagSettingsMap = flagSettingsMap; - this.requiredFragmentOptions = requiredFragmentOptions; - this.matches = matches; + return new AutoValue_ConfigMatchingProvider( + label, settingsMap, flagSettingsMap, requiredFragmentOptions, matches); } + /** The target's label. */ + public abstract Label label(); + + abstract ImmutableMultimap<String, String> settingsMap(); + + abstract ImmutableMap<Label, String> flagSettingsMap(); + + public abstract ImmutableSet<String> requiredFragmentOptions(); + /** - * The target's label. + * Whether or not the configuration criteria defined by this target match its actual + * configuration. */ - public Label label() { - return label; - } - - /** - * Whether or not the configuration criteria defined by this target match - * its actual configuration. - */ - public boolean matches() { - return matches; - } - - public ImmutableSet<String> getRequiredFragmentOptions() { - return requiredFragmentOptions; - } + public abstract boolean matches(); /** * Returns true if this matcher's conditions are a proper superset of another matcher's * conditions, i.e. if this matcher is a specialization of the other one. */ public boolean refines(ConfigMatchingProvider other) { - Set<Map.Entry<String, String>> settings = ImmutableSet.copyOf(settingsMap.entries()); - Set<Map.Entry<String, String>> otherSettings = ImmutableSet.copyOf(other.settingsMap.entries()); - Set<Map.Entry<Label, String>> flagSettings = flagSettingsMap.entrySet(); - Set<Map.Entry<Label, String>> otherFlagSettings = other.flagSettingsMap.entrySet(); + ImmutableSet<Map.Entry<String, String>> settings = ImmutableSet.copyOf(settingsMap().entries()); + ImmutableSet<Map.Entry<String, String>> otherSettings = + ImmutableSet.copyOf(other.settingsMap().entries()); + ImmutableSet<Map.Entry<Label, String>> flagSettings = flagSettingsMap().entrySet(); + ImmutableSet<Map.Entry<Label, String>> otherFlagSettings = other.flagSettingsMap().entrySet(); if (!settings.containsAll(otherSettings)) { // not a superset @@ -113,7 +104,7 @@ /** Format this provider as its label. */ @Override - public String toString() { - return label.toString(); + public final String toString() { + return label().toString(); } }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/RequiredFragmentsUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/config/RequiredFragmentsUtil.java index 7ea8ca9..bba0d64 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/RequiredFragmentsUtil.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/RequiredFragmentsUtil.java
@@ -169,7 +169,7 @@ fragment -> requiredFragments.add(ClassName.getSimpleNameWithOuter(fragment))); // Fragments required by attached select()s. configConditions.forEach( - configCondition -> requiredFragments.addAll(configCondition.getRequiredFragmentOptions())); + configCondition -> requiredFragments.addAll(configCondition.requiredFragmentOptions())); // We consider build settings (which are both targets and configuration) to require themselves: if (buildSettingLabel.isPresent()) { requiredFragments.add(buildSettingLabel.get().toString());
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java index 86c98de..72ab626 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -77,7 +77,7 @@ * method. */ public ConfigMatchingProvider configMatchingProvider(PlatformInfo platformInfo) { - return new ConfigMatchingProvider( + return ConfigMatchingProvider.create( label, ImmutableMultimap.of(), ImmutableMap.of(),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java index 91ba44e..e8c0c2f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
@@ -129,7 +129,7 @@ } ConfigMatchingProvider configMatcher = - new ConfigMatchingProvider( + ConfigMatchingProvider.create( ruleContext.getLabel(), nativeFlagSettings, userDefinedFlags.getSpecifiedFlagValues(), @@ -144,7 +144,7 @@ .addProvider(FilesToRunProvider.class, FilesToRunProvider.EMPTY) .addProvider(LicensesProviderImpl.EMPTY) .addProvider(ConfigMatchingProvider.class, configMatcher) - .addRequiredConfigFragments(configMatcher.getRequiredFragmentOptions()) + .addRequiredConfigFragments(configMatcher.requiredFragmentOptions()) .build(); }