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