Version 2.13.0-98.0.dev

Merge commit 'e7644d9a4c6f400680206f6d03135f24d0480052' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
index bb5bf5a..3fa7457 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_import.dart
@@ -14,6 +14,9 @@
   FixKind get fixKind => DartFixKind.REMOVE_UNUSED_IMPORT;
 
   @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_UNUSED_IMPORT_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     // prepare ImportDirective
     var importDirective = node.thisOrAncestorOfType<ImportDirective>();
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 e8bc6be..c6ddc15 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -287,13 +287,12 @@
         }
       }
     } else {
-      // todo (pq): add support for non-lint producers and update to a new nonLintProducerMap2
-      // var generators = FixProcessor.nonLintProducerMap[errorCode];
-      // if (generators != null) {
-      //   if (generators != null) {
-      //     producers.addAll(generators);
-      //   }
-      // }
+      var fixInfos = FixProcessor.nonLintProducerMap2[errorCode] ?? [];
+      for (var fixInfo in fixInfos) {
+        if (fixInfo.canBeAppliedToFile) {
+          producers.addAll(fixInfo.generators);
+        }
+      }
       // todo (pq): consider support for multiGenerators
     }
     return producers;
@@ -313,6 +312,19 @@
 
 /// The computer for Dart fixes.
 class FixProcessor extends BaseProcessor {
+  /// todo (pq): to replace nonLintProducerMap.
+  static const Map<ErrorCode, List<FixInfo>> nonLintProducerMap2 = {
+    HintCode.UNUSED_IMPORT: [
+      FixInfo(
+        canBeAppliedToFile: true,
+        canBeBulkApplied: false,
+        generators: [
+          RemoveUnusedImport.newInstance,
+        ],
+      ),
+    ],
+  };
+
   /// todo (pq): to replace lintProducerMap.
   static const Map<String, List<FixInfo>> lintProducerMap2 = {
     LintNames.always_declare_return_types: [
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
index 6a9cc3e..020945a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
@@ -12,13 +12,14 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RemoveUnusedImportTest);
+    defineReflectiveTests(RemoveUnusedImportMultiTest);
   });
 }
 
 @reflectiveTest
-class RemoveUnusedImportTest extends FixProcessorTest {
+class RemoveUnusedImportMultiTest extends FixProcessorTest {
   @override
-  FixKind get kind => DartFixKind.REMOVE_UNUSED_IMPORT;
+  FixKind get kind => DartFixKind.REMOVE_UNUSED_IMPORT_MULTI;
 
   @override
   void setUp() {
@@ -27,7 +28,6 @@
     useLineEndingsForPlatform = false;
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/45026')
   Future<void> test_all_diverseImports() async {
     await resolveTestCode('''
 import 'dart:math';
@@ -42,7 +42,6 @@
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/45026')
   Future<void> test_all_diverseImports2() async {
     await resolveTestCode('''
 import 'dart:async';
@@ -64,7 +63,7 @@
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/45026')
+  @FailingTest(reason: 'one unused import remains unremoved')
   Future<void> test_all_singleLine() async {
     await resolveTestCode('''
 import 'dart:math'; import 'dart:math'; import 'dart:math';
@@ -77,6 +76,33 @@
 ''');
   }
 
+  Future<void> test_multipleOfSame_all() async {
+    await resolveTestCode('''
+import 'dart:math';
+import 'dart:math';
+import 'dart:math';
+main() {
+}
+''');
+    await assertHasFixAllFix(HintCode.UNUSED_IMPORT, '''
+main() {
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveUnusedImportTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_UNUSED_IMPORT;
+
+  @override
+  void setUp() {
+    super.setUp();
+    // TODO(dantup): Get these tests passing with either line ending.
+    useLineEndingsForPlatform = false;
+  }
+
   Future<void> test_anotherImportOnLine() async {
     await resolveTestCode('''
 import 'dart:math'; import 'dart:async';
@@ -114,21 +140,6 @@
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/45026')
-  Future<void> test_multipleOfSame_all() async {
-    await resolveTestCode('''
-import 'dart:math';
-import 'dart:math';
-import 'dart:math';
-main() {
-}
-''');
-    await assertHasFixAllFix(HintCode.UNUSED_IMPORT, '''
-main() {
-}
-''');
-  }
-
   Future<void> test_severalLines() async {
     await resolveTestCode('''
 import
diff --git a/tools/VERSION b/tools/VERSION
index 5ab8887..e96e386 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 97
+PRERELEASE 98
 PRERELEASE_PATCH 0
\ No newline at end of file