Version 3.9.0-94.0.dev

Merge 81ab0dab3c31e7b37336fcd842b92fa452594edb into dev
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index 5dc5484..c5736c8 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/task/options.dart';
@@ -75,28 +76,28 @@
   /// The string that unique describes the processor.
   String get description => '$code -> ${severity?.name}';
 
-  /// Check if this processor applies to the given [error].
+  /// Check if this processor applies to the given [diagnostic].
   ///
   /// Note: [code] is normalized to uppercase; `errorCode.name` for regular
   /// analysis issues uses uppercase; `errorCode.name` for lints uses lowercase.
   @visibleForTesting
-  bool appliesTo(AnalysisError error) =>
-      code == error.errorCode.name ||
-      code == error.errorCode.name.toUpperCase();
+  bool appliesTo(Diagnostic diagnostic) =>
+      code == diagnostic.errorCode.name ||
+      code == diagnostic.errorCode.name.toUpperCase();
 
   @override
   String toString() => "ErrorProcessor[code='$code', severity=$severity]";
 
   /// Returns an error processor associated in the [analysisOptions] for the
-  /// given [error], or `null` if none is found.
+  /// given [diagnostic], or `null` if none is found.
   static ErrorProcessor? getProcessor(
     // TODO(srawlins): Make `analysisOptions` non-nullable, in a breaking
     // change release.
     AnalysisOptions? analysisOptions,
-    AnalysisError error,
+    Diagnostic diagnostic,
   ) {
     return analysisOptions?.errorProcessors.firstWhereOrNull(
-      (processor) => processor.appliesTo(error),
+      (processor) => processor.appliesTo(diagnostic),
     );
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 0af798c..9b12d2a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/exception/exception.dart';
@@ -1407,7 +1408,10 @@
           // getErrors()
           _errorsRequestedFiles.completeAll(
             unitFile.path,
-            _createErrorsResultImpl(file: unitFile, errors: unitResult.errors),
+            _createErrorsResultImpl(
+              file: unitFile,
+              diagnostics: unitResult.errors,
+            ),
           );
 
           // getIndex()
@@ -1572,15 +1576,15 @@
       events.GetErrorsFromBytes(file: file, library: library),
     );
     var unit = AnalysisDriverResolvedUnit.fromBuffer(bytes);
-    var errors = _getErrorsFromSerialized(file, unit.errors);
+    var errors = _getDiagnosticsFromSerialized(file, unit.errors);
     _updateHasErrorOrWarningFlag(file, errors);
-    var result = _createErrorsResultImpl(file: file, errors: errors);
+    var result = _createErrorsResultImpl(file: file, diagnostics: errors);
     return result;
   }
 
   ErrorsResultImpl _createErrorsResultImpl({
     required FileState file,
-    required List<AnalysisError> errors,
+    required List<Diagnostic> diagnostics,
   }) {
     return ErrorsResultImpl(
       session: currentSession,
@@ -1590,7 +1594,7 @@
       uri: file.uri,
       isLibrary: file.kind is LibraryFileKind,
       isPart: file.kind is PartFileKind,
-      errors: errors,
+      errors: diagnostics,
       analysisOptions: file.analysisOptions,
     );
   }
@@ -1676,6 +1680,21 @@
     }
   }
 
+  /// Return [Diagnostic]s for the given [serialized] diagnostics.
+  List<Diagnostic> _getDiagnosticsFromSerialized(
+    FileState file,
+    List<AnalysisDriverUnitError> serialized,
+  ) {
+    List<Diagnostic> diagnostics = <Diagnostic>[];
+    for (AnalysisDriverUnitError error in serialized) {
+      var analysisError = ErrorEncoding.decode(file.source, error);
+      if (analysisError != null) {
+        diagnostics.add(analysisError);
+      }
+    }
+    return diagnostics;
+  }
+
   void _getErrors(String path) {
     var file = _fsState.getFileForPath(path);
 
@@ -1781,21 +1800,6 @@
     _analyzeFile(path);
   }
 
-  /// Return [AnalysisError]s for the given [serialized] errors.
-  List<AnalysisError> _getErrorsFromSerialized(
-    FileState file,
-    List<AnalysisDriverUnitError> serialized,
-  ) {
-    List<AnalysisError> errors = <AnalysisError>[];
-    for (AnalysisDriverUnitError error in serialized) {
-      var analysisError = ErrorEncoding.decode(file.source, error);
-      if (analysisError != null) {
-        errors.add(analysisError);
-      }
-    }
-    return errors;
-  }
-
   Future<void> _getFilesDefiningClassMemberName(
     _GetFilesDefiningClassMemberNameRequest request,
   ) async {
@@ -1958,7 +1962,7 @@
       isLibrary: file.kind is LibraryFileKind,
       isPart: file.kind is PartFileKind,
       errors: [
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: file.source,
           offset: 0,
           length: 0,
@@ -2329,14 +2333,14 @@
     }
   }
 
-  /// Given the list of [errors] for the [file], update the [file]'s
+  /// Given the list of [diagnostics] for the [file], update the [file]'s
   /// [FileState.hasErrorOrWarning] flag.
   void _updateHasErrorOrWarningFlag(
     FileState file,
-    List<AnalysisError> errors,
+    List<Diagnostic> diagnostics,
   ) {
-    for (var error in errors) {
-      var severity = error.errorCode.errorSeverity;
+    for (var diagnostic in diagnostics) {
+      var severity = diagnostic.errorCode.errorSeverity;
       if (severity == DiagnosticSeverity.ERROR) {
         file.hasErrorOrWarning = true;
         return;
@@ -2663,7 +2667,7 @@
 }
 
 class ErrorEncoding {
-  static AnalysisError? decode(Source source, AnalysisDriverUnitError error) {
+  static Diagnostic? decode(Source source, AnalysisDriverUnitError error) {
     String errorName = error.uniqueName;
     DiagnosticCode? diagnosticCode =
         errorCodeByUniqueName(errorName) ?? _lintCodeByUniqueName(errorName);
@@ -2691,7 +2695,7 @@
       );
     }
 
-    return AnalysisError.forValues(
+    return Diagnostic.forValues(
       source: source,
       offset: error.offset,
       length: error.length,
@@ -2702,9 +2706,9 @@
     );
   }
 
-  static AnalysisDriverUnitErrorBuilder encode(AnalysisError error) {
+  static AnalysisDriverUnitErrorBuilder encode(Diagnostic diagnostic) {
     var contextMessages = <DiagnosticMessageBuilder>[];
-    for (var message in error.contextMessages) {
+    for (var message in diagnostic.contextMessages) {
       contextMessages.add(
         DiagnosticMessageBuilder(
           filePath: message.filePath,
@@ -2717,11 +2721,11 @@
     }
 
     return AnalysisDriverUnitErrorBuilder(
-      offset: error.offset,
-      length: error.length,
-      uniqueName: error.errorCode.uniqueName,
-      message: error.message,
-      correction: error.correctionMessage ?? '',
+      offset: diagnostic.offset,
+      length: diagnostic.length,
+      uniqueName: diagnostic.errorCode.uniqueName,
+      message: diagnostic.message,
+      correction: diagnostic.correctionMessage ?? '',
       contextMessages: contextMessages,
     );
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 6886eda..21d8713 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -13,7 +13,7 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/file_source.dart';
@@ -2109,7 +2109,8 @@
 class ParsedFileState {
   final String code;
   final CompilationUnitImpl unit;
-  final List<AnalysisError> errors;
+  // TODO(srawlins): Rename to `diagnostics`.
+  final List<Diagnostic> errors;
 
   ParsedFileState({
     required this.code,
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index cf53d57..5d52af6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/file_source.dart';
@@ -129,7 +130,7 @@
     var results = <UnitAnalysisResult>[];
     for (var fileAnalysis in _libraryFiles.values) {
       var errors = fileAnalysis.errorListener.errors;
-      errors = _filterIgnoredErrors(fileAnalysis, errors);
+      errors = _filterIgnoredDiagnostics(fileAnalysis, errors);
       results.add(
         UnitAnalysisResult(fileAnalysis.file, fileAnalysis.unit, errors),
       );
@@ -564,25 +565,25 @@
     }
   }
 
-  /// Returns a subset of the given [errors] that are not marked as ignored in
+  /// Returns a subset of the given [diagnostics] that are not marked as ignored in
   /// the file.
-  List<AnalysisError> _filterIgnoredErrors(
+  List<Diagnostic> _filterIgnoredDiagnostics(
     FileAnalysis fileAnalysis,
-    List<AnalysisError> errors,
+    List<Diagnostic> diagnostics,
   ) {
-    if (errors.isEmpty) {
-      return errors;
+    if (diagnostics.isEmpty) {
+      return diagnostics;
     }
 
     IgnoreInfo ignoreInfo = fileAnalysis.ignoreInfo;
     if (!ignoreInfo.hasIgnores) {
-      return errors;
+      return diagnostics;
     }
 
     var unignorableCodes = _analysisOptions.unignorableNames;
 
-    bool isIgnored(AnalysisError error) {
-      var code = error.errorCode;
+    bool isIgnored(Diagnostic diagnostic) {
+      var code = diagnostic.errorCode;
       // Don't allow un-ignorable codes to be ignored.
       if (unignorableCodes.contains(code.name) ||
           unignorableCodes.contains(code.uniqueName) ||
@@ -590,10 +591,10 @@
           unignorableCodes.contains(code.name.toUpperCase())) {
         return false;
       }
-      return ignoreInfo.ignored(error);
+      return ignoreInfo.ignored(diagnostic);
     }
 
-    return errors.where((AnalysisError e) => !isIgnored(e)).toList();
+    return diagnostics.where((Diagnostic e) => !isIgnored(e)).toList();
   }
 
   /// Find constants in [unit] to compute.
@@ -1120,7 +1121,8 @@
 class UnitAnalysisResult {
   final FileState file;
   final CompilationUnitImpl unit;
-  final List<AnalysisError> errors;
+  // TODO(srawlins): Renamed to `diagnostics`.
+  final List<Diagnostic> errors;
 
   UnitAnalysisResult(this.file, this.unit, this.errors);
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index bec166f..5d2173a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
@@ -197,7 +197,7 @@
 
 class ErrorsResultImpl implements ErrorsResult {
   @override
-  final List<AnalysisError> errors;
+  final List<Diagnostic> errors;
 
   @override
   final bool isLibrary;
@@ -334,7 +334,7 @@
   final CompilationUnit unit;
 
   @override
-  final List<AnalysisError> errors;
+  final List<Diagnostic> errors;
 
   ParsedUnitResultImpl({
     required super.session,
@@ -349,7 +349,7 @@
   final String content;
 
   @override
-  final List<AnalysisError> errors;
+  final List<Diagnostic> errors;
 
   @override
   final CompilationUnit unit;
@@ -481,7 +481,7 @@
   final CompilationUnitImpl unit;
 
   @override
-  final List<AnalysisError> errors;
+  final List<Diagnostic> errors;
 
   ResolvedUnitResultImpl({
     required super.session,
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 9f3a259..03781bb 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -836,7 +837,7 @@
               .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
         )) {
       _errorReporter.reportError(
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: _errorReporter.source,
           offset: error.offset,
           length: error.length,
@@ -847,7 +848,7 @@
       );
     } else if (defaultDiagnosticCode != null) {
       _errorReporter.reportError(
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: _errorReporter.source,
           offset: error.offset,
           length: error.length,
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 99a6bf1..89c5b69 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
@@ -1658,21 +1658,21 @@
   ///
   // TODO(kallentu): Remove this field once we fix up g3's dependency on
   // annotations having a valid result as well as unresolved errors.
-  List<AnalysisError>? additionalErrors;
+  List<Diagnostic>? additionalErrors;
 
   /// Initialize a newly created annotation. The given [compilationUnit] is the
   /// compilation unit in which the annotation appears.
   ElementAnnotationImpl(this.compilationUnit);
 
   @override
-  List<AnalysisError> get constantEvaluationErrors {
+  List<Diagnostic> get constantEvaluationErrors {
     var evaluationResult = this.evaluationResult;
     var additionalErrors = this.additionalErrors;
     if (evaluationResult is InvalidConstant) {
       // When we have an [InvalidConstant], we don't report the additional
       // errors because this result contains the most relevant error.
       return [
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: source,
           offset: evaluationResult.offset,
           length: evaluationResult.length,
@@ -1682,7 +1682,7 @@
         ),
       ];
     }
-    return additionalErrors ?? const <AnalysisError>[];
+    return additionalErrors ?? const <Diagnostic>[];
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index b547a4a..c44bd3e 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
@@ -328,22 +328,22 @@
       errorsSignatureBuilder.addString(file.contentHash);
       var errorsKey = '${errorsSignatureBuilder.toHex()}.errors';
 
-      List<AnalysisError> errors;
+      List<Diagnostic> diagnostics;
       var bytes = _errorResultsCache.get(errorsKey);
       if (bytes != null) {
         var data = CiderUnitErrors.fromBuffer(bytes);
-        errors =
+        diagnostics =
             data.errors.map((error) {
               return ErrorEncoding.decode(file.source, error)!;
             }).toList();
       } else {
         var unitResult = await resolve(path: path, performance: performance);
-        errors = unitResult.errors;
+        diagnostics = unitResult.errors;
 
         _errorResultsCache.put(
           errorsKey,
           CiderUnitErrorsBuilder(
-            errors: errors.map(ErrorEncoding.encode).toList(),
+            errors: diagnostics.map(ErrorEncoding.encode).toList(),
           ).toBuffer(),
         );
       }
@@ -356,7 +356,7 @@
         lineInfo: file.lineInfo,
         isLibrary: file.kind is LibraryFileKind,
         isPart: file.kind is PartFileKind,
-        errors: errors,
+        errors: diagnostics,
         analysisOptions: file.analysisOptions,
       );
     });
diff --git a/pkg/analyzer/lib/src/dart/scanner/scanner.dart b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
index 07e01f5..b3ed234 100644
--- a/pkg/analyzer/lib/src/dart/scanner/scanner.dart
+++ b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
@@ -10,7 +10,7 @@
 import 'package:_fe_analyzer_shared/src/scanner/token.dart'
     show Token, TokenType;
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
@@ -129,7 +129,7 @@
     List<Object?>? arguments,
   ) {
     _errorListener.onError(
-      AnalysisError.tmp(
+      Diagnostic.tmp(
         source: source,
         offset: offset,
         length: 1,
@@ -202,7 +202,7 @@
     var latestVersion = ExperimentStatus.currentVersion;
     if (overrideVersion > latestVersion) {
       _errorListener.onError(
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: source,
           offset: versionToken.offset,
           length: versionToken.length,
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
index 02f5c53..16bbd48 100644
--- a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
@@ -19,13 +19,13 @@
 
   /// Return a diagnostic indicating that [duplicate] uses the same [variable]
   /// as a previous [original] node in a pattern assignment.
-  AnalysisError duplicateAssignmentPatternVariable({
+  Diagnostic duplicateAssignmentPatternVariable({
     required Source source,
     required PromotableElement variable,
     required AssignedVariablePatternImpl original,
     required AssignedVariablePatternImpl duplicate,
   }) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicate.offset,
       length: duplicate.length,
@@ -45,7 +45,7 @@
 
   /// Return a diagnostic indicating that [duplicateElement] reuses a name
   /// already used by [originalElement].
-  AnalysisError duplicateDefinition(
+  Diagnostic duplicateDefinition(
     DiagnosticCode code,
     Element duplicateElement,
     Element originalElement,
@@ -55,7 +55,7 @@
     var duplicateFragment = duplicate.firstFragment;
     var original = originalElement.nonSynthetic2;
     var originalFragment = original.firstFragment;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: duplicateFragment.libraryFragment!.source,
       offset: duplicateFragment.nameOffset2 ?? -1,
       length: duplicate.name3!.length,
@@ -75,14 +75,14 @@
 
   /// Return a diagnostic indicating that [duplicateNode] reuses a name
   /// already used by [originalNode].
-  AnalysisError duplicateDefinitionForNodes(
+  Diagnostic duplicateDefinitionForNodes(
     Source source,
     DiagnosticCode code,
     SyntacticEntity duplicateNode,
     SyntacticEntity originalNode,
     List<Object> arguments,
   ) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateNode.offset,
       length: duplicateNode.length,
@@ -102,14 +102,14 @@
 
   /// Return a diagnostic indicating that [duplicateField] reuses a name
   /// already used by [originalField].
-  AnalysisError duplicateFieldDefinitionInLiteral(
+  Diagnostic duplicateFieldDefinitionInLiteral(
     Source source,
     NamedExpression duplicateField,
     NamedExpression originalField,
   ) {
     var duplicateNode = duplicateField.name.label;
     var duplicateName = duplicateNode.name;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateNode.offset,
       length: duplicateNode.length,
@@ -132,14 +132,14 @@
   ///
   /// This method requires that both the [duplicateField] and [originalField]
   /// have a non-null `name`.
-  AnalysisError duplicateFieldDefinitionInType(
+  Diagnostic duplicateFieldDefinitionInType(
     Source source,
     RecordTypeAnnotationField duplicateField,
     RecordTypeAnnotationField originalField,
   ) {
     var duplicateNode = duplicateField.name!;
     var duplicateName = duplicateNode.lexeme;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateNode.offset,
       length: duplicateNode.length,
@@ -159,7 +159,7 @@
 
   /// Return a diagnostic indicating that [duplicateField] reuses a name
   /// already used by [originalField].
-  AnalysisError duplicatePatternField({
+  Diagnostic duplicatePatternField({
     required Source source,
     required String name,
     required PatternField duplicateField,
@@ -169,7 +169,7 @@
     var originalTarget = originalNode.name ?? originalNode.colon;
     var duplicateNode = duplicateField.name!;
     var duplicateTarget = duplicateNode.name ?? duplicateNode.colon;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateTarget.offset,
       length: duplicateTarget.length,
@@ -189,12 +189,12 @@
 
   /// Return a diagnostic indicating that [duplicateElement] reuses a name
   /// already used by [originalElement].
-  AnalysisError duplicateRestElementInPattern({
+  Diagnostic duplicateRestElementInPattern({
     required Source source,
     required RestPatternElement originalElement,
     required RestPatternElement duplicateElement,
   }) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateElement.offset,
       length: duplicateElement.length,
@@ -213,12 +213,12 @@
 
   /// Return a diagnostic indicating that the [duplicateElement] (in a constant
   /// set) is a duplicate of the [originalElement].
-  AnalysisError equalElementsInConstSet(
+  Diagnostic equalElementsInConstSet(
     Source source,
     Expression duplicateElement,
     Expression originalElement,
   ) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateElement.offset,
       length: duplicateElement.length,
@@ -237,12 +237,12 @@
 
   /// Return a diagnostic indicating that the [duplicateKey] (in a constant map)
   /// is a duplicate of the [originalKey].
-  AnalysisError equalKeysInConstMap(
+  Diagnostic equalKeysInConstMap(
     Source source,
     Expression duplicateKey,
     Expression originalKey,
   ) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateKey.offset,
       length: duplicateKey.length,
@@ -261,12 +261,12 @@
 
   /// Return a diagnostic indicating that the [duplicateKey] (in a map pattern)
   /// is a duplicate of the [originalKey].
-  AnalysisError equalKeysInMapPattern(
+  Diagnostic equalKeysInMapPattern(
     Source source,
     Expression duplicateKey,
     Expression originalKey,
   ) {
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: duplicateKey.offset,
       length: duplicateKey.length,
@@ -283,7 +283,7 @@
     );
   }
 
-  AnalysisError invalidNullAwareAfterShortCircuit(
+  Diagnostic invalidNullAwareAfterShortCircuit(
     Source source,
     int offset,
     int length,
@@ -291,7 +291,7 @@
     Token previousToken,
   ) {
     var lexeme = previousToken.lexeme;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: offset,
       length: length,
@@ -312,7 +312,7 @@
 
   /// Return a diagnostic indicating that [member] is not a correct override of
   /// [superMember].
-  AnalysisError invalidOverride(
+  Diagnostic invalidOverride(
     Source source,
     DiagnosticCode code,
     SyntacticEntity errorNode,
@@ -324,7 +324,7 @@
     // named, so we can safely assume `_thisMember.enclosingElement3.name` and
     // `superMember.enclosingElement3.name` are non-`null`.
     var superFragment = superMember.nonSynthetic2.firstFragment;
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: errorNode.offset,
       length: errorNode.length,
@@ -364,7 +364,7 @@
 
   /// Return a diagnostic indicating that the given [nameToken] was referenced
   /// before it was declared.
-  AnalysisError referencedBeforeDeclaration(
+  Diagnostic referencedBeforeDeclaration(
     Source source, {
     required Token nameToken,
     required Element element2,
@@ -383,7 +383,7 @@
         ),
       ];
     }
-    return AnalysisError.tmp(
+    return Diagnostic.tmp(
       source: source,
       offset: nameToken.offset,
       length: nameToken.length,
diff --git a/pkg/analyzer/lib/src/error.dart b/pkg/analyzer/lib/src/error.dart
index d75cdce..62db297 100644
--- a/pkg/analyzer/lib/src/error.dart
+++ b/pkg/analyzer/lib/src/error.dart
@@ -4,12 +4,12 @@
 
 import 'dart:collection';
 
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 
-/// A wrapper around [AnalysisError] that provides a more user-friendly string
+/// A wrapper around [Diagnostic] that provides a more user-friendly string
 /// representation.
 class AnalyzerError implements Exception {
-  final AnalysisError error;
+  final Diagnostic error;
 
   AnalyzerError(this.error);
 
@@ -78,9 +78,9 @@
     : _errors = errors.toList();
 
   /// Creates an [AnalyzerErrorGroup] from a list of lower-level
-  /// [AnalysisError]s.
-  AnalyzerErrorGroup.fromAnalysisErrors(Iterable<AnalysisError> errors)
-    : this(errors.map((e) => AnalyzerError(e)));
+  /// [Diagnostic]s.
+  AnalyzerErrorGroup.fromAnalysisErrors(Iterable<Diagnostic> diagnostics)
+    : this(diagnostics.map((e) => AnalyzerError(e)));
 
   /// The errors in this collection.
   List<AnalyzerError> get errors =>
diff --git a/pkg/analyzer/lib/src/error/ignore_validator.dart b/pkg/analyzer/lib/src/error/ignore_validator.dart
index 9add25f..eb86567 100644
--- a/pkg/analyzer/lib/src/error/ignore_validator.dart
+++ b/pkg/analyzer/lib/src/error/ignore_validator.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/line_info.dart';
@@ -29,7 +30,7 @@
   final ErrorReporter _errorReporter;
 
   /// The diagnostics that are reported in the file being analyzed.
-  final List<AnalysisError> _reportedErrors;
+  final List<Diagnostic> _reportedErrors;
 
   /// The information about the ignore comments in the file being analyzed.
   final IgnoreInfo _ignoreInfo;
@@ -284,7 +285,7 @@
   }
 }
 
-extension on AnalysisError {
+extension on Diagnostic {
   String get ignoreName => errorCode.name.toLowerCase();
 
   String get ignoreUniqueName {
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index 40e8677..6994886 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -1019,7 +1020,7 @@
     if (element != null) {
       var fragment = element.firstFragment;
       _errorListener.onError(
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: fragment.libraryFragment!.source,
           offset:
               fragment.nameOffset2 ??
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index cb9620a..2a0782e 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -9,6 +9,7 @@
         codeAssertAsExpression,
         codeSetOrMapLiteralTooManyTypeArguments;
 import 'package:analyzer/dart/ast/token.dart' show Token;
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
@@ -565,7 +566,7 @@
       var errorCode = fastaAnalyzerErrorCodes[index];
       if (errorCode != null) {
         errorReporter!.reportError(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: errorReporter!.source,
             offset: offset,
             length: length,
@@ -602,7 +603,7 @@
   }) {
     if (errorReporter != null) {
       errorReporter!.reportError(
-        AnalysisError.tmp(
+        Diagnostic.tmp(
           source: errorReporter!.source,
           offset: offset,
           length: length,
diff --git a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
index 9f37cda..5bbc61e 100644
--- a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
+++ b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
@@ -190,10 +191,10 @@
     return ignoredOnLine;
   }
 
-  /// Whether [error] is ignored via an inline "ignore" comment.
-  bool ignored(AnalysisError error, {String? pluginName}) {
-    var line = _lineInfo.getLocation(error.offset).lineNumber;
-    return _ignoredAt(error.errorCode, line, pluginName: pluginName);
+  /// Whether [diagnostic] is ignored via an inline "ignore" comment.
+  bool ignored(Diagnostic diagnostic, {String? pluginName}) {
+    var line = _lineInfo.getLocation(diagnostic.offset).lineNumber;
+    return _ignoredAt(diagnostic.errorCode, line, pluginName: pluginName);
   }
 
   /// Returns whether the [errorCode] is ignored at the given [line].
diff --git a/pkg/analyzer/lib/src/lint/constants.dart b/pkg/analyzer/lib/src/lint/constants.dart
index 20dafe7..e6cfa3e 100644
--- a/pkg/analyzer/lib/src/lint/constants.dart
+++ b/pkg/analyzer/lib/src/lint/constants.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -23,7 +24,8 @@
   final DartObject? value;
 
   /// The errors reported during the evaluation.
-  final List<AnalysisError> errors;
+  // TODO(srawlins): Rename to `diagnostics`.
+  final List<Diagnostic> errors;
 
   LinterConstantEvaluationResult._(this.value, this.errors);
 }
@@ -36,7 +38,7 @@
   bool hasConstError = false;
 
   @override
-  void onError(AnalysisError error) {
+  void onError(Diagnostic error) {
     ErrorCode errorCode = error.errorCode;
     if (errorCode is CompileTimeErrorCode) {
       switch (errorCode) {
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 4d31e12..4b5ab12 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -299,7 +299,7 @@
     ErrorCode? errorCode,
   }) {
     // Cache error and location info for creating `AnalysisErrorInfo`s.
-    var error = AnalysisError.tmp(
+    var error = Diagnostic.tmp(
       source: node.source,
       offset: node.span.start.offset,
       length: node.span.length,
diff --git a/pkg/analyzer/lib/src/lint/options_rule_validator.dart b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
index ad54f35..30fc59e 100644
--- a/pkg/analyzer/lib/src/lint/options_rule_validator.dart
+++ b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/error/error.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/analysis_options/error/option_codes.dart';
 import 'package:analyzer/src/lint/linter.dart';
@@ -46,7 +46,7 @@
   }
 
   @override
-  List<AnalysisError> validate(ErrorReporter reporter, YamlMap options) {
+  List<Diagnostic> validate(ErrorReporter reporter, YamlMap options) {
     var node = options.valueAt(linter);
     if (node is YamlMap) {
       var rules = node.valueAt(rulesKey);
diff --git a/pkg/analyzer/lib/src/manifest/manifest_validator.dart b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
index 31f69a6..600db1b 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_validator.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/source.dart';
@@ -408,7 +409,7 @@
   ManifestValidator(this.source);
 
   /// Validate the [content] of the Android Manifest file.
-  List<AnalysisError> validate(String content, bool checkManifest) {
+  List<Diagnostic> validate(String content, bool checkManifest) {
     // TODO(srawlins): Simplify [checkManifest] notion. Why call the method if
     //  the caller always knows whether it should just return empty?
     if (!checkManifest) return [];
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
index 252ba1c..62cffbf 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
@@ -36,7 +36,7 @@
 ///
 /// The [source] argument must be the source of the file being validated.
 /// The [provider] argument must provide access to the file-system.
-List<AnalysisError> validatePubspec({
+List<Diagnostic> validatePubspec({
   // TODO(brianwilkerson): This method needs to take a `YamlDocument` rather
   //  than the contents of the document so that it can validate an empty file.
   required YamlNode contents,
diff --git a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
index 93f9327..fe751dc 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
@@ -54,7 +54,7 @@
   /// section of the pubspec.yaml file.
   /// Returns the list of names of the packages to be added/removed for these
   /// sections.
-  List<AnalysisError> validate(Set<String> usedDeps, Set<String> usedDevDeps) {
+  List<Diagnostic> validate(Set<String> usedDeps, Set<String> usedDevDeps) {
     var contents = this.contents;
     if (contents is! YamlMap) {
       return [];
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index ad0fcd4..90458f7 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/formatter_options.dart';
+import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/error_processor.dart';
@@ -22,14 +23,14 @@
 import 'package:source_span/source_span.dart';
 import 'package:yaml/yaml.dart';
 
-List<AnalysisError> analyzeAnalysisOptions(
+List<Diagnostic> analyzeAnalysisOptions(
   Source source,
   String content,
   SourceFactory sourceFactory,
   String contextRoot,
   VersionConstraint? sdkVersionConstraint,
 ) {
-  List<AnalysisError> errors = [];
+  List<Diagnostic> errors = [];
   Source initialSource = source;
   SourceSpan? initialIncludeSpan;
   AnalysisOptionsProvider optionsProvider = AnalysisOptionsProvider(
@@ -42,14 +43,14 @@
   // functions, and should be refactored to a class maintaining state, with less
   // variable shadowing.
   void addDirectErrorOrIncludedError(
-    List<AnalysisError> validationErrors,
+    List<Diagnostic> validationErrors,
     Source source, {
     required bool sourceIsOptionsForContextRoot,
   }) {
     if (!sourceIsOptionsForContextRoot) {
       // [source] is an included file, and we should only report errors in
       // [initialSource], noting that the included file has warnings.
-      for (AnalysisError error in validationErrors) {
+      for (Diagnostic error in validationErrors) {
         var args = [
           source.fullName,
           error.offset.toString(),
@@ -57,7 +58,7 @@
           error.message,
         ];
         errors.add(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
@@ -116,7 +117,7 @@
       var includedSource = sourceFactory.resolveUri(source, includeUri);
       if (includedSource == initialSource) {
         errors.add(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
@@ -128,7 +129,7 @@
       }
       if (includedSource == null || !includedSource.exists()) {
         errors.add(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
@@ -141,7 +142,7 @@
       var spanInChain = includeChain[includedSource];
       if (spanInChain != null) {
         errors.add(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
@@ -185,7 +186,7 @@
         // Report errors for included option files on the `include` directive
         // located in the initial options file.
         errors.add(
-          AnalysisError.tmp(
+          Diagnostic.tmp(
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
@@ -213,7 +214,7 @@
   } on OptionsFormatException catch (e) {
     SourceSpan span = e.span!;
     errors.add(
-      AnalysisError.tmp(
+      Diagnostic.tmp(
         source: source,
         offset: span.start.offset,
         length: span.length,
@@ -246,7 +247,7 @@
 
 /// Validates the legacy 'plugins' options in [options], given
 /// [firstEnabledPluginName].
-List<AnalysisError> _validateLegacyPluginsOption(
+List<Diagnostic> _validateLegacyPluginsOption(
   Source source, {
   required YamlMap options,
   String? firstEnabledPluginName,
@@ -405,7 +406,7 @@
          _PluginsOptionsValidator(),
        ];
 
-  List<AnalysisError> validate(YamlMap options) {
+  List<Diagnostic> validate(YamlMap options) {
     RecordingErrorListener recorder = RecordingErrorListener();
     ErrorReporter reporter = ErrorReporter(recorder, _source);
     for (var validator in _validators) {
diff --git a/tools/VERSION b/tools/VERSION
index d7a6a42..a1f8a82 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 9
 PATCH 0
-PRERELEASE 93
+PRERELEASE 94
 PRERELEASE_PATCH 0