Make `FragmentClassSet` a `Set`.

It already supports the required `Set` operations (`size()` and `contains()`). This allows it to be used more flexibly and efficiently.

PiperOrigin-RevId: 390375127
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 a98c1b7..b3e58e6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -1522,6 +1522,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//third_party:guava",
+        "//third_party:jsr305",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
index e8d658c..c9157c2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
@@ -24,18 +24,21 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Fingerprint;
+import java.util.AbstractSet;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.Iterator;
+import javax.annotation.concurrent.Immutable;
 
 /**
- * A wrapper class for an {@code ImmutableSortedSet<Class<? extends BuildConfiguration.Fragment>>}
- * object. Interning these objects allows us to do cheap reference equality checks when these sets
- * are in frequently used keys. For good measure, we also compute a fingerprint.
+ * A wrapper class for an {@code ImmutableSortedSet<Class<? extends Fragment>>}. Interning these
+ * objects allows us to do cheap reference equality checks when these sets are in frequently used
+ * keys. For good measure, we also compute a fingerprint.
  */
 @AutoCodec
-public final class FragmentClassSet implements Iterable<Class<? extends Fragment>> {
+@Immutable
+public final class FragmentClassSet extends AbstractSet<Class<? extends Fragment>> {
 
   /**
    * Sorts fragments by class name. This produces a stable order which, e.g., facilitates consistent
@@ -85,12 +88,14 @@
     this.hashCode = hashCode;
   }
 
+  @Override
   public int size() {
     return fragments.size();
   }
 
-  public boolean contains(Class<? extends Fragment> fragment) {
-    return fragments.contains(fragment);
+  @Override
+  public boolean contains(Object o) {
+    return fragments.contains(o);
   }
 
   /** Returns a set of fragment classes identical to this one but without the given fragment. */