migrate to lintProducerMap2

Change-Id: I90b41091b354f02e84772e797257bf20db404f30
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192949
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index d304168..9b819f0 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -297,10 +297,12 @@
   /// being offered as a fix.
   static Map<ProducerGenerator, Set<String>> createLintRuleMap() {
     var map = <ProducerGenerator, Set<String>>{};
-    for (var entry in FixProcessor.lintProducerMap.entries) {
+    for (var entry in FixProcessor.lintProducerMap2.entries) {
       var lintName = entry.key;
-      for (var generator in entry.value) {
-        map.putIfAbsent(generator, () => <String>{}).add(lintName);
+      for (var fix in entry.value) {
+        for (var generator in fix.generators) {
+          map.putIfAbsent(generator, () => <String>{}).add(lintName);
+        }
       }
     }
     return map;
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index ac275c3..d6caedd 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -28,6 +28,7 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:collection/collection.dart';
 
 /// A fix producer that produces changes that will fix multiple diagnostics in
 /// one or more files.
@@ -233,7 +234,7 @@
         if (fix.canBeBulkApplied) {
           final generators = fix.generators;
           if (generators != null) {
-            yield* generators.map((g) => g().fixKind).where((k) => k != null);
+            yield* generators.map((g) => g().fixKind).whereNotNull();
           }
         }
       }
@@ -245,7 +246,7 @@
       if (fix.canBeBulkApplied) {
         final generators = fix.generators;
         if (generators != null) {
-          yield* generators.map((g) => g().fixKind).where((k) => k != null);
+          yield* generators.map((g) => g().fixKind).whereNotNull();
         }
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 9a4b783..e2bde24 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1080,6 +1080,7 @@
   /// A map from the names of lint rules to a list of generators used to create
   /// the correction producers used to build fixes for those diagnostics. The
   /// generators used for non-lint diagnostics are in the [nonLintProducerMap].
+  @Deprecated('To be replaced w/ lintProducerMap2')
   static const Map<String, List<ProducerGenerator>> lintProducerMap = {
     LintNames.always_declare_return_types: [
       AddReturnType.newInstance,
@@ -1447,7 +1448,7 @@
 
   /// A map from error codes to a list of generators used to create the
   /// correction producers used to build fixes for those diagnostics. The
-  /// generators used for lint rules are in the [lintProducerMap].
+  /// generators used for lint rules are in the [lintProducerMap2].
   static const Map<ErrorCode, List<ProducerGenerator>> nonLintProducerMap = {
     CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: [
       MakeFieldNotFinal.newInstance,
@@ -2006,9 +2007,9 @@
 
     var errorCode = error.errorCode;
     if (errorCode is LintCode) {
-      var generators = lintProducerMap[errorCode.name];
-      if (generators != null) {
-        for (var generator in generators) {
+      var fixes = lintProducerMap2[errorCode.name] ?? [];
+      for (var fix in fixes) {
+        for (var generator in fix.generators) {
           await compute(generator());
         }
       }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
index 482894f..04b9eab 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_in_file_test.dart
@@ -121,6 +121,7 @@
     verify_fixInFileFixesHaveBulkFixTests();
     verify_fixInFileFixKindsHaveMultiFixes();
     verify_fixInFileFixesHaveUniqueBulkFixes();
+    verify_lintProducerMap2_coverage();
   }
 
   static void verify_fixInFileFixesHaveBulkFixTests() {
@@ -129,7 +130,7 @@
         var errorCode = fixEntry.key;
         for (var fixInfo in fixEntry.value) {
           if (fixInfo.canBeAppliedToFile) {
-            test(errorCode, () {
+            test('$errorCode |', () {
               expect(fixInfo.canBeBulkApplied, isTrue);
             });
           }
@@ -187,6 +188,19 @@
       }
     });
   }
+
+  static void verify_lintProducerMap2_coverage() {
+    // todo (pq): remove when lintProducerMap is deleted.
+    group('VerificationTests | lintProducerMap2_coverage |', () {
+      // ignore: deprecated_member_use_from_same_package
+      for (var entry in FixProcessor.lintProducerMap.entries) {
+        var errorCode = entry.key;
+        test('$errorCode |', () {
+          expect(FixProcessor.lintProducerMap2, contains(errorCode));
+        });
+      }
+    });
+  }
 }
 
 /// todo (pq): add negative tests