Add SetExtension.addIfNotNull()

Change-Id: I86d412c7eb30968608c845d407b9e8fd665f1997
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249100
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index cea7103..b42bdf8 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -38,6 +38,7 @@
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
+import 'package:analyzer/src/utilities/extensions/collection.dart';
 import 'package:analyzer/src/utilities/extensions/file_system.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
 import 'package:collection/collection.dart';
@@ -1030,15 +1031,9 @@
 
     var removedSet = removed.toSet();
 
-    void addIfNotNull(String? key) {
-      if (key != null) {
-        removedKeys.add(key);
-      }
-    }
-
     loadedBundles.removeWhere((cycle) {
       if (cycle.libraries.any(removedSet.contains)) {
-        addIfNotNull(cycle.resolutionKey);
+        removedKeys.addIfNotNull(cycle.resolutionKey);
         return true;
       }
       return false;
@@ -1052,14 +1047,8 @@
     final keySet = <String>{};
     final uriSet = <Uri>{};
 
-    void addIfNotNull(String? key) {
-      if (key != null) {
-        keySet.add(key);
-      }
-    }
-
     for (var cycle in loadedBundles) {
-      addIfNotNull(cycle.resolutionKey);
+      keySet.addIfNotNull(cycle.resolutionKey);
       uriSet.addAll(cycle.libraries.map((e) => e.uri));
     }
 
diff --git a/pkg/analyzer/lib/src/utilities/extensions/collection.dart b/pkg/analyzer/lib/src/utilities/extensions/collection.dart
index 091d858..8563d02 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/collection.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/collection.dart
@@ -9,3 +9,11 @@
     }
   }
 }
+
+extension SetExtension<E> on Set<E> {
+  void addIfNotNull(E? element) {
+    if (element != null) {
+      add(element);
+    }
+  }
+}
diff --git a/pkg/analyzer/test/src/utilities/extensions/collection_test.dart b/pkg/analyzer/test/src/utilities/extensions/collection_test.dart
index ea9231f..0b0f9f2 100644
--- a/pkg/analyzer/test/src/utilities/extensions/collection_test.dart
+++ b/pkg/analyzer/test/src/utilities/extensions/collection_test.dart
@@ -26,3 +26,18 @@
     expect(elements, [0, 1]);
   }
 }
+
+@reflectiveTest
+class SetExtensionTest {
+  test_addIfNotNull_notNull() {
+    var elements = {0, 1};
+    elements.addIfNotNull(2);
+    expect(elements, {0, 1, 2});
+  }
+
+  test_addIfNotNull_null() {
+    var elements = {0, 1};
+    elements.addIfNotNull(null);
+    expect(elements, {0, 1});
+  }
+}