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();
}