Add a toString() method for FeatureSet

Change-Id: Ie15939d50410c7a9a4490a29e332be7d9bd5f0af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101073
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
index 53b4c7d..2cfdf21 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
@@ -231,6 +231,9 @@
   FeatureSet restrictToVersion(Version version) =>
       ExperimentStatus._(restrictEnableFlagsToVersion(_enableFlags, version));
 
+  @override
+  String toString() => experimentStatusToString(_enableFlags);
+
   /// Returns a list of strings suitable for passing to
   /// [ExperimentStatus.fromStrings].
   List<String> toStringList() => experimentStatusToStringList(this);
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart b/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
index ebf565c..81a437b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments_impl.dart
@@ -46,6 +46,17 @@
   return flags;
 }
 
+/// Pretty-prints the given set of enable flags as a set of feature names.
+String experimentStatusToString(List<bool> enableFlags) {
+  var featuresInSet = <String>[];
+  for (var feature in _knownFeatures.values) {
+    if (enableFlags[feature.index]) {
+      featuresInSet.add(feature.enableString);
+    }
+  }
+  return 'FeatureSet{${featuresInSet.join(', ')}}';
+}
+
 /// Converts the flags in [status] to a list of strings suitable for
 /// passing to [_decodeFlags].
 List<String> experimentStatusToStringList(ExperimentStatus status) {
@@ -264,7 +275,8 @@
         assert(index != null),
         assert(isEnabledByDefault
             ? firstSupportedVersion != null
-            : firstSupportedVersion == null);
+            : firstSupportedVersion == null),
+        assert(enableString != null);
 
   /// The string to disable the feature.
   String get disableString => 'no-$enableString';