[lint] `unecessary_ignore`: skip generated files

Bug: https://github.com/dart-lang/sdk/issues/35234
Change-Id: I7ba59a32906b25c4343edff212cbac3acaa94e41
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/404721
Auto-Submit: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index f20214b..331906c 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/source/file_source.dart';
 import 'package:analyzer/src/context/source.dart';
 import 'package:analyzer/src/dart/analysis/analysis_options.dart';
 import 'package:analyzer/src/dart/analysis/file_analysis.dart';
@@ -355,7 +356,9 @@
 
     // This must happen after all other diagnostics have been computed but
     // before the list of diagnostics has been filtered.
-    for (var fileAnalysis in _libraryFiles.values) {
+    for (var fileAnalysis in _libraryFiles.values
+        // Only validate non-generated files.
+        .whereNot((f) => f.file.source.isGenerated)) {
       IgnoreValidator(
               fileAnalysis.errorReporter,
               fileAnalysis.errorListener.errors,
@@ -717,7 +720,7 @@
       } else if (state is LibraryImportWithFile && !state.importedFile.exists) {
         var errorCode = state.isDocImport
             ? WarningCode.URI_DOES_NOT_EXIST_IN_DOC_IMPORT
-            : isGeneratedSource(state.importedSource)
+            : state.importedSource.isGenerated
                 ? CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED
                 : CompileTimeErrorCode.URI_DOES_NOT_EXIST;
         errorReporter.atNode(
@@ -1152,3 +1155,7 @@
     return DirectiveUriImpl();
   }
 }
+
+extension on FileSource {
+  bool get isGenerated => isGeneratedSource(this);
+}
diff --git a/pkg/linter/test/rules/unnecessary_ignore_test.dart b/pkg/linter/test/rules/unnecessary_ignore_test.dart
index e916df0..a538995 100644
--- a/pkg/linter/test/rules/unnecessary_ignore_test.dart
+++ b/pkg/linter/test/rules/unnecessary_ignore_test.dart
@@ -10,6 +10,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(UnnecessaryIgnoreTest);
     defineReflectiveTests(UnnecessaryIgnoreDisabledTest);
+    defineReflectiveTests(UnnecessaryIgnoreGeneratedFileTest);
   });
 }
 
@@ -36,6 +37,29 @@
 }
 
 @reflectiveTest
+class UnnecessaryIgnoreGeneratedFileTest extends LintRuleTest {
+  @override
+  String get lintRule => 'unnecessary_ignore';
+
+  @override
+  String get testFileName => 'test.g.dart';
+
+  test_file() async {
+    await assertNoDiagnostics(r'''
+// ignore_for_file: unused_local_variable
+void f() {}
+''');
+  }
+
+  test_line() async {
+    await assertNoDiagnostics(r'''
+// ignore: unused_local_variable
+void f() {}
+''');
+  }
+}
+
+@reflectiveTest
 class UnnecessaryIgnoreTest extends LintRuleTest {
   @override
   String get lintRule => 'unnecessary_ignore';