don’t bulk fix options-filtered errors

Change-Id: Ifa902ffa1a30a5282f4dae3e1a9487583f9c27ff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/166126
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
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 dc26a16..5bd6ce2 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
@@ -63,6 +63,7 @@
 import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -356,6 +357,7 @@
   /// Use the change [builder] to create fixes for the diagnostics in the
   /// library associated with the analysis [result].
   Future<void> _fixErrorsInLibrary(ResolvedLibraryResult result) async {
+    var analysisOptions = result.session.analysisContext.analysisOptions;
     for (var unitResult in result.units) {
       final fixContext = DartFixContextImpl(
         workspace,
@@ -364,7 +366,11 @@
         (name) => [],
       );
       for (var error in unitResult.errors) {
-        await _fixSingleError(fixContext, unitResult, error);
+        var processor = ErrorProcessor.getProcessor(analysisOptions, error);
+        // Only fix errors not filtered out in analysis options.
+        if (processor == null || processor.severity != null) {
+          await _fixSingleError(fixContext, unitResult, error);
+        }
       }
     }
   }
diff --git a/pkg/analysis_server/test/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
index c1d8b75..cf1c6c7 100644
--- a/pkg/analysis_server/test/edit/bulk_fixes_test.dart
+++ b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
@@ -27,6 +27,12 @@
     expect(editedSource, expectedSource);
   }
 
+  Future<void> assertNoEdits() async {
+    await waitForTasksFinished();
+    var edits = await _getBulkEdits();
+    expect(edits, isEmpty);
+  }
+
   @override
   void setUp() {
     super.setUp();
@@ -52,6 +58,38 @@
 ''');
   }
 
+  Future<void> test_unnecessaryNew_ignoredInOptions() async {
+    createProject();
+    addAnalysisOptionsFile('''
+analyzer:
+  errors:
+    unnecessary_new: ignore
+linter:
+  rules:
+    - unnecessary_new
+''');
+    addTestFile('''
+class A {}
+A f() => new A();
+''');
+    await assertNoEdits();
+  }
+
+  Future<void> test_unnecessaryNew_ignoredInSource() async {
+    createProject();
+    addAnalysisOptionsFile('''
+linter:
+  rules:
+    - unnecessary_new
+''');
+    addTestFile('''
+class A {}
+//ignore: unnecessary_new
+A f() => new A();
+''');
+    await assertNoEdits();
+  }
+
   Future<List<SourceFileEdit>> _getBulkEdits() async {
     var request = EditBulkFixesParams([testFile]).toRequest('0');
     var response = await waitResponse(request);