Version 2.15.0-172.0.dev

Merge commit 'bdbb4baea5160ef3ecba97d5684e740c2e110382' into 'dev'
diff --git a/DEPS b/DEPS
index b279283..289ba32 100644
--- a/DEPS
+++ b/DEPS
@@ -139,7 +139,7 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "a817863ee93241ff36fce6856c6d12fd8fde0907",
+  "pub_rev": "37d05928939b3100e7e55c3dff922651db1de1e1",
   "pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..a341d38
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,3 @@
+## Reporting vulnerabilities
+To report potential vulnerabilities, please see our security policy on
+[https://dart.dev/security](https://dart.dev/security).
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index e26da9a..ac84337 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -514,8 +514,8 @@
         var fieldValue = field.evaluationResult?.value;
 
         // It is possible that the evaluation result is null.
-        // This happens for example when we have duplicate fields.
-        // class Test {final x = 1; final x = 2; const Test();}
+        // This happens for example when we have duplicate fields; for example:
+        // `class Test {final x = 1; final x = 2; const Test();}`.
         if (fieldValue == null) {
           continue;
         }
@@ -1103,7 +1103,6 @@
       return constructorTearoffResult;
     } else {
       var typeArguments = <DartType>[];
-      var typeArgumentObjects = <DartObjectImpl>[];
       for (var typeArgument in typeArgumentList.arguments) {
         var object = typeArgument.accept(this);
         if (object == null) {
@@ -1117,7 +1116,6 @@
         // type arguments. Possibly change implementation based on
         // canonicalization rules.
         typeArguments.add(typeArgumentType);
-        typeArgumentObjects.add(object);
       }
       // The result is already instantiated during resolution;
       // [_dartObjectComputer.typeInstantiate] is unnecessary.
@@ -1125,7 +1123,7 @@
         typeSystem,
         node.typeOrThrow,
         FunctionState(node.constructorName.staticElement,
-            typeArguments: typeArgumentObjects),
+            typeArguments: typeArguments),
       );
     }
   }
@@ -1150,7 +1148,6 @@
       return functionResult;
     } else {
       var typeArguments = <DartType>[];
-      var typeArgumentObjects = <DartObjectImpl>[];
       for (var typeArgument in typeArgumentList.arguments) {
         var object = typeArgument.accept(this);
         if (object == null) {
@@ -1164,10 +1161,8 @@
         // type arguments. Possibly change implementation based on
         // canonicalization rules.
         typeArguments.add(typeArgumentType);
-        typeArgumentObjects.add(object);
       }
-      return _dartObjectComputer.typeInstantiate(
-          functionResult, typeArguments, typeArgumentObjects);
+      return _dartObjectComputer.typeInstantiate(functionResult, typeArguments);
     }
   }
 
@@ -1459,7 +1454,7 @@
   DartObjectImpl? visitSimpleIdentifier(SimpleIdentifier node) {
     var value = _lexicalEnvironment?[node.name];
     if (value != null) {
-      return value;
+      return _instantiateFunctionType(node, value);
     }
 
     return _getConstantValue(node, node.staticElement);
@@ -1681,9 +1676,13 @@
       // and errors for other constant expressions. In either case we have
       // already computed values of all dependencies first (or detect a cycle),
       // so the value has already been computed and we can just return it.
-      var value = variableElement.evaluationResult;
-      if (variableElement.isConst && value != null) {
-        return value.value;
+      var result = variableElement.evaluationResult;
+      if (variableElement.isConst && result != null) {
+        var value = result.value;
+        if (value == null) {
+          return value;
+        }
+        return _instantiateFunctionType(node, value);
       }
     } else if (variableElement is ConstructorElement) {
       return DartObjectImpl(
@@ -1746,6 +1745,33 @@
     return null;
   }
 
+  /// If the type of [value] is a generic [FunctionType], and [node] is a
+  /// [SimpleIdentifier] with tear-off type argument types, returns [value]
+  /// type-instantiated with those [node]'s tear-off type argument types,
+  /// otherwise returns [value].
+  DartObjectImpl? _instantiateFunctionType(
+      Expression node, DartObjectImpl value) {
+    if (node is! SimpleIdentifier) {
+      return value;
+    }
+    var functionElement = value.toFunctionValue();
+    if (functionElement is! ExecutableElement) {
+      return value;
+    }
+    var valueType = functionElement.type;
+    if (valueType.typeFormals.isNotEmpty) {
+      var tearOffTypeArgumentTypes = node.tearOffTypeArgumentTypes;
+      if (tearOffTypeArgumentTypes != null &&
+          tearOffTypeArgumentTypes.isNotEmpty) {
+        var instantiatedType =
+            functionElement.type.instantiate(tearOffTypeArgumentTypes);
+        return value.typeInstantiate(
+            typeSystem, instantiatedType, tearOffTypeArgumentTypes);
+      }
+    }
+    return value;
+  }
+
   /// Return `true` if the given [targetResult] represents a string and the
   /// [identifier] is "length".
   bool _isStringLength(
@@ -2186,7 +2212,6 @@
   DartObjectImpl? typeInstantiate(
     DartObjectImpl function,
     List<DartType> typeArguments,
-    List<DartObjectImpl> typeArgumentObjects,
   ) {
     var rawType = function.type;
     if (rawType is FunctionType) {
@@ -2194,7 +2219,7 @@
         return null;
       }
       var type = rawType.instantiate(typeArguments);
-      return function.typeInstantiate(_typeSystem, type, typeArgumentObjects);
+      return function.typeInstantiate(_typeSystem, type, typeArguments);
     } else {
       return null;
     }
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 80943a1..6d3ec97 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -210,8 +210,7 @@
   bool get isUserDefinedObject => _state is GenericState;
 
   @visibleForTesting
-  List<DartObjectImpl>? get typeArguments =>
-      (_state as FunctionState)._typeArguments;
+  List<DartType>? get typeArguments => (_state as FunctionState)._typeArguments;
 
   @override
   bool operator ==(Object object) {
@@ -921,10 +920,13 @@
     return null;
   }
 
+  /// Return the result of type-instantiating this object as [type].
+  ///
+  /// [typeArguments] are the type arguments used in the instantiation.
   DartObjectImpl? typeInstantiate(
     TypeSystemImpl typeSystem,
     FunctionType type,
-    List<DartObjectImpl> typeArguments,
+    List<DartType> typeArguments,
   ) {
     var functionState = _state as FunctionState;
     var element = functionState._element;
@@ -1250,11 +1252,11 @@
   /// The element representing the function being modeled.
   final ExecutableElement? _element;
 
-  final List<DartObjectImpl>? _typeArguments;
+  final List<DartType>? _typeArguments;
 
   /// Initialize a newly created state to represent the function with the given
   /// [element].
-  FunctionState(this._element, {List<DartObjectImpl>? typeArguments})
+  FunctionState(this._element, {List<DartType>? typeArguments})
       : _typeArguments = typeArguments;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index 2fe4604..36357aa 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -247,7 +247,7 @@
   /// generic function type from the surrounding context.
   DartType inferTearOff(
     Expression expression,
-    SimpleIdentifier identifier,
+    SimpleIdentifierImpl identifier,
     DartType tearOffType,
   ) {
     var context = InferenceContext.getContext(expression);
@@ -255,12 +255,11 @@
       var typeArguments = _typeSystem.inferFunctionTypeInstantiation(
         context,
         tearOffType,
-        errorReporter: _resolver.errorReporter,
+        errorReporter: _errorReporter,
         errorNode: expression,
         genericMetadataIsEnabled: _genericMetadataIsEnabled,
       )!;
-      (identifier as SimpleIdentifierImpl).tearOffTypeArgumentTypes =
-          typeArguments;
+      identifier.tearOffTypeArgumentTypes = typeArguments;
       if (typeArguments.isNotEmpty) {
         return tearOffType.instantiate(typeArguments);
       }
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
new file mode 100644
index 0000000..74e44a3
--- /dev/null
+++ b/pkg/analyzer/messages.yaml
@@ -0,0 +1,18738 @@
+AnalysisOptionsErrorCode:
+  INCLUDED_FILE_PARSE_ERROR:
+    template: "{3} in {0}({1}..{2})"
+    comment: |-
+      An error code indicating that there is a syntactic error in the included
+      file.
+
+      Parameters:
+      0: the path of the file containing the error
+      1: the starting offset of the text in the file that contains the error
+      2: the ending offset of the text in the file that contains the error
+      3: the error message
+  PARSE_ERROR:
+    template: "{0}"
+    comment: |-
+      An error code indicating that there is a syntactic error in the file.
+
+      Parameters:
+      0: the error message from the parse error
+AnalysisOptionsHintCode:
+  PREVIEW_DART_2_SETTING_DEPRECATED:
+    template: "The 'enablePreviewDart2' setting is deprecated."
+    tip: It is no longer necessary to explicitly enable Dart 2.
+    comment: |-
+      An error code indicating that the enablePreviewDart2 setting is
+      deprecated.
+  STRONG_MODE_SETTING_DEPRECATED:
+    template: "The 'strong-mode: true' setting is deprecated."
+    tip: It is no longer necessary to explicitly enable strong mode.
+    comment: "An error code indicating that strong-mode: true is deprecated."
+  SUPER_MIXINS_SETTING_DEPRECATED:
+    template: "The 'enableSuperMixins' setting is deprecated."
+    tip: "Support has been added to the language for 'mixin' based mixins."
+    comment: |-
+      An error code indicating that the enablePreviewDart2 setting is
+      deprecated.
+AnalysisOptionsWarningCode:
+  ANALYSIS_OPTION_DEPRECATED:
+    template: "The option '{0}' is no longer supported."
+    comment: An error code indicating that the given option is deprecated.
+  INCLUDED_FILE_WARNING:
+    template: "Warning in the included options file {0}({1}..{2}): {3}"
+    comment: |-
+      An error code indicating a specified include file has a warning.
+
+      Parameters:
+      0: the path of the file containing the warnings
+      1: the starting offset of the text in the file that contains the warning
+      2: the ending offset of the text in the file that contains the warning
+      3: the warning message
+  INCLUDE_FILE_NOT_FOUND:
+    template: "The include file '{0}' in '{1}' can't be found when analyzing '{2}'."
+    comment: |-
+      An error code indicating a specified include file could not be found.
+
+      Parameters:
+      0: the uri of the file to be included
+      1: the path of the file containing the include directive
+      2: the path of the context being analyzed
+  INVALID_OPTION:
+    template: "Invalid option specified for '{0}': {1}"
+    comment: |-
+      An error code indicating that a plugin is being configured with an invalid
+      value for an option and a detail message is provided.
+  INVALID_SECTION_FORMAT:
+    template: "Invalid format for the '{0}' section."
+    comment: |-
+      An error code indicating an invalid format for an options file section.
+
+      Parameters:
+      0: the section name
+  SPEC_MODE_REMOVED:
+    template: "The option 'strong-mode: false' is no longer supported."
+    tip: "It's recommended to remove the 'strong-mode:' setting (and make your code Dart 2 compliant)."
+    comment: "An error code indicating that strong-mode: false is has been removed."
+  UNRECOGNIZED_ERROR_CODE:
+    template: "'{0}' isn't a recognized error code."
+    comment: |-
+      An error code indicating that an unrecognized error code is being used to
+      specify an error filter.
+
+      Parameters:
+      0: the unrecognized error code
+  UNSUPPORTED_OPTION_WITHOUT_VALUES:
+    template: "The option '{1}' isn't supported by '{0}'."
+    comment: |-
+      An error code indicating that a plugin is being configured with an
+      unsupported option and legal options are provided.
+
+      Parameters:
+      0: the plugin name
+      1: the unsupported option key
+  UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
+    template: "The option '{1}' isn't supported by '{0}'. Try using the only supported option: '{2}'."
+    comment: |-
+      An error code indicating that a plugin is being configured with an
+      unsupported option where there is just one legal value.
+
+      Parameters:
+      0: the plugin name
+      1: the unsupported option key
+      2: the legal value
+  UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
+    template: "The option '{1}' isn't supported by '{0}'."
+    tip: "Try using one of the supported options: {2}."
+    comment: |-
+      An error code indicating that a plugin is being configured with an
+      unsupported option and legal options are provided.
+
+      Parameters:
+      0: the plugin name
+      1: the unsupported option key
+      2: legal values
+  UNSUPPORTED_VALUE:
+    template: "The value '{1}' isn't supported by '{0}'."
+    tip: "Try using one of the supported options: {2}."
+    comment: |-
+      An error code indicating that an option entry is being configured with an
+      unsupported value.
+
+      Parameters:
+      0: the option name
+      1: the unsupported value
+      2: legal values
+CompileTimeErrorCode:
+  ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
+    sharedName: ABSTRACT_FIELD_INITIALIZER
+    template: "Abstract fields can't have initializers."
+    tip: "Try removing the field initializer or the 'abstract' keyword from the field declaration."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a field that has the `abstract`
+      modifier also has an initializer.
+
+      #### Example
+
+      The following code produces this diagnostic because `f` is marked as
+      `abstract` and has an initializer:
+
+      ```dart
+      abstract class C {
+        abstract int [!f!] = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because `f` is marked as
+      `abstract` and there's an initializer in the constructor:
+
+      ```dart
+      abstract class C {
+        abstract int f;
+
+        C() : [!f!] = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the field must be abstract, then remove the initializer:
+
+      ```dart
+      abstract class C {
+        abstract int f;
+      }
+      ```
+
+      If the field isn't required to be abstract, then remove the keyword:
+
+      ```dart
+      abstract class C {
+        int f = 0;
+      }
+      ```
+  ABSTRACT_FIELD_INITIALIZER:
+    template: "Abstract fields can't have initializers."
+    tip: "Try removing the initializer or the 'abstract' keyword."
+    hasPublishedDocs: true
+    comment: No parameters.
+  ABSTRACT_SUPER_MEMBER_REFERENCE:
+    template: "The {0} '{1}' is always abstract in the supertype."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the display name for the kind of the found abstract member
+      1: the name of the member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an inherited member is
+      referenced using `super`, but there is no concrete implementation of the
+      member in the superclass chain. Abstract members can't be invoked.
+
+      #### Examples
+
+      The following code produces this diagnostic because `B` doesn't inherit a
+      concrete implementation of `a`:
+
+      ```dart
+      abstract class A {
+        int get a;
+      }
+      class B extends A {
+        int get a => super.[!a!];
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the invocation of the abstract member, possibly replacing it with an
+      invocation of a concrete member.
+      TODO(brianwilkerson) This either needs to be generalized (use 'member'
+       rather than '{0}') or split into multiple codes.
+  AMBIGUOUS_EXPORT:
+    template: "The name '{0}' is defined in the libraries '{1}' and '{2}'."
+    tip: Try removing the export of one of the libraries, or explicitly hiding the name in one of the export directives.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the ambiguous element
+      1: the name of the first library in which the type is found
+      2: the name of the second library in which the type is found
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when two or more export directives
+      cause the same name to be exported from multiple libraries.
+
+      #### Example
+
+      Given a file named `a.dart` containing
+
+      ```dart
+      %uri="lib/a.dart"
+      class C {}
+      ```
+
+      And a file named `b.dart` containing
+
+      ```dart
+      %uri="lib/b.dart"
+      class C {}
+      ```
+
+      The following code produces this diagnostic because the name `C` is being
+      exported from both `a.dart` and `b.dart`:
+
+      ```dart
+      export 'a.dart';
+      export [!'b.dart'!];
+      ```
+
+      #### Common fixes
+
+      If none of the names in one of the libraries needs to be exported, then
+      remove the unnecessary export directives:
+
+      ```dart
+      export 'a.dart';
+      ```
+
+      If all of the export directives are needed, then hide the name in all
+      except one of the directives:
+
+      ```dart
+      export 'a.dart';
+      export 'b.dart' hide C;
+      ```
+  AMBIGUOUS_EXTENSION_MEMBER_ACCESS:
+    template: "A member named '{0}' is defined in extensions {1}, and none are more specific."
+    tip: Try using an extension override to specify the extension you want to be chosen.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+      1: the name of the first declaring extension
+      2: the name of the second declaring extension
+    documentation: |-
+      #### Description
+
+      When code refers to a member of an object (for example, `o.m()` or `o.m` or
+      `o[i]`) where the static type of `o` doesn't declare the member (`m` or
+      `[]`, for example), then the analyzer tries to find the member in an
+      extension. For example, if the member is `m`, then the analyzer looks for
+      extensions that declare a member named `m` and have an extended type that
+      the static type of `o` can be assigned to. When there's more than one such
+      extension in scope, the extension whose extended type is most specific is
+      selected.
+
+      The analyzer produces this diagnostic when none of the extensions has an
+      extended type that's more specific than the extended types of all of the
+      other extensions, making the reference to the member ambiguous.
+
+      #### Examples
+
+      The following code produces this diagnostic because there's no way to
+      choose between the member in `E1` and the member in `E2`:
+
+      ```dart
+      extension E1 on String {
+        int get charCount => 1;
+      }
+
+      extension E2 on String {
+        int get charCount => 2;
+      }
+
+      void f(String s) {
+        print(s.[!charCount!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If you don't need both extensions, then you can delete or hide one of them.
+
+      If you need both, then explicitly select the one you want to use by using
+      an extension override:
+
+      ```dart
+      extension E1 on String {
+        int get charCount => length;
+      }
+
+      extension E2 on String {
+        int get charCount => length;
+      }
+
+      void f(String s) {
+        print(E2(s).charCount);
+      }
+      ```
+  AMBIGUOUS_IMPORT:
+    template: "The name '{0}' is defined in the libraries {1}."
+    tip: "Try using 'as prefix' for one of the import directives, or hiding the name from all but one of the imports."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the ambiguous type
+      1: the name of the first library that the type is found
+      2: the name of the second library that the type is found
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name is referenced that is
+      declared in two or more imported libraries.
+
+      #### Examples
+
+      Given a library (`a.dart`) that defines a class (`C` in this example):
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {}
+      class C {}
+      ```
+
+      And a library (`b.dart`) that defines a different class with the same name:
+
+      ```dart
+      %uri="lib/b.dart"
+      class B {}
+      class C {}
+      ```
+
+      The following code produces this diagnostic:
+
+      ```dart
+      import 'a.dart';
+      import 'b.dart';
+
+      void f([!C!] c1, [!C!] c2) {}
+      ```
+
+      #### Common fixes
+
+      If any of the libraries aren't needed, then remove the import directives
+      for them:
+
+      ```dart
+      import 'a.dart';
+
+      void f(C c1, C c2) {}
+      ```
+
+      If the name is still defined by more than one library, then add a `hide`
+      clause to the import directives for all except one library:
+
+      ```dart
+      import 'a.dart' hide C;
+      import 'b.dart';
+
+      void f(C c1, C c2) {}
+      ```
+
+      If you must be able to reference more than one of these types, then add a
+      prefix to each of the import directives, and qualify the references with
+      the appropriate prefix:
+
+      ```dart
+      import 'a.dart' as a;
+      import 'b.dart' as b;
+
+      void f(a.C c1, b.C c2) {}
+      ```
+  AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
+    template: "The literal can't be either a map or a set because it contains at least one literal map entry or a spread operator spreading a 'Map', and at least one element which is neither of these."
+    tip: Try removing or changing some of the elements so that all of the elements are consistent.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      Because map and set literals use the same delimiters (`{` and `}`), the
+      analyzer looks at the type arguments and the elements to determine which
+      kind of literal you meant. When there are no type arguments, then the
+      analyzer uses the types of the elements. If all of the elements are literal
+      map entries and all of the spread operators are spreading a `Map` then it's
+      a `Map`. If none of the elements are literal map entries and all of the
+      spread operators are spreading an `Iterable`, then it's a `Set`. If neither
+      of those is true then it's ambiguous.
+
+      The analyzer produces this diagnostic when at least one element is a
+      literal map entry or a spread operator spreading a `Map`, and at least one
+      element is neither of these, making it impossible for the analyzer to
+      determine whether you are writing a map literal or a set literal.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      union(Map<String, String> a, List<String> b, Map<String, String> c) =>
+          [!{...a, ...b, ...c}!];
+      ```
+
+      The list `b` can only be spread into a set, and the maps `a` and `c` can
+      only be spread into a map, and the literal can't be both.
+
+      #### Common fixes
+
+      There are two common ways to fix this problem. The first is to remove all
+      of the spread elements of one kind or another, so that the elements are
+      consistent. In this case, that likely means removing the list and deciding
+      what to do about the now unused parameter:
+
+      ```dart
+      union(Map<String, String> a, List<String> b, Map<String, String> c) =>
+          {...a, ...c};
+      ```
+
+      The second fix is to change the elements of one kind into elements that are
+      consistent with the other elements. For example, you can add the elements
+      of the list as keys that map to themselves:
+
+      ```dart
+      union(Map<String, String> a, List<String> b, Map<String, String> c) =>
+          {...a, for (String s in b) s: s, ...c};
+      ```
+  AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
+    template: "This literal must be either a map or a set, but the elements don't have enough information for type inference to work."
+    tip: Try adding type arguments to the literal (one for sets, two for maps).
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      Because map and set literals use the same delimiters (`{` and `}`), the
+      analyzer looks at the type arguments and the elements to determine which
+      kind of literal you meant. When there are no type arguments and all of the
+      elements are spread elements (which are allowed in both kinds of literals)
+      then the analyzer uses the types of the expressions that are being spread.
+      If all of the expressions have the type `Iterable`, then it's a set
+      literal; if they all have the type `Map`, then it's a map literal.
+
+      This diagnostic is produced when none of the expressions being spread have
+      a type that allows the analyzer to decide whether you were writing a map
+      literal or a set literal.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      union(a, b) => [!{...a, ...b}!];
+      ```
+
+      The problem occurs because there are no type arguments, and there is no
+      information about the type of either `a` or `b`.
+
+      #### Common fixes
+
+      There are three common ways to fix this problem. The first is to add type
+      arguments to the literal. For example, if the literal is intended to be a
+      map literal, you might write something like this:
+
+      ```dart
+      union(a, b) => <String, String>{...a, ...b};
+      ```
+
+      The second fix is to add type information so that the expressions have
+      either the type `Iterable` or the type `Map`. You can add an explicit cast
+      or, in this case, add types to the declarations of the two parameters:
+
+      ```dart
+      union(List<int> a, List<int> b) => {...a, ...b};
+      ```
+
+      The third fix is to add context information. In this case, that means
+      adding a return type to the function:
+
+      ```dart
+      Set<String> union(a, b) => {...a, ...b};
+      ```
+
+      In other cases, you might add a type somewhere else. For example, say the
+      original code looks like this:
+
+      ```dart
+      union(a, b) {
+        var x = [!{...a, ...b}!];
+        return x;
+      }
+      ```
+
+      You might add a type annotation on `x`, like this:
+
+      ```dart
+      union(a, b) {
+        Map<String, String> x = {...a, ...b};
+        return x;
+      }
+      ```
+  ARGUMENT_TYPE_NOT_ASSIGNABLE:
+    template: "The argument type '{0}' can't be assigned to the parameter type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the actual argument type
+      1: the name of the expected type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the static type of an argument
+      can't be assigned to the static type of the corresponding parameter.
+
+      #### Examples
+
+      The following code produces this diagnostic because a `num` can't be
+      assigned to a `String`:
+
+      ```dart
+      %language=2.9
+      String f(String x) => x;
+      String g(num y) => f([!y!]);
+      ```
+
+      #### Common fixes
+
+      If possible, rewrite the code so that the static type is assignable. In the
+      example above you might be able to change the type of the parameter `y`:
+
+      ```dart
+      %language=2.9
+      String f(String x) => x;
+      String g(String y) => f(y);
+      ```
+
+      If that fix isn't possible, then add code to handle the case where the
+      argument value isn't the required type. One approach is to coerce other
+      types to the required type:
+
+      ```dart
+      %language=2.9
+      String f(String x) => x;
+      String g(num y) => f(y.toString());
+      ```
+
+      Another approach is to add explicit type tests and fallback code:
+
+      ```dart
+      %language=2.9
+      String f(String x) => x;
+      String g(num y) => f(y is String ? y : '');
+      ```
+
+      If you believe that the runtime type of the argument will always be the
+      same as the static type of the parameter, and you're willing to risk having
+      an exception thrown at runtime if you're wrong, then add an explicit cast:
+
+      ```dart
+      String f(String x) => x;
+      String g(num y) => f(y as String);
+      ```
+  ASSERT_IN_REDIRECTING_CONSTRUCTOR:
+    template: "A redirecting constructor can't have an 'assert' initializer."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a redirecting constructor (a
+      constructor that redirects to another constructor in the same class) has an
+      assert in the initializer list.
+
+      #### Example
+
+      The following code produces this diagnostic because the unnamed constructor
+      is a redirecting constructor and also has an assert in the initializer
+      list:
+
+      ```dart
+      class C {
+        C(int x) : [!assert(x > 0)!], this.name();
+        C.name() {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the assert isn't needed, then remove it:
+
+      ```dart
+      class C {
+        C(int x) : this.name();
+        C.name() {}
+      }
+      ```
+
+      If the assert is needed, then convert the constructor into a factory
+      constructor:
+
+      ```dart
+      class C {
+        factory C(int x) {
+          assert(x > 0);
+          return C.name();
+        }
+        C.name() {}
+      }
+      ```
+  ASSIGNMENT_TO_CONST:
+    template: "Constant variables can't be assigned a value."
+    tip: "Try removing the assignment, or remove the modifier 'const' from the variable."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an assignment to a
+      top-level variable, a static field, or a local variable that has the
+      `const` modifier. The value of a compile-time constant can't be changed at
+      runtime.
+
+      #### Example
+
+      The following code produces this diagnostic because `c` is being assigned a
+      value even though it has the `const` modifier:
+
+      ```dart
+      const c = 0;
+
+      void f() {
+        [!c!] = 1;
+        print(c);
+      }
+      ```
+
+      #### Common fixes
+
+      If the variable must be assignable, then remove the `const` modifier:
+
+      ```dart
+      var c = 0;
+
+      void f() {
+        c = 1;
+        print(c);
+      }
+      ```
+
+      If the constant shouldn't be changed, then either remove the assignment or
+      use a local variable in place of references to the constant:
+
+      ```dart
+      const c = 0;
+
+      void f() {
+        var v = 1;
+        print(v);
+      }
+      ```
+  ASSIGNMENT_TO_FINAL:
+    template: "'{0}' can't be used as a setter because it's final."
+    tip: "Try finding a different setter, or making '{0}' non-final."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the final variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an invocation of a
+      setter, but there's no setter because the field with the same name was
+      declared to be `final` or `const`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `v` is final:
+
+      ```dart
+      class C {
+        final v = 0;
+      }
+
+      f(C c) {
+        c.[!v!] = 1;
+      }
+      ```
+
+      #### Common fixes
+
+      If you need to be able to set the value of the field, then remove the
+      modifier `final` from the field:
+
+      ```dart
+      class C {
+        int v = 0;
+      }
+
+      f(C c) {
+        c.v = 1;
+      }
+      ```
+  ASSIGNMENT_TO_FINAL_LOCAL:
+    template: "The final variable '{0}' can only be set once."
+    tip: "Try making '{0}' non-final."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a local variable that was
+      declared to be final is assigned after it was initialized.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is final, so it
+      can't have a value assigned to it after it was initialized:
+
+      ```dart
+      void f() {
+        final x = 0;
+        [!x!] = 3;
+        print(x);
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the keyword `final`, and replace it with `var` if there's no type
+      annotation:
+
+      ```dart
+      void f() {
+        var x = 0;
+        x = 3;
+        print(x);
+      }
+      ```
+  ASSIGNMENT_TO_FINAL_NO_SETTER:
+    template: "There isn’t a setter named '{0}' in class '{1}'."
+    tip: Try correcting the name to reference an existing setter, or declare the setter.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a reference to a setter is
+      found; there is no setter defined for the type; but there is a getter
+      defined with the same name.
+
+      #### Examples
+
+      The following code produces this diagnostic because there is no setter
+      named `x` in `C`, but there is a getter named `x`:
+
+      ```dart
+      class C {
+        int get x => 0;
+        set y(int p) {}
+      }
+
+      void f(C c) {
+        c.[!x!] = 1;
+      }
+      ```
+
+      #### Common fixes
+
+      If you want to invoke an existing setter, then correct the name:
+
+      ```dart
+      class C {
+        int get x => 0;
+        set y(int p) {}
+      }
+
+      void f(C c) {
+        c.y = 1;
+      }
+      ```
+
+      If you want to invoke the setter but it just doesn't exist yet, then
+      declare it:
+
+      ```dart
+      class C {
+        int get x => 0;
+        set x(int p) {}
+        set y(int p) {}
+      }
+
+      void f(C c) {
+        c.x = 1;
+      }
+      ```
+  ASSIGNMENT_TO_FUNCTION:
+    template: "Functions can't be assigned a value."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name of a function appears
+      on the left-hand side of an assignment expression.
+
+      #### Example
+
+      The following code produces this diagnostic because the assignment to the
+      function `f` is invalid:
+
+      ```dart
+      void f() {}
+
+      void g() {
+        [!f!] = () {};
+      }
+      ```
+
+      #### Common fixes
+
+      If the right-hand side should be assigned to something else, such as a
+      local variable, then change the left-hand side:
+
+      ```dart
+      void f() {}
+
+      void g() {
+        var x = () {};
+        print(x);
+      }
+      ```
+
+      If the intent is to change the implementation of the function, then define
+      a function-valued variable instead of a function:
+
+      ```dart
+      void Function() f = () {};
+
+      void g() {
+        f = () {};
+      }
+      ```
+  ASSIGNMENT_TO_METHOD:
+    template: "Methods can't be assigned a value."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the target of an assignment is a
+      method.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` can't be assigned a
+      value because it's a method:
+
+      ```dart
+      class C {
+        void f() {}
+
+        void g() {
+          [!f!] = null;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Rewrite the code so that there isn't an assignment to a method.
+  ASSIGNMENT_TO_TYPE:
+    template: "Types can't be assigned a value."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name of a type name appears
+      on the left-hand side of an assignment expression.
+
+      #### Example
+
+      The following code produces this diagnostic because the assignment to the
+      class `C` is invalid:
+
+      ```dart
+      class C {}
+
+      void f() {
+        [!C!] = null;
+      }
+      ```
+
+      #### Common fixes
+
+      If the right-hand side should be assigned to something else, such as a
+      local variable, then change the left-hand side:
+
+      ```dart
+      void f() {}
+
+      void g() {
+        var c = null;
+        print(c);
+      }
+      ```
+  ASYNC_FOR_IN_WRONG_CONTEXT:
+    template: The async for-in loop can only be used in an async function.
+    tip: "Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for-in loop."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an async for-in loop is found in
+      a function or method whose body isn't marked as being either `async` or
+      `async*`.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of `f` isn't
+      marked as being either `async` or `async*`, but `f` contains an async
+      for-in loop:
+
+      ```dart
+      void f(list) {
+        await for (var e [!in!] list) {
+          print(e);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the function should return a `Future`, then mark the body with `async`:
+
+      ```dart
+      Future<void> f(list) async {
+        await for (var e in list) {
+          print(e);
+        }
+      }
+      ```
+
+      If the function should return a `Stream` of values, then mark the body with
+      `async*`:
+
+      ```dart
+      Stream<void> f(list) async* {
+        await for (var e in list) {
+          print(e);
+        }
+      }
+      ```
+
+      If the function should be synchronous, then remove the `await` before the
+      loop:
+
+      ```dart
+      void f(list) {
+        for (var e in list) {
+          print(e);
+        }
+      }
+      ```
+  AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
+    template: "The 'await' expression can't be used in a 'late' local variable's initializer."
+    tip: "Try removing the 'late' modifier, or rewriting the initializer without using the 'await' expression."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a local variable that has the
+      `late` modifier uses an `await` expression in the initializer.
+
+      #### Example
+
+      The following code produces this diagnostic because an `await` expression
+      is used in the initializer for `v`, a local variable that is marked `late`:
+
+      ```dart
+      Future<int> f() async {
+        late var v = [!await!] 42;
+        return v;
+      }
+      ```
+
+      #### Common fixes
+
+      If the initializer can be rewritten to not use `await`, then rewrite it:
+
+      ```dart
+      Future<int> f() async {
+        late var v = 42;
+        return v;
+      }
+      ```
+
+      If the initializer can't be rewritten, then remove the `late` modifier:
+
+      ```dart
+      Future<int> f() async {
+        var v = await 42;
+        return v;
+      }
+      ```
+  AWAIT_IN_WRONG_CONTEXT:
+    template: The await expression can only be used in an async function.
+    tip: "Try marking the function body with either 'async' or 'async*'."
+    comment: |-
+      16.30 Await Expressions: It is a compile-time error if the function
+      immediately enclosing _a_ is not declared asynchronous. (Where _a_ is the
+      await expression.)
+  BODY_MIGHT_COMPLETE_NORMALLY:
+    template: "The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type."
+    tip: Try adding either a return or a throw statement at the end.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function has a
+      return type that's [potentially non-nullable][] but would implicitly return
+      `null` if control reached the end of the function.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `m` has an
+      implicit return of `null` inserted at the end of the method, but the method
+      is declared to not return `null`:
+
+      ```dart
+      class C {
+        int [!m!](int t) {
+          print(t);
+        }
+      }
+      ```
+
+      The following code produces this diagnostic because the method `m` has an
+      implicit return of `null` inserted at the end of the method, but because
+      the class `C` can be instantiated with a non-nullable type argument, the
+      method is effectively declared to not return `null`:
+
+      ```dart
+      class C<T> {
+        T [!m!](T t) {
+          print(t);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If there's a reasonable value that can be returned, then add a `return`
+      statement at the end of the method:
+
+      ```dart
+      class C<T> {
+        T m(T t) {
+          print(t);
+          return t;
+        }
+      }
+      ```
+
+      If the method won't reach the implicit return, then add a `throw` at the
+      end of the method:
+
+      ```dart
+      class C<T> {
+        T m(T t) {
+          print(t);
+          throw '';
+        }
+      }
+      ```
+
+      If the method intentionally returns `null` at the end, then change the
+      return type so that it's valid to return `null`:
+
+      ```dart
+      class C<T> {
+        T? m(T t) {
+          print(t);
+        }
+      }
+      ```
+  BREAK_LABEL_ON_SWITCH_MEMBER:
+    template: "A break label resolves to the 'case' or 'default' statement."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a break in a case clause inside
+      a switch statement has a label that is associated with another case clause.
+
+      #### Example
+
+      The following code produces this diagnostic because the label `l` is
+      associated with the case clause for `0`:
+
+      ```dart
+      void f(int i) {
+        switch (i) {
+          l: case 0:
+            break;
+          case 1:
+            break [!l!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the intent is to transfer control to the statement after the switch,
+      then remove the label from the break statement:
+
+      ```dart
+      void f(int i) {
+        switch (i) {
+          case 0:
+            break;
+          case 1:
+            break;
+        }
+      }
+      ```
+
+      If the intent is to transfer control to a different case block, then use
+      `continue` rather than `break`:
+
+      ```dart
+      void f(int i) {
+        switch (i) {
+          l: case 0:
+            break;
+          case 1:
+            continue l;
+        }
+      }
+      ```
+  BUILT_IN_IDENTIFIER_AS_TYPE:
+    template: "The built-in identifier '{0}' can't be used as a type."
+    tip: Try correcting the name to match an existing type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a built-in identifier is used
+      where a type name is expected.
+
+      #### Examples
+
+      The following code produces this diagnostic because `import` can't be used
+      as a type because it's a built-in identifier:
+
+      ```dart
+      [!import!]<int> x;
+      ```
+
+      #### Common fixes
+
+      Replace the built-in identifier with the name of a valid type:
+
+      ```dart
+      List<int> x;
+      ```
+  BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME:
+    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
+    template: "The built-in identifier '{0}' can't be used as an extension name."
+    tip: Try choosing a different name for the extension.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name used in the declaration
+      of a class, extension, mixin, typedef, type parameter, or import prefix is
+      a built-in identifier. Built-in identifiers can’t be used to name any of
+      these kinds of declarations.
+
+      #### Example
+
+      The following code produces this diagnostic because `mixin` is a built-in
+      identifier:
+
+      ```dart
+      extension [!mixin!] on int {}
+      ```
+
+      #### Common fixes
+
+      Choose a different name for the declaration.
+  BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
+    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
+    template: "The built-in identifier '{0}' can't be used as a prefix name."
+    tip: Try choosing a different name for the prefix.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+  BUILT_IN_IDENTIFIER_AS_TYPE_NAME:
+    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
+    template: "The built-in identifier '{0}' can't be used as a type name."
+    tip: Try choosing a different name for the type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+  BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME:
+    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
+    template: "The built-in identifier '{0}' can't be used as a type parameter name."
+    tip: Try choosing a different name for the type parameter.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+  BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME:
+    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
+    template: "The built-in identifier '{0}' can't be used as a typedef name."
+    tip: Try choosing a different name for the typedef.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the built-in identifier that is being used
+  CASE_BLOCK_NOT_TERMINATED:
+    template: "The last statement of the 'case' should be 'break', 'continue', 'rethrow', 'return', or 'throw'."
+    tip: Try adding one of the required statements.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the last statement in a `case`
+      block isn't one of the required terminators: `break`, `continue`,
+      `rethrow`, `return`, or `throw`.
+
+      #### Examples
+
+      The following code produces this diagnostic because the `case` block ends
+      with an assignment:
+
+      ```dart
+      %language=2.9
+      void f(int x) {
+        switch (x) {
+          [!case!] 0:
+            x += 2;
+          default:
+            x += 1;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Add one of the required terminators:
+
+      ```dart
+      %language=2.9
+      void f(int x) {
+        switch (x) {
+          case 0:
+            x += 2;
+            break;
+          default:
+            x += 1;
+        }
+      }
+      ```
+  CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+    template: "The switch case expression type '{0}' can't override the '==' operator."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the this of the switch case expression
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of the expression
+      following the keyword `case` has an implementation of the `==` operator
+      other than the one in `Object`.
+
+      #### Example
+
+      The following code produces this diagnostic because the expression
+      following the keyword `case` (`C(0)`) has the type `C`, and the class `C`
+      overrides the `==` operator:
+
+      ```dart
+      class C {
+        final int value;
+
+        const C(this.value);
+
+        bool operator ==(Object other) {
+          return false;
+        }
+      }
+
+      void f(C c) {
+        switch (c) {
+          case [!C(0)!]:
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If there isn't a strong reason not to do so, then rewrite the code to use
+      an if-else structure:
+
+      ```dart
+      class C {
+        final int value;
+
+        const C(this.value);
+
+        bool operator ==(Object other) {
+          return false;
+        }
+      }
+
+      void f(C c) {
+        if (c == C(0)) {
+          // ...
+        }
+      }
+      ```
+
+      If you can't rewrite the switch statement and the implementation of `==`
+      isn't necessary, then remove it:
+
+      ```dart
+      class C {
+        final int value;
+
+        const C(this.value);
+      }
+
+      void f(C c) {
+        switch (c) {
+          case C(0):
+            break;
+        }
+      }
+      ```
+
+      If you can't rewrite the switch statement and you can't remove the
+      definition of `==`, then find some other value that can be used to control
+      the switch:
+
+      ```dart
+      class C {
+        final int value;
+
+        const C(this.value);
+
+        bool operator ==(Object other) {
+          return false;
+        }
+      }
+
+      void f(C c) {
+        switch (c.value) {
+          case 0:
+            break;
+        }
+      }
+      ```
+  CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE:
+    template: "The switch case expression type '{0}' must be a subtype of the switch expression type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the case expression
+      1: the type of the switch expression
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression following `case`
+      in a `switch` statement has a static type that isn't a subtype of the
+      static type of the expression following `switch`.
+
+      #### Example
+
+      The following code produces this diagnostic because `1` is an `int`, which
+      isn't a subtype of `String` (the type of `s`):
+
+      ```dart
+      void f(String s) {
+        switch (s) {
+          case [!1!]:
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the value of the `case` expression is wrong, then change the `case`
+      expression so that it has the required type:
+
+      ```dart
+      void f(String s) {
+        switch (s) {
+          case '1':
+            break;
+        }
+      }
+      ```
+
+      If the value of the `case` expression is correct, then change the `switch`
+      expression to have the required type:
+
+      ```dart
+      void f(int s) {
+        switch (s) {
+          case 1:
+            break;
+        }
+      }
+      ```
+  CAST_TO_NON_TYPE:
+    template: "The name '{0}' isn't a type, so it can't be used in an 'as' expression."
+    tip: "Try changing the name to the name of an existing type, or creating a type with the name '{0}'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name following the `as` in a
+      cast expression is defined to be something other than a type.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is a variable, not
+      a type:
+
+      ```dart
+      num x = 0;
+      int y = x as [!x!];
+      ```
+
+      #### Common fixes
+
+      Replace the name with the name of a type:
+
+      ```dart
+      num x = 0;
+      int y = x as int;
+      ```
+  CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
+    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
+    template: "The instance member '{0}' can't be accessed on a class instantiation."
+    tip: Try changing the member name to the name of a constructor.
+    comment: |-
+      Parameters:
+      0: the name of the member
+  CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
+    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
+    template: "The class '{0} doesn't have a constructor named '{1}."
+    tip: "Try invoking a different constructor, or defining a constructor named '{1}'."
+    comment: |-
+      Parameters:
+      0: the name of the member
+  CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
+    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
+    template: "The static member '{0}' can't be accessed on a class instantiation."
+    tip: Try removing the type arguments from the class name, or changing the member name to the name of a constructor.
+    comment: |-
+      Parameters:
+      0: the name of the member
+  NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
+    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
+    template: "Constant values from a deferred library can't be used as keys in a 'const' map literal."
+    tip: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
+    hasPublishedDocs: true
+    comment: No parameters.
+  NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
+    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
+    template: "Constant values from a deferred library can't be used as values in a 'const' list literal."
+    tip: "Try removing the keyword 'const' from the list literal or removing the keyword 'deferred' from the import."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a collection literal that is
+      either explicitly (because it's prefixed by the `const` keyword) or
+      implicitly (because it appears in a [constant context][]) a constant
+      contains a value that is declared in a library that is imported using a
+      deferred import. Constants are evaluated at compile time, and values from
+      deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines the constant `zero`:
+
+      ```dart
+      %uri="lib/a.dart"
+      const zero = 0;
+      ```
+
+      The following code produces this diagnostic because the constant list
+      literal contains `a.zero`, which is imported using a `deferred` import:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      var l = const [[!a.zero!]];
+      ```
+
+      #### Common fixes
+
+      If the collection literal isn't required to be constant, then remove the
+      `const` keyword:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      var l = [a.zero];
+      ```
+
+      If the collection is required to be constant and the imported constant must
+      be referenced, then remove the keyword `deferred` from the import:
+
+      ```dart
+      import 'a.dart' as a;
+
+      var l = const [a.zero];
+      ```
+
+      If you don't need to reference the constant, then replace it with a
+      suitable value:
+
+      ```dart
+      var l = const [0];
+      ```
+  SET_ELEMENT_FROM_DEFERRED_LIBRARY:
+    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
+    template: "Constant values from a deferred library can't be used as values in a 'const' set literal."
+    tip: "Try removing the keyword 'const' from the set literal or removing the keyword 'deferred' from the import."
+    hasPublishedDocs: true
+    comment: No parameters.
+  NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY:
+    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
+    template: "Constant values from a deferred library can't be used as values in a 'const' map literal."
+    tip: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
+    hasPublishedDocs: true
+    comment: No parameters.
+  CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
+    template: "'{0}' must have a method body because '{1}' isn't abstract."
+    tip: "Try making '{1}' abstract, or adding a body to '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the abstract method
+      1: the name of the enclosing class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member of a concrete class is
+      found that doesn't have a concrete implementation. Concrete classes aren't
+      allowed to contain abstract members.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` is an abstract
+      method but `C` isn't an abstract class:
+
+      ```dart
+      class C {
+        [!void m();!]
+      }
+      ```
+
+      #### Common fixes
+
+      If it's valid to create instances of the class, provide an implementation
+      for the member:
+
+      ```dart
+      class C {
+        void m() {}
+      }
+      ```
+
+      If it isn't valid to create instances of the class, mark the class as being
+      abstract:
+
+      ```dart
+      abstract class C {
+        void m();
+      }
+      ```
+  CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD:
+    sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+    template: "'{0}' can't be used to name both a constructor and a static field in this class."
+    tip: Try renaming either the constructor or the field.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the constructor and field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a named constructor and either a
+      static method or static field have the same name. Both are accessed using
+      the name of the class, so having the same name makes the reference
+      ambiguous.
+
+      #### Example
+
+      The following code produces this diagnostic because the static field `foo`
+      and the named constructor `foo` have the same name:
+
+      ```dart
+      class C {
+        C.[!foo!]();
+        static int foo = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because the static method `foo`
+      and the named constructor `foo` have the same name:
+
+      ```dart
+      class C {
+        C.[!foo!]();
+        static void foo() {}
+      }
+      ```
+
+      #### Common fixes
+
+      Rename either the member or the constructor.
+  CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER:
+    sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+    template: "'{0}' can't be used to name both a constructor and a static getter in this class."
+    tip: Try renaming either the constructor or the getter.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the constructor and getter
+  CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD:
+    sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+    template: "'{0}' can't be used to name both a constructor and a static method in this class."
+    tip: Try renaming either the constructor or the method.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the constructor
+  CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER:
+    sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+    template: "'{0}' can't be used to name both a constructor and a static setter in this class."
+    tip: Try renaming either the constructor or the setter.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the constructor and setter
+  CONFLICTING_FIELD_AND_METHOD:
+    template: "Class '{0}' can't define field '{1}' and have method '{2}.{1}' with the same name."
+    tip: "Try converting the getter to a method, or renaming the field to a name that doesn't conflict."
+    comment: |-
+      10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+      error if `C` declares a getter or a setter with basename `n`, and has a
+      method named `n`.
+
+      Parameters:
+      0: the name of the class defining the conflicting field
+      1: the name of the conflicting field
+      2: the name of the class defining the method with which the field conflicts
+  CONFLICTING_GENERIC_INTERFACES:
+    template: "The class '{0}' can't implement both '{1}' and '{2}' because the type arguments are different."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class implementing the conflicting interface
+      1: the first conflicting type
+      2: the second conflicting type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class attempts to implement a
+      generic interface multiple times, and the values of the type arguments
+      aren't the same.
+
+      #### Example
+
+      The following code produces this diagnostic because `C` is defined to
+      implement both `I<int>` (because it extends `A`) and `I<String>` (because
+      it implements`B`), but `int` and `String` aren't the same type:
+
+      ```dart
+      class I<T> {}
+      class A implements I<int> {}
+      class B implements I<String> {}
+      class [!C!] extends A implements B {}
+      ```
+
+      #### Common fixes
+
+      Rework the type hierarchy to avoid this situation. For example, you might
+      make one or both of the inherited types generic so that `C` can specify the
+      same type for both type arguments:
+
+      ```dart
+      class I<T> {}
+      class A<S> implements I<S> {}
+      class B implements I<String> {}
+      class C extends A<String> implements B {}
+      ```
+  CONFLICTING_METHOD_AND_FIELD:
+    template: "Class '{0}' can't define method '{1}' and have field '{2}.{1}' with the same name."
+    tip: "Try converting the method to a getter, or renaming the method to a name that doesn't conflict."
+    comment: |-
+      10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+      error if `C` declares a method named `n`, and has a getter or a setter
+      with basename `n`.
+
+      Parameters:
+      0: the name of the class defining the conflicting method
+      1: the name of the conflicting method
+      2: the name of the class defining the field with which the method conflicts
+  CONFLICTING_STATIC_AND_INSTANCE:
+    template: "Class '{0}' can't define static member '{1}' and have instance member '{2}.{1}' with the same name."
+    tip: "Try renaming the member to a name that doesn't conflict."
+    comment: |-
+      10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+      error if `C` declares a static member with basename `n`, and has an
+      instance member with basename `n`.
+
+      Parameters:
+      0: the name of the class defining the conflicting member
+      1: the name of the conflicting static member
+      2: the name of the class defining the field with which the method conflicts
+  CONFLICTING_TYPE_VARIABLE_AND_CLASS:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
+    template: "'{0}' can't be used to name both a type variable and the class in which the type variable is defined."
+    tip: Try renaming either the type variable or the class.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class, mixin, or extension
+      declaration declares a type parameter with the same name as the class,
+      mixin, or extension that declares it.
+
+      #### Example
+
+      The following code produces this diagnostic because the type parameter `C`
+      has the same name as the class `C` of which it's a part:
+
+      ```dart
+      class C<[!C!]> {}
+      ```
+
+      #### Common fixes
+
+      Rename either the type parameter, or the class, mixin, or extension:
+
+      ```dart
+      class C<T> {}
+      ```
+  CONFLICTING_TYPE_VARIABLE_AND_EXTENSION:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
+    template: "'{0}' can't be used to name both a type variable and the extension in which the type variable is defined."
+    tip: Try renaming either the type variable or the extension.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+  CONFLICTING_TYPE_VARIABLE_AND_MIXIN:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
+    template: "'{0}' can't be used to name both a type variable and the mixin in which the type variable is defined."
+    tip: Try renaming either the type variable or the mixin.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+    template: "'{0}' can't be used to name both a type variable and a member in this class."
+    tip: Try renaming either the type variable or the member.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class, mixin, or extension
+      declaration declares a type parameter with the same name as one of the
+      members of the class, mixin, or extension that declares it.
+
+      #### Example
+
+      The following code produces this diagnostic because the type parameter `T`
+      has the same name as the field `T`:
+
+      ```dart
+      class C<[!T!]> {
+        int T = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Rename either the type parameter or the member with which it conflicts:
+
+      ```dart
+      class C<T> {
+        int total = 0;
+      }
+      ```
+  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+    template: "'{0}' can't be used to name both a type variable and a member in this mixin."
+    tip: Try renaming either the type variable or the member.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+    template: "'{0}' can't be used to name both a type variable and a member in this extension."
+    tip: Try renaming either the type variable or the member.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
+  CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
+    template: "In a const constructor, a value of type '{0}' can't be assigned to the field '{1}', which has type '{2}'."
+    tip: "Try using a subtype, or removing the keyword 'const'."
+    comment: |-
+      16.12.2 Const: It is a compile-time error if evaluation of a constant
+      object results in an uncaught exception being thrown.
+  CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
+    template: "A value of type '{0}' can't be assigned to a parameter of type '{1}' in a const constructor."
+    tip: "Try using a subtype, or removing the keyword 'const'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the runtime value of the argument
+      1: the static type of the parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the runtime type of a constant
+      value can't be assigned to the static type of a constant constructor's
+      parameter.
+
+      #### Example
+
+      The following code produces this diagnostic because the runtime type of `i`
+      is `int`, which can't be assigned to the static type of `s`:
+
+      ```dart
+      class C {
+        final String s;
+
+        const C(this.s);
+      }
+
+      const dynamic i = 0;
+
+      void f() {
+        const C([!i!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Pass a value of the correct type to the constructor:
+
+      ```dart
+      class C {
+        final String s;
+
+        const C(this.s);
+      }
+
+      const dynamic i = 0;
+
+      void f() {
+        const C('$i');
+      }
+      ```
+  CONST_CONSTRUCTOR_THROWS_EXCEPTION:
+    template: "Const constructors can't throw exceptions."
+    tip: "Try removing the throw statement, or removing the keyword 'const'."
+    comment: |-
+      16.12.2 Const: It is a compile-time error if evaluation of a constant
+      object results in an uncaught exception being thrown.
+  CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST:
+    template: "Can't define the 'const' constructor because the field '{0}' is initialized with a non-constant value."
+    tip: "Try initializing the field to a constant value, or removing the keyword 'const' from the constructor."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor has the keyword
+      `const`, but a field in the class is initialized to a non-constant value.
+
+      #### Example
+
+      The following code produces this diagnostic because the field `s` is
+      initialized to a non-constant value:
+
+      ```dart
+      class C {
+        final String s = 3.toString();
+        [!const!] C();
+      }
+      ```
+
+      #### Common fixes
+
+      If the field can be initialized to a constant value, then change the
+      initializer to a constant expression:
+
+      ```dart
+      class C {
+        final String s = '3';
+        const C();
+      }
+      ```
+
+      If the field can't be initialized to a constant value, then remove the
+      keyword `const` from the constructor:
+
+      ```dart
+      class C {
+        final String s = 3.toString();
+        C();
+      }
+      ```
+  CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
+    template: "This constructor can't be declared 'const' because a mixin adds the instance field: {0}."
+    tip: "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the field from the mixin class."
+    comment: |-
+      7.6.3 Constant Constructors: The superinitializer that appears, explicitly
+      or implicitly, in the initializer list of a constant constructor must
+      specify a constant constructor of the superclass of the immediately
+      enclosing class or a compile-time error occurs.
+
+      12.1 Mixin Application: For each generative constructor named ... an
+      implicitly declared constructor named ... is declared. If Sq is a
+      generative const constructor, and M does not declare any fields, Cq is
+      also a const constructor.
+
+      Parameters:
+      0: the name of the instance field.
+  CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS:
+    sharedName: CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD
+    template: "This constructor can't be declared 'const' because the mixins add the instance fields: {0}."
+    tip: "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the fields from the mixin classes."
+    comment: |-
+      7.6.3 Constant Constructors: The superinitializer that appears, explicitly
+      or implicitly, in the initializer list of a constant constructor must
+      specify a constant constructor of the superclass of the immediately
+      enclosing class or a compile-time error occurs.
+
+      12.1 Mixin Application: For each generative constructor named ... an
+      implicitly declared constructor named ... is declared. If Sq is a
+      generative const constructor, and M does not declare any fields, Cq is
+      also a const constructor.
+
+      Parameters:
+      0: the names of the instance fields.
+  CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER:
+    template: "A constant constructor can't call a non-constant super constructor of '{0}'."
+    tip: "Try calling a constant constructor in the superclass, or removing the keyword 'const' from the constructor."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the superclass
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor that is marked as
+      `const` invokes a constructor from its superclass that isn't marked as
+      `const`.
+
+      #### Example
+
+      The following code produces this diagnostic because the `const` constructor
+      in `B` invokes the constructor `nonConst` from the class `A`, and the
+      superclass constructor isn't a `const` constructor:
+
+      ```dart
+      class A {
+        const A();
+        A.nonConst();
+      }
+
+      class B extends A {
+        const B() : [!super.nonConst()!];
+      }
+      ```
+
+      #### Common fixes
+
+      If it isn't essential to invoke the superclass constructor that is
+      currently being invoked, then invoke a constant constructor from the
+      superclass:
+
+      ```dart
+      class A {
+        const A();
+        A.nonConst();
+      }
+
+      class B extends A {
+        const B() : super();
+      }
+      ```
+
+      If it's essential that the current constructor be invoked and if you can
+      modify it, then add `const` to the constructor in the superclass:
+
+      ```dart
+      class A {
+        const A();
+        const A.nonConst();
+      }
+
+      class B extends A {
+        const B() : super.nonConst();
+      }
+      ```
+
+      If it's essential that the current constructor be invoked and you can't
+      modify it, then remove `const` from the constructor in the subclass:
+
+      ```dart
+      class A {
+        const A();
+        A.nonConst();
+      }
+
+      class B extends A {
+        B() : super.nonConst();
+      }
+      ```
+  CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD:
+    template: "Can't define a const constructor for a class with non-final fields."
+    tip: "Try making all of the fields final, or removing the keyword 'const' from the constructor."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor is marked as a
+      const constructor, but the constructor is defined in a class that has at
+      least one non-final instance field (either directly or by inheritance).
+
+      #### Examples
+
+      The following code produces this diagnostic because the field `x` isn't
+      final:
+
+      ```dart
+      class C {
+        int x;
+
+        const [!C!](this.x);
+      }
+      ```
+
+      #### Common fixes
+
+      If it's possible to mark all of the fields as final, then do so:
+
+      ```dart
+      class C {
+        final int x;
+
+        const C(this.x);
+      }
+      ```
+
+      If it isn't possible to mark all of the fields as final, then remove the
+      keyword `const` from the constructor:
+
+      ```dart
+      class C {
+        int x;
+
+        C(this.x);
+      }
+      ```
+  CONST_DEFERRED_CLASS:
+    template: "Deferred classes can't be created with 'const'."
+    tip: "Try using 'new' to create the instance, or changing the import to not be deferred."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class from a library that is
+      imported using a deferred import is used to create a `const` object.
+      Constants are evaluated at compile time, and classes from deferred
+      libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      The following code produces this diagnostic because it attempts to create a
+      `const` instance of a class from a deferred library:
+
+      ```dart
+      import 'dart:convert' deferred as convert;
+
+      const json2 = [!convert.JsonCodec()!];
+      ```
+
+      #### Common fixes
+
+      If the object isn't required to be a constant, then change the code so that
+      a non-constant instance is created:
+
+      ```dart
+      import 'dart:convert' deferred as convert;
+
+      final json2 = convert.JsonCodec();
+      ```
+
+      If the object must be a constant, then remove `deferred` from the import
+      directive:
+
+      ```dart
+      import 'dart:convert' as convert;
+
+      const json2 = convert.JsonCodec();
+      ```
+  CONST_EVAL_THROWS_EXCEPTION:
+    template: Evaluation of this constant expression throws an exception.
+    comment: |-
+      16.12.2 Const: It is a compile-time error if evaluation of a constant
+      object results in an uncaught exception being thrown.
+  CONST_EVAL_THROWS_IDBZE:
+    template: Evaluation of this constant expression throws an IntegerDivisionByZeroException.
+    comment: |-
+      16.12.2 Const: It is a compile-time error if evaluation of a constant
+      object results in an uncaught exception being thrown.
+  CONST_EVAL_TYPE_BOOL:
+    template: "In constant expressions, operands of this operator must be of type 'bool'."
+    comment: |-
+      16.12.2 Const: An expression of one of the forms !e, e1 && e2 or e1 || e2,
+      where e, e1 and e2 are constant expressions that evaluate to a boolean
+      value.
+  CONST_EVAL_TYPE_BOOL_INT:
+    template: "In constant expressions, operands of this operator must be of type 'bool' or 'int'."
+    comment: |-
+      16.12.2 Const: An expression of one of the forms !e, e1 && e2 or e1 || e2,
+      where e, e1 and e2 are constant expressions that evaluate to a boolean
+      value.
+  CONST_EVAL_TYPE_BOOL_NUM_STRING:
+    template: "In constant expressions, operands of this operator must be of type 'bool', 'num', 'String' or 'null'."
+    comment: |-
+      16.12.2 Const: An expression of one of the forms e1 == e2 or e1 != e2 where
+      e1 and e2 are constant expressions that evaluate to a numeric, string or
+      boolean value or to null.
+  CONST_EVAL_TYPE_INT:
+    template: "In constant expressions, operands of this operator must be of type 'int'."
+    comment: |-
+      16.12.2 Const: An expression of one of the forms ~e, e1 ^ e2, e1 & e2,
+      e1 | e2, e1 >> e2 or e1 << e2, where e, e1 and e2 are constant expressions
+      that evaluate to an integer value or to null.
+  CONST_EVAL_TYPE_NUM:
+    template: "In constant expressions, operands of this operator must be of type 'num'."
+    comment: |-
+      16.12.2 Const: An expression of one of the forms e, e1 + e2, e1 - e2, e1
+      e2, e1 / e2, e1 ~/ e2, e1 > e2, e1 < e2, e1 >= e2, e1 <= e2 or e1 % e2,
+      where e, e1 and e2 are constant expressions that evaluate to a numeric
+      value or to null.
+  CONST_EVAL_TYPE_TYPE:
+    template: "In constant expressions, operands of this operator must be of type 'Type'."
+  CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
+    template: Const variables must be initialized with a constant value.
+    tip: Try changing the initializer to be a constant expression.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a value that isn't statically
+      known to be a constant is assigned to a variable that's declared to be a
+      `const` variable.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` isn't declared to
+      be `const`:
+
+      ```dart
+      var x = 0;
+      const y = [!x!];
+      ```
+
+      #### Common fixes
+
+      If the value being assigned can be declared to be `const`, then change the
+      declaration:
+
+      ```dart
+      const x = 0;
+      const y = x;
+      ```
+
+      If the value can't be declared to be `const`, then remove the `const`
+      modifier from the variable, possibly using `final` in its place:
+
+      ```dart
+      var x = 0;
+      final y = x;
+      ```
+  CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used to initialize a 'const' variable."
+    tip: Try initializing the variable without referencing members of the deferred library, or changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `const` variable is
+      initialized using a `const` variable from a library that is imported using
+      a deferred import. Constants are evaluated at compile time, and values from
+      deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      The following code produces this diagnostic because the variable `pi` is
+      being initialized using the constant `math.pi` from the library
+      `dart:math`, and `dart:math` is imported as a deferred library:
+
+      ```dart
+      import 'dart:math' deferred as math;
+
+      const pi = [!math.pi!];
+      ```
+
+      #### Common fixes
+
+      If you need to reference the value of the constant from the imported
+      library, then remove the keyword `deferred`:
+
+      ```dart
+      import 'dart:math' as math;
+
+      const pi = math.pi;
+      ```
+
+      If you don't need to reference the imported constant, then remove the
+      reference:
+
+      ```dart
+      const pi = 3.14;
+      ```
+  CONST_INSTANCE_FIELD:
+    template: Only static fields can be declared as const.
+    tip: "Try declaring the field as final, or adding the keyword 'static'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an instance field is marked as
+      being const.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is an instance
+      field:
+
+      ```dart
+      class C {
+        [!const!] int f = 3;
+      }
+      ```
+
+      #### Common fixes
+
+      If the field needs to be an instance field, then remove the keyword
+      `const`, or replace it with `final`:
+
+      ```dart
+      class C {
+        final int f = 3;
+      }
+      ```
+
+      If the field really should be a const field, then make it a static field:
+
+      ```dart
+      class C {
+        static const int f = 3;
+      }
+      ```
+  CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+    template: "The type of a key in a constant map can't override the '==' operator, but the class '{0}' does."
+    tip: "Try using a different value for the key, or removing the keyword 'const' from the map."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the entry's key
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the class of object used as a
+      key in a constant map literal implements the `==` operator. The
+      implementation of constant maps uses the `==` operator, so any
+      implementation other than the one inherited from `Object` requires
+      executing arbitrary code at compile time, which isn't supported.
+
+      #### Example
+
+      The following code produces this diagnostic because the constant map
+      contains a key whose type is `C`, and the class `C` overrides the
+      implementation of `==`:
+
+      ```dart
+      class C {
+        const C();
+
+        bool operator ==(Object other) => true;
+      }
+
+      const map = {[!C()!] : 0};
+      ```
+
+      #### Common fixes
+
+      If you can remove the implementation of `==` from the class, then do so:
+
+      ```dart
+      class C {
+        const C();
+      }
+
+      const map = {C() : 0};
+      ```
+
+      If you can't remove the implementation of `==` from the class, then make
+      the map be non-constant:
+
+      ```dart
+      class C {
+        const C();
+
+        bool operator ==(Object other) => true;
+      }
+
+      final map = {C() : 0};
+      ```
+  CONST_NOT_INITIALIZED:
+    template: "The constant '{0}' must be initialized."
+    tip: Try adding an initialization to the declaration.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the uninitialized final variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a variable that is declared to
+      be a constant doesn't have an initializer.
+
+      #### Examples
+
+      The following code produces this diagnostic because `c` isn't initialized:
+
+      ```dart
+      const [!c!];
+      ```
+
+      #### Common fixes
+
+      Add an initializer:
+
+      ```dart
+      const c = 'c';
+      ```
+  CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS:
+    template: "The type of an element in a constant set can't override the '==' operator, but the type '{0}' does."
+    tip: "Try using a different value for the element, or removing the keyword 'const' from the set."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the element
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the class of object used as an
+      element in a constant set literal implements the `==` operator. The
+      implementation of constant sets uses the `==` operator, so any
+      implementation other than the one inherited from `Object` requires
+      executing arbitrary code at compile time, which isn't supported.
+
+      #### Example
+
+      The following code produces this diagnostic because the constant set
+      contains an element whose type is `C`, and the class `C` overrides the
+      implementation of `==`:
+
+      ```dart
+      class C {
+        const C();
+
+        bool operator ==(Object other) => true;
+      }
+
+      const set = {[!C()!]};
+      ```
+
+      #### Common fixes
+
+      If you can remove the implementation of `==` from the class, then do so:
+
+      ```dart
+      class C {
+        const C();
+      }
+
+      const set = {C()};
+      ```
+
+      If you can't remove the implementation of `==` from the class, then make
+      the set be non-constant:
+
+      ```dart
+      class C {
+        const C();
+
+        bool operator ==(Object other) => true;
+      }
+
+      final set = {C()};
+      ```
+  CONST_SPREAD_EXPECTED_LIST_OR_SET:
+    template: A list or a set is expected in this spread.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression of a spread
+      operator in a constant list or set evaluates to something other than a list
+      or a set.
+
+      #### Examples
+
+      The following code produces this diagnostic because the value of `list1` is
+      `null`, which is neither a list nor a set:
+
+      ```dart
+      %language=2.9
+      const List<int> list1 = null;
+      const List<int> list2 = [...[!list1!]];
+      ```
+
+      #### Common fixes
+
+      Change the expression to something that evaluates to either a constant list
+      or a constant set:
+
+      ```dart
+      %language=2.9
+      const List<int> list1 = [];
+      const List<int> list2 = [...list1];
+      ```
+  CONST_SPREAD_EXPECTED_MAP:
+    template: A map is expected in this spread.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression of a spread
+      operator in a constant map evaluates to something other than a map.
+
+      #### Examples
+
+      The following code produces this diagnostic because the value of `map1` is
+      `null`, which isn't a map:
+
+      ```dart
+      %language=2.9
+      const Map<String, int> map1 = null;
+      const Map<String, int> map2 = {...[!map1!]};
+      ```
+
+      #### Common fixes
+
+      Change the expression to something that evaluates to a constant map:
+
+      ```dart
+      %language=2.9
+      const Map<String, int> map1 = {};
+      const Map<String, int> map2 = {...map1};
+      ```
+  CONST_WITH_NON_CONST:
+    template: "The constructor being called isn't a const constructor."
+    tip: "Try removing 'const' from the constructor invocation."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the keyword `const` is used to
+      invoke a constructor that isn't marked with `const`.
+
+      #### Examples
+
+      The following code produces this diagnostic because the constructor in `A`
+      isn't a const constructor:
+
+      ```dart
+      class A {
+        A();
+      }
+
+      A f() => [!const!] A();
+      ```
+
+      #### Common fixes
+
+      If it's desirable and possible to make the class a constant class (by
+      making all of the fields of the class, including inherited fields, final),
+      then add the keyword `const` to the constructor:
+
+      ```dart
+      class A {
+        const A();
+      }
+
+      A f() => const A();
+      ```
+
+      Otherwise, remove the keyword `const`:
+
+      ```dart
+      class A {
+        A();
+      }
+
+      A f() => A();
+      ```
+  CONST_WITH_NON_CONSTANT_ARGUMENT:
+    template: Arguments of a constant creation must be constant expressions.
+    tip: "Try making the argument a valid constant, or use 'new' to call the constructor."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a const constructor is invoked
+      with an argument that isn't a constant expression.
+
+      #### Examples
+
+      The following code produces this diagnostic because `i` isn't a constant:
+
+      ```dart
+      class C {
+        final int i;
+        const C(this.i);
+      }
+      C f(int i) => const C([!i!]);
+      ```
+
+      #### Common fixes
+
+      Either make all of the arguments constant expressions, or remove the
+      `const` keyword to use the non-constant form of the constructor:
+
+      ```dart
+      class C {
+        final int i;
+        const C(this.i);
+      }
+      C f(int i) => C(i);
+      ```
+  CONST_WITH_TYPE_PARAMETERS:
+    template: "A constant creation can't use a type parameter as a type argument."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type parameter is used as a
+      type argument in a `const` invocation of a constructor. This isn't allowed
+      because the value of the type parameter (the actual type that will be used
+      at runtime) can't be known at compile time.
+
+      #### Example
+
+      The following code produces this diagnostic because the type parameter `T`
+      is being used as a type argument when creating a constant:
+
+      ```dart
+      class C<T> {
+        const C();
+      }
+
+      C<T> newC<T>() => const C<[!T!]>();
+      ```
+
+      #### Common fixes
+
+      If the type that will be used for the type parameter can be known at
+      compile time, then remove the use of the type parameter:
+
+      ```dart
+      class C<T> {
+        const C();
+      }
+
+      C<int> newC() => const C<int>();
+      ```
+
+      If the type that will be used for the type parameter can't be known until
+      runtime, then remove the keyword `const`:
+
+      ```dart
+      class C<T> {
+        const C();
+      }
+
+      C<T> newC<T>() => C<T>();
+      ```
+  CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF:
+    sharedName: CONST_WITH_TYPE_PARAMETERS
+    template: "A constant constructor tearoff can't use a type parameter as a type argument."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: No parameters.
+  CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF:
+    sharedName: CONST_WITH_TYPE_PARAMETERS
+    template: "A constant function tearoff can't use a type parameter as a type argument."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: No parameters.
+  CONST_WITH_UNDEFINED_CONSTRUCTOR:
+    template: "The class '{0}' doesn't have a constant constructor '{1}'."
+    tip: Try calling a different constructor.
+    comment: |-
+      16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
+      a constant constructor declared by the type <i>T</i>.
+
+      Parameters:
+      0: the name of the type
+      1: the name of the requested constant constructor
+  CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+    template: "The class '{0}' doesn't have an unnamed constant constructor."
+    tip: Try calling a different constructor.
+    comment: |-
+      16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
+      a constant constructor declared by the type <i>T</i>.
+
+      Parameters:
+      0: the name of the type
+  CONTINUE_LABEL_ON_SWITCH:
+    template: A continue label resolves to switch, must be loop or switch member
+  COULD_NOT_INFER:
+    template: "Couldn't infer type parameter '{0}'.{1}"
+    comment: |-
+      Parameters:
+      0: the name of the type parameter
+      1: detail text explaining why the type could not be inferred
+  NEW_WITH_NON_TYPE:
+    sharedName: CREATION_WITH_NON_TYPE
+    template: "The name '{0}' isn't a class."
+    tip: Try correcting the name to match an existing class.
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the non-type element
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an instance creation using
+      either `new` or `const` specifies a name that isn't defined as a class.
+
+      #### Example
+
+      The following code produces this diagnostic because `f` is a function
+      rather than a class:
+
+      ```dart
+      int f() => 0;
+
+      void g() {
+        new [!f!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If a class should be created, then replace the invalid name with the name
+      of a valid class:
+
+      ```dart
+      int f() => 0;
+
+      void g() {
+        new Object();
+      }
+      ```
+
+      If the name is the name of a function and you want that function to be
+      invoked, then remove the `new` or `const` keyword:
+
+      ```dart
+      int f() => 0;
+
+      void g() {
+        f();
+      }
+      ```
+  CONST_WITH_NON_TYPE:
+    sharedName: CREATION_WITH_NON_TYPE
+    template: "The name '{0}' isn't a class."
+    tip: Try correcting the name to match an existing class.
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the non-type element
+  DEFAULT_LIST_CONSTRUCTOR:
+    template: "The default 'List' constructor isn't available when null safety is enabled."
+    tip: "Try using a list literal, 'List.filled' or 'List.generate'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a use of the default
+      constructor for the class `List` in code that has opted in to null safety.
+
+      #### Example
+
+      Assuming the following code is opted in to null safety, it produces this
+      diagnostic because it uses the default `List` constructor:
+
+      ```dart
+      var l = [!List<int>!]();
+      ```
+
+      #### Common fixes
+
+      If no initial size is provided, then convert the code to use a list
+      literal:
+
+      ```dart
+      var l = <int>[];
+      ```
+
+      If an initial size needs to be provided and there is a single reasonable
+      initial value for the elements, then use `List.filled`:
+
+      ```dart
+      var l = List.filled(3, 0);
+      ```
+
+      If an initial size needs to be provided but each element needs to be
+      computed, then use `List.generate`:
+
+      ```dart
+      var l = List.generate(3, (i) => i);
+      ```
+  DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
+    template: "Default values aren't allowed in factory constructors that redirect to another constructor."
+    tip: Try removing the default value.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a factory constructor that
+      redirects to another constructor specifies a default value for an optional
+      parameter.
+
+      #### Example
+
+      The following code produces this diagnostic because the factory constructor
+      in `A` has a default value for the optional parameter `x`:
+
+      ```dart
+      class A {
+        factory A([int [!x!] = 0]) = B;
+      }
+
+      class B implements A {
+        B([int x = 1]) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the default value from the factory constructor:
+
+      ```dart
+      class A {
+        factory A([int x]) = B;
+      }
+
+      class B implements A {
+        B([int x = 1]) {}
+      }
+      ```
+
+      Note that this fix might change the value used when the optional parameter
+      is omitted. If that happens, and if that change is a problem, then consider
+      making the optional parameter a required parameter in the factory method:
+
+      ```dart
+      class A {
+       factory A(int x) = B;
+      }
+
+      class B implements A {
+        B([int x = 1]) {}
+      }
+      ```
+  DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
+    template: "Required named parameters can't have a default value."
+    tip: "Try removing either the default value or the 'required' modifier."
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a named parameter has both the
+      `required` modifier and a default value. If the parameter is required, then
+      a value for the parameter is always provided at the call sites, so the
+      default value can never be used.
+
+      #### Examples
+
+      The following code generates this diagnostic:
+
+      ```dart
+      void log({required String [!message!] = 'no message'}) {}
+      ```
+
+      #### Common fixes
+
+      If the parameter is really required, then remove the default value:
+
+      ```dart
+      void log({required String message}) {}
+      ```
+
+      If the parameter isn't always required, then remove the `required`
+      modifier:
+
+      ```dart
+      void log({String message = 'no message'}) {}
+      ```
+  DEFERRED_IMPORT_OF_EXTENSION:
+    template: Imports of deferred libraries must hide all extensions.
+    tip: Try adding either a show combinator listing the names you need to reference or a hide combinator listing all of the extensions.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library that is imported using
+      a deferred import declares an extension that is visible in the importing
+      library. Extension methods are resolved at compile time, and extensions
+      from deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines a named extension:
+
+      ```dart
+      %uri="lib/a.dart"
+      class C {}
+
+      extension E on String {
+        int get size => length;
+      }
+      ```
+
+      The following code produces this diagnostic because the named extension is
+      visible to the library:
+
+      ```dart
+      import [!'a.dart'!] deferred as a;
+
+      void f() {
+        a.C();
+      }
+      ```
+
+      #### Common fixes
+
+      If the library must be imported as `deferred`, then either add a `show`
+      clause listing the names being referenced or add a `hide` clause listing
+      all of the named extensions. Adding a `show` clause would look like this:
+
+      ```dart
+      import 'a.dart' deferred as a show C;
+
+      void f() {
+        a.C();
+      }
+      ```
+
+      Adding a `hide` clause would look like this:
+
+      ```dart
+      import 'a.dart' deferred as a hide E;
+
+      void f() {
+        a.C();
+      }
+      ```
+
+      With the first fix, the benefit is that if new extensions are added to the
+      imported library, then the extensions won't cause a diagnostic to be
+      generated.
+
+      If the library doesn't need to be imported as `deferred`, or if you need to
+      make use of the extension method declared in it, then remove the keyword
+      `deferred`:
+
+      ```dart
+      import 'a.dart' as a;
+
+      void f() {
+        a.C();
+      }
+      ```
+  DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE:
+    template: "The late local variable '{0}' is definitely unassigned at this point."
+    tip: Ensure that it is assigned on necessary execution paths.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the variable that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when [definite assignment][] analysis
+      shows that a local variable that's marked as `late` is read before being
+      assigned.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` wasn't assigned a
+      value before being read:
+
+      ```dart
+      void f(bool b) {
+        late int x;
+        print([!x!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Assign a value to the variable before reading from it:
+
+      ```dart
+      void f(bool b) {
+        late int x;
+        x = b ? 1 : 0;
+        print(x);
+      }
+      ```
+  DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
+    template: Only a generic type, generic function, generic instance method, or generic constructor can be type instantiated.
+    tip: Try instantiating the type(s) of a generic type, generic function, generic instance method, or generic constructor.
+    comment: No parameters.
+  DUPLICATE_CONSTRUCTOR_NAME:
+    sharedName: DUPLICATE_CONSTRUCTOR
+    template: "The constructor with name '{0}' is already defined."
+    tip: Try renaming one of the constructors.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the duplicate entity
+  DUPLICATE_CONSTRUCTOR_DEFAULT:
+    sharedName: DUPLICATE_CONSTRUCTOR
+    template: The unnamed constructor is already defined.
+    tip: Try giving one of the constructors a name.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class declares more than one
+      unnamed constructor or when it declares more than one constructor with the
+      same name.
+
+      #### Examples
+
+      The following code produces this diagnostic because there are two
+      declarations for the unnamed constructor:
+
+      ```dart
+      class C {
+        C();
+
+        [!C!]();
+      }
+      ```
+
+      The following code produces this diagnostic because there are two
+      declarations for the constructor named `m`:
+
+      ```dart
+      class C {
+        C.m();
+
+        [!C.m!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If there are multiple unnamed constructors and all of the constructors are
+      needed, then give all of them, or all except one of them, a name:
+
+      ```dart
+      class C {
+        C();
+
+        C.n();
+      }
+      ```
+
+      If there are multiple unnamed constructors and all except one of them are
+      unneeded, then remove the constructors that aren't needed:
+
+      ```dart
+      class C {
+        C();
+      }
+      ```
+
+      If there are multiple named constructors and all of the constructors are
+      needed, then rename all except one of them:
+
+      ```dart
+      class C {
+        C.m();
+
+        C.n();
+      }
+      ```
+
+      If there are multiple named constructors and all except one of them are
+      unneeded, then remove the constructorsthat aren't needed:
+
+      ```dart
+      class C {
+        C.m();
+      }
+      ```
+  DUPLICATE_DEFINITION:
+    template: "The name '{0}' is already defined."
+    tip: Try renaming one of the declarations.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the duplicate entity
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name is declared, and there is
+      a previous declaration with the same name in the same scope.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `x` is
+      declared twice:
+
+      ```dart
+      int x = 0;
+      int [!x!] = 1;
+      ```
+
+      #### Common fixes
+
+      Choose a different name for one of the declarations.
+
+      ```dart
+      int x = 0;
+      int y = 1;
+      ```
+  DUPLICATE_FIELD_FORMAL_PARAMETER:
+    template: "The field '{0}' can't be initialized by multiple parameters in the same constructor."
+    tip: Try removing one of the parameters, or using different fields.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's more than one field
+      formal parameter for the same field in a constructor's parameter list. It
+      isn't useful to assign a value that will immediately be overwritten.
+
+      #### Example
+
+      The following code produces this diagnostic because `this.f` appears twice
+      in the parameter list:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f, this.[!f!]) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Remove one of the field formal parameters:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f) {}
+      }
+      ```
+  DUPLICATE_NAMED_ARGUMENT:
+    template: "The argument for the named parameter '{0}' was already specified."
+    tip: Try removing one of the named arguments, or correcting one of the names to reference a different named parameter.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the parameter that was duplicated
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an invocation has two or more
+      named arguments that have the same name.
+
+      #### Examples
+
+      The following code produces this diagnostic because there are two arguments
+      with the name `a`:
+
+      ```dart
+      %language=2.9
+      void f(C c) {
+        c.m(a: 0, [!a!]: 1);
+      }
+
+      class C {
+        void m({int a, int b}) {}
+      }
+      ```
+
+      #### Common fixes
+
+      If one of the arguments should have a different name, then change the name:
+
+      ```dart
+      %language=2.9
+      void f(C c) {
+        c.m(a: 0, b: 1);
+      }
+
+      class C {
+        void m({int a, int b}) {}
+      }
+      ```
+
+      If one of the arguments is wrong, then remove it:
+
+      ```dart
+      %language=2.9
+      void f(C c) {
+        c.m(a: 1);
+      }
+
+      class C {
+        void m({int a, int b}) {}
+      }
+      ```
+  DUPLICATE_PART:
+    template: "The library already contains a part with the URI '{0}'."
+    tip: Try removing all except one of the duplicated part directives.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the URI of the duplicate part
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a single file is referenced in
+      multiple part directives.
+
+      #### Example
+
+      Given a file named `part.dart` containing
+
+      ```dart
+      %uri="lib/part.dart"
+      part of lib;
+      ```
+
+      The following code produces this diagnostic because the file `part.dart` is
+      included multiple times:
+
+      ```dart
+      library lib;
+
+      part 'part.dart';
+      part [!'part.dart'!];
+      ```
+
+      #### Common fixes
+
+      Remove all except the first of the duplicated part directives:
+
+      ```dart
+      library lib;
+
+      part 'part.dart';
+      ```
+  ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
+    template: "The name of the enum constant can't be the same as the enum's name."
+    tip: Try renaming the constant.
+  EQUAL_ELEMENTS_IN_CONST_SET:
+    template: "Two elements in a constant set literal can't be equal."
+    tip: Change or remove the duplicate element.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when two elements in a constant set
+      literal have the same value. The set can only contain each value once,
+      which means that one of the values is unnecessary.
+
+      #### Examples
+
+      The following code produces this diagnostic because the string `'a'` is
+      specified twice:
+
+      ```dart
+      const Set<String> set = {'a', [!'a'!]};
+      ```
+
+      #### Common fixes
+
+      Remove one of the duplicate values:
+
+      ```dart
+      const Set<String> set = {'a'};
+      ```
+
+      Note that literal sets preserve the order of their elements, so the choice
+      of which element to remove might affect the order in which elements are
+      returned by an iterator.
+  EQUAL_KEYS_IN_CONST_MAP:
+    template: "Two keys in a constant map literal can't be equal."
+    tip: Change or remove the duplicate key.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a key in a constant map is the
+      same as a previous key in the same map. If two keys are the same, then the
+      second value would overwrite the first value, which makes having both pairs
+      pointless.
+
+      #### Examples
+
+      The following code produces this diagnostic because the key `1` is used
+      twice:
+
+      ```dart
+      const map = <int, String>{1: 'a', 2: 'b', [!1!]: 'c', 4: 'd'};
+      ```
+
+      #### Common fixes
+
+      If both entries should be included in the map, then change one of the keys
+      to be different:
+
+      ```dart
+      const map = <int, String>{1: 'a', 2: 'b', 3: 'c', 4: 'd'};
+      ```
+
+      If only one of the entries is needed, then remove the one that isn't
+      needed:
+
+      ```dart
+      const map = <int, String>{1: 'a', 2: 'b', 4: 'd'};
+      ```
+
+      Note that literal maps preserve the order of their entries, so the choice
+      of which entry to remove might affect the order in which keys and values
+      are returned by an iterator.
+  EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
+    template: "List literals require one type argument or none, but {0} found."
+    tip: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the number of provided type arguments
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a list literal has more than one
+      type argument.
+
+      #### Example
+
+      The following code produces this diagnostic because the list literal has
+      two type arguments when it can have at most one:
+
+      ```dart
+      var l = [!<int, int>!][];
+      ```
+
+      #### Common fixes
+
+      Remove all except one of the type arguments:
+
+      ```dart
+      var l = <int>[];
+      ```
+  EXPECTED_ONE_SET_TYPE_ARGUMENTS:
+    template: "Set literals require one type argument or none, but {0} were found."
+    tip: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the number of provided type arguments
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a set literal has more than one
+      type argument.
+
+      #### Example
+
+      The following code produces this diagnostic because the set literal has
+      three type arguments when it can have at most one:
+
+      ```dart
+      var s = [!<int, String, int>!]{0, 'a', 1};
+      ```
+
+      #### Common fixes
+
+      Remove all except one of the type arguments:
+
+      ```dart
+      var s = <int>{0, 1};
+      ```
+  EXPECTED_TWO_MAP_TYPE_ARGUMENTS:
+    template: "Map literals require two type arguments or none, but {0} found."
+    tip: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the number of provided type arguments
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a map literal has either one or
+      more than two type arguments.
+
+      #### Example
+
+      The following code produces this diagnostic because the map literal has
+      three type arguments when it can have either two or zero:
+
+      ```dart
+      var m = [!<int, String, int>!]{};
+      ```
+
+      #### Common fixes
+
+      Remove all except two of the type arguments:
+
+      ```dart
+      var m = <int, String>{};
+      ```
+  EXPORT_INTERNAL_LIBRARY:
+    template: "The library '{0}' is internal and can't be exported."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the uri pointing to a library
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an export whose `dart:`
+      URI references an internal library.
+
+      #### Example
+
+      The following code produces this diagnostic because `_interceptors` is an
+      internal library:
+
+      ```dart
+      export [!'dart:_interceptors'!];
+      ```
+
+      #### Common fixes
+
+      Remove the export directive.
+  EXPORT_LEGACY_SYMBOL:
+    template: "The symbol '{0}' is defined in a legacy library, and can't be re-exported from a library with null safety enabled."
+    tip: Try removing the export or migrating the legacy library.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of a symbol defined in a legacy library
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library that was opted in to
+      null safety exports another library, and the exported library is opted out
+      of null safety.
+
+      #### Example
+
+      Given a library that is opted out of null safety:
+
+      ```dart
+      %uri="lib/optedOut.dart"
+      // @dart = 2.8
+      String s;
+      ```
+
+      The following code produces this diagnostic because it's exporting symbols
+      from an opted-out library:
+
+      ```dart
+      export [!'optedOut.dart'!];
+
+      class C {}
+      ```
+
+      #### Common fixes
+
+      If you're able to do so, migrate the exported library so that it doesn't
+      need to opt out:
+
+      ```dart
+      String? s;
+      ```
+
+      If you can't migrate the library, then remove the export:
+
+      ```dart
+      class C {}
+      ```
+
+      If the exported library (the one that is opted out) itself exports an
+      opted-in library, then it's valid for your library to indirectly export the
+      symbols from the opted-in library. You can do so by adding a hide
+      combinator to the export directive in your library that hides all of the
+      names declared in the opted-out library.
+  EXPORT_OF_NON_LIBRARY:
+    template: "The exported library '{0}' can't have a part-of directive."
+    tip: Try exporting the library that the part is a part of.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the uri pointing to a non-library declaration
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an export directive references a
+      part rather than a library.
+
+      #### Example
+
+      Given a file named `part.dart` containing
+
+      ```dart
+      %uri="lib/part.dart"
+      part of lib;
+      ```
+
+      The following code produces this diagnostic because the file `part.dart` is
+      a part, and only libraries can be exported:
+
+      ```dart
+      library lib;
+
+      export [!'part.dart'!];
+      ```
+
+      #### Common fixes
+
+      Either remove the export directive, or change the URI to be the URI of the
+      library containing the part.
+  EXPRESSION_IN_MAP:
+    template: "Expressions can't be used in a map literal."
+    tip: Try removing the expression or converting it to be a map entry.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the analyzer finds an
+      expression, rather than a map entry, in what appears to be a map literal.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      var map = <String, int>{'a': 0, 'b': 1, [!'c'!]};
+      ```
+
+      #### Common fixes
+
+      If the expression is intended to compute either a key or a value in an
+      entry, fix the issue by replacing the expression with the key or the value.
+      For example:
+
+      ```dart
+      var map = <String, int>{'a': 0, 'b': 1, 'c': 2};
+      ```
+  EXTENDS_NON_CLASS:
+    template: Classes can only extend other classes.
+    tip: Try specifying a different superclass, or removing the extends clause.
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name in the extends clause
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an `extends` clause contains a
+      name that is declared to be something other than a class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is declared to be a
+      function:
+
+      ```dart
+      void f() {}
+
+      class C extends [!f!] {}
+      ```
+
+      #### Common fixes
+
+      If you want the class to extend a class other than `Object`, then replace
+      the name in the `extends` clause with the name of that class:
+
+      ```dart
+      void f() {}
+
+      class C extends B {}
+
+      class B {}
+      ```
+
+      If you want the class to extend `Object`, then remove the `extends` clause:
+
+      ```dart
+      void f() {}
+
+      class C {}
+      ```
+  EXTENSION_AS_EXPRESSION:
+    template: "Extension '{0}' can't be used as an expression."
+    tip: Try replacing it with a valid expression.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the extension
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name of an extension is used
+      in an expression other than in an extension override or to qualify an
+      access to a static member of the extension. Because classes define a type,
+      the name of a class can be used to refer to the instance of `Type`
+      representing the type of the class. Extensions, on the other hand, don't
+      define a type and can't be used as a type literal.
+
+      #### Examples
+
+      The following code produces this diagnostic because `E` is an extension:
+
+      ```dart
+      extension E on int {
+        static String m() => '';
+      }
+
+      var x = [!E!];
+      ```
+
+      #### Common fixes
+
+      Replace the name of the extension with a name that can be referenced, such
+      as a static member defined on the extension:
+
+      ```dart
+      extension E on int {
+        static String m() => '';
+      }
+
+      var x = E.m();
+      ```
+  EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
+    template: "Extension '{0}' can't define static member '{1}' and an instance member with the same name."
+    tip: "Try renaming the member to a name that doesn't conflict."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the extension defining the conflicting member
+      1: the name of the conflicting static member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension declaration
+      contains both an instance member and a static member that have the same
+      name. The instance member and the static member can't have the same name
+      because it's unclear which member is being referenced by an unqualified use
+      of the name within the body of the extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `a` is being
+      used for two different members:
+
+      ```dart
+      extension E on Object {
+        int get a => 0;
+        static int [!a!]() => 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Rename or remove one of the members:
+
+      ```dart
+      extension E on Object {
+        int get a => 0;
+        static int b() => 0;
+      }
+      ```
+  EXTENSION_DECLARES_MEMBER_OF_OBJECT:
+    template: "Extensions can't declare members with the same name as a member declared by 'Object'."
+    tip: Try specifying a different name for the member.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension declaration
+      declares a member with the same name as a member declared in the class
+      `Object`. Such a member can never be used because the member in `Object` is
+      always found first.
+
+      #### Examples
+
+      The following code produces this diagnostic because `toString` is defined
+      by `Object`:
+
+      ```dart
+      extension E on String {
+        String [!toString!]() => this;
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the member or rename it so that the name doesn't conflict with the
+      member in `Object`:
+
+      ```dart
+      extension E on String {
+        String displayString() => this;
+      }
+      ```
+  EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER:
+    template: "An extension override can't be used to access a static member from an extension."
+    tip: Try using just the name of the extension.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is the
+      receiver of the invocation of a static member. Similar to static members in
+      classes, the static members of an extension should be accessed using the
+      name of the extension, not an extension override.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` is static:
+
+      ```dart
+      extension E on String {
+        static void m() {}
+      }
+
+      void f() {
+        E('').[!m!]();
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the extension override with the name of the extension:
+
+      ```dart
+      extension E on String {
+        static void m() {}
+      }
+
+      void f() {
+        E.m();
+      }
+      ```
+  EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE:
+    template: "The type of the argument to the extension override '{0}' isn't assignable to the extended type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the argument
+      1: the extended type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the argument to an extension
+      override isn't assignable to the type being extended by the extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because `3` isn't a `String`:
+
+      ```dart
+      extension E on String {
+        void method() {}
+      }
+
+      void f() {
+        E([!3!]).method();
+      }
+      ```
+
+      #### Common fixes
+
+      If you're using the correct extension, then update the argument to have the
+      correct type:
+
+      ```dart
+      extension E on String {
+        void method() {}
+      }
+
+      void f() {
+        E(3.toString()).method();
+      }
+      ```
+
+      If there's a different extension that's valid for the type of the argument,
+      then either replace the name of the extension or unwrap the argument so
+      that the correct extension is found.
+  EXTENSION_OVERRIDE_WITHOUT_ACCESS:
+    template: An extension override can only be used to access instance members.
+    tip: Consider adding an access to an instance member.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is found
+      that isn't being used to access one of the members of the extension. The
+      extension override syntax doesn't have any runtime semantics; it only
+      controls which member is selected at compile time.
+
+      #### Examples
+
+      The following code produces this diagnostic because `E(i)` isn't an
+      expression:
+
+      ```dart
+      extension E on int {
+        int get a => 0;
+      }
+
+      void f(int i) {
+        print([!E(i)!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If you want to invoke one of the members of the extension, then add the
+      invocation:
+
+      ```dart
+      extension E on int {
+        int get a => 0;
+      }
+
+      void f(int i) {
+        print(E(i).a);
+      }
+      ```
+
+      If you don't want to invoke a member, then unwrap the argument:
+
+      ```dart
+      extension E on int {
+        int get a => 0;
+      }
+
+      void f(int i) {
+        print(i);
+      }
+      ```
+  EXTENSION_OVERRIDE_WITH_CASCADE:
+    template: "Extension overrides have no value so they can't be used as the receiver of a cascade expression."
+    tip: "Try using '.' instead of '..'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is used as
+      the receiver of a cascade expression. The value of a cascade expression
+      `e..m` is the value of the receiver `e`, but extension overrides aren't
+      expressions and don't have a value.
+
+      #### Examples
+
+      The following code produces this diagnostic because `E(3)` isn't an
+      expression:
+
+      ```dart
+      extension E on int {
+        void m() {}
+      }
+      f() {
+        [!E!](3)..m();
+      }
+      ```
+
+      #### Common fixes
+
+      Use `.` rather than `..`:
+
+      ```dart
+      extension E on int {
+        void m() {}
+      }
+      f() {
+        E(3).m();
+      }
+      ```
+
+      If there are multiple cascaded accesses, you'll need to duplicate the
+      extension override for each one.
+  EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
+    template: External fields cannot have initializers.
+    tip: "Try removing the field initializer or the 'external' keyword from the field declaration."
+  EXTERNAL_FIELD_INITIALIZER:
+    template: External fields cannot have initializers.
+    tip: "Try removing the initializer or the 'external' keyword."
+  EXTERNAL_VARIABLE_INITIALIZER:
+    template: External variables cannot have initializers.
+    tip: "Try removing the initializer or the 'external' keyword."
+  EXTRA_POSITIONAL_ARGUMENTS:
+    template: "Too many positional arguments: {0} expected, but {1} found."
+    tip: Try removing the extra arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the maximum number of positional arguments
+      1: the actual number of positional arguments given
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function invocation
+      has more positional arguments than the method or function allows.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` defines 2
+      parameters but is invoked with 3 arguments:
+
+      ```dart
+      void f(int a, int b) {}
+      void g() {
+        f(1, 2, [!3!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the arguments that don't correspond to parameters:
+
+      ```dart
+      void f(int a, int b) {}
+      void g() {
+        f(1, 2);
+      }
+      ```
+  EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED:
+    template: "Too many positional arguments: {0} expected, but {1} found."
+    tip: Try removing the extra positional arguments, or specifying the name for named arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the maximum number of positional arguments
+      1: the actual number of positional arguments given
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function invocation
+      has more positional arguments than the method or function allows, but the
+      method or function defines named parameters.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` defines 2
+      positional parameters but has a named parameter that could be used for the
+      third argument:
+
+      ```dart
+      %language=2.9
+      void f(int a, int b, {int c}) {}
+      void g() {
+        f(1, 2, [!3!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If some of the arguments should be values for named parameters, then add
+      the names before the arguments:
+
+      ```dart
+      %language=2.9
+      void f(int a, int b, {int c}) {}
+      void g() {
+        f(1, 2, c: 3);
+      }
+      ```
+
+      Otherwise, remove the arguments that don't correspond to positional
+      parameters:
+
+      ```dart
+      %language=2.9
+      void f(int a, int b, {int c}) {}
+      void g() {
+        f(1, 2);
+      }
+      ```
+  FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
+    template: "The field '{0}' can't be initialized twice in the same constructor."
+    tip: Try removing one of the initializations.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field being initialized multiple times
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the initializer list of a
+      constructor initializes a field more than once. There is no value to allow
+      both initializers because only the last value is preserved.
+
+      #### Example
+
+      The following code produces this diagnostic because the field `f` is being
+      initialized twice:
+
+      ```dart
+      class C {
+        int f;
+
+        C() : f = 0, [!f!] = 1;
+      }
+      ```
+
+      #### Common fixes
+
+      Remove one of the initializers:
+
+      ```dart
+      class C {
+        int f;
+
+        C() : f = 0;
+      }
+      ```
+  FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION:
+    template: "Fields can't be initialized in the constructor if they are final and were already initialized at their declaration."
+    tip: Try removing one of the initializations.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a final field is initialized in
+      both the declaration of the field and in an initializer in a constructor.
+      Final fields can only be assigned once, so it can't be initialized in both
+      places.
+
+      #### Example
+
+      The following code produces this diagnostic because `f` is :
+
+      ```dart
+      class C {
+        final int f = 0;
+        C() : [!f!] = 1;
+      }
+      ```
+
+      #### Common fixes
+
+      If the initialization doesn't depend on any values passed to the
+      constructor, and if all of the constructors need to initialize the field to
+      the same value, then remove the initializer from the constructor:
+
+      ```dart
+      class C {
+        final int f = 0;
+        C();
+      }
+      ```
+
+      If the initialization depends on a value passed to the constructor, or if
+      different constructors need to initialize the field differently, then
+      remove the initializer in the field's declaration:
+
+      ```dart
+      class C {
+        final int f;
+        C() : f = 1;
+      }
+      ```
+  FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER:
+    template: "Fields can't be initialized in both the parameter list and the initializers."
+    tip: Try removing one of the initializations.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a field is initialized in both
+      the parameter list and in the initializer list of a constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the field `f` is
+      initialized both by a field formal parameter and in the initializer list:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f) : [!f!] = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the field should be initialized by the parameter, then remove the
+      initialization in the initializer list:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+      }
+      ```
+
+      If the field should be initialized in the initializer list and the
+      parameter isn't needed, then remove the parameter:
+
+      ```dart
+      class C {
+        int f;
+
+        C() : f = 0;
+      }
+      ```
+
+      If the field should be initialized in the initializer list and the
+      parameter is needed, then make it a normal parameter:
+
+      ```dart
+      class C {
+        int f;
+
+        C(int g) : f = g * 2;
+      }
+      ```
+  FIELD_INITIALIZER_FACTORY_CONSTRUCTOR:
+    template: "Initializing formal parameters can't be used in factory constructors."
+    tip: Try using a normal parameter.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a factory constructor has a
+      field formal parameter. Factory constructors can't assign values to fields
+      because no instance is created; hence, there is no field to assign.
+
+      #### Example
+
+      The following code produces this diagnostic because the factory constructor
+      uses a field formal parameter:
+
+      ```dart
+      class C {
+        int? f;
+
+        factory C([!this.f!]) => throw 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the field formal parameter with a normal parameter:
+
+      ```dart
+      class C {
+        int? f;
+
+        factory C(int f) => throw 0;
+      }
+      ```
+  FIELD_INITIALIZER_NOT_ASSIGNABLE:
+    template: "The initializer type '{0}' can't be assigned to the field type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type of the initializer expression
+      1: the name of the type of the field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the initializer list of a
+      constructor initializes a field to a value that isn't assignable to the
+      field.
+
+      #### Example
+
+      The following code produces this diagnostic because `0` has the type `int`,
+      and an `int` can't be assigned to a field of type `String`:
+
+      ```dart
+      class C {
+        String s;
+
+        C() : s = [!0!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the type of the field is correct, then change the value assigned to it
+      so that the value has a valid type:
+
+      ```dart
+      class C {
+        String s;
+
+        C() : s = '0';
+      }
+      ```
+
+      If the type of the value is correct, then change the type of the field to
+      allow the assignment:
+
+      ```dart
+      class C {
+        int s;
+
+        C() : s = 0;
+      }
+      ```
+  CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE:
+    sharedName: FIELD_INITIALIZER_NOT_ASSIGNABLE
+    template: "The initializer type '{0}' can't be assigned to the field type '{1}' in a const constructor."
+    tip: "Try using a subtype, or removing the 'const' keyword"
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type of the initializer expression
+      1: the name of the type of the field
+  FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
+    template: Initializing formal parameters can only be used in constructors.
+    tip: Try using a normal parameter.
+    comment: |-
+      7.6.1 Generative Constructors: It is a compile-time error if an
+      initializing formal is used by a function other than a non-redirecting
+      generative constructor.
+  FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
+    template: "The redirecting constructor can't have a field initializer."
+    tip: Try initializing the field in the constructor being redirected to.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a redirecting constructor
+      initializes a field in the object. This isn't allowed because the instance
+      that has the field hasn't been created at the point at which it should be
+      initialized.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor
+      `C.zero`, which redirects to the constructor `C`, has a field formal
+      parameter that initializes the field `f`:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+
+        C.zero([!this.f!]) : this(f);
+      }
+      ```
+
+      The following code produces this diagnostic because the constructor
+      `C.zero`, which redirects to the constructor `C`, has an initializer that
+      initializes the field `f`:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+
+        C.zero() : [!f = 0!], this(1);
+      }
+      ```
+
+      #### Common fixes
+
+      If the initialization is done by a field formal parameter, then use a
+      normal parameter:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+
+        C.zero(int f) : this(f);
+      }
+      ```
+
+      If the initialization is done in an initializer, then remove the
+      initializer:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+
+        C.zero() : this(0);
+      }
+      ```
+  FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE:
+    template: "The parameter type '{0}' is incompatible with the field type '{1}'."
+    tip: "Try changing or removing the parameter's type, or changing the field's type."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type of the field formal parameter
+      1: the name of the type of the field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of a field formal
+      parameter isn't assignable to the type of the field being initialized.
+
+      #### Example
+
+      The following code produces this diagnostic because the field formal
+      parameter has the type `String`, but the type of the field is `int`. The
+      parameter must have a type that is a subtype of the field's type.
+
+      ```dart
+      class C {
+        int f;
+
+        C([!String this.f!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the type of the field is incorrect, then change the type of the field to
+      match the type of the parameter, and consider removing the type from the
+      parameter:
+
+      ```dart
+      class C {
+        String f;
+
+        C(this.f);
+      }
+      ```
+
+      If the type of the parameter is incorrect, then remove the type of the
+      parameter:
+
+      ```dart
+      class C {
+        int f;
+
+        C(this.f);
+      }
+      ```
+
+      If the types of both the field and the parameter are correct, then use an
+      initializer rather than a field formal parameter to convert the parameter
+      value into a value of the correct type:
+
+      ```dart
+      class C {
+        int f;
+
+        C(String s) : f = int.parse(s);
+      }
+      ```
+  FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
+    template: "'{0}' is final and was given a value when it was declared, so it can't be set to a new value."
+    tip: Try removing one of the initializations.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field in question
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a final field is initialized
+      twice: once where it's declared and once by a constructor's parameter.
+
+      #### Example
+
+      The following code produces this diagnostic because the field `f` is
+      initialized twice:
+
+      ```dart
+      class C {
+        final int f = 0;
+
+        C(this.[!f!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the field should have the same value for all instances, then remove the
+      initialization in the parameter list:
+
+      ```dart
+      class C {
+        final int f = 0;
+
+        C();
+      }
+      ```
+
+      If the field can have different values in different instances, then remove
+      the initialization in the declaration:
+
+      ```dart
+      class C {
+        final int f;
+
+        C(this.f);
+      }
+      ```
+  FINAL_NOT_INITIALIZED:
+    template: "The final variable '{0}' must be initialized."
+    tip: Try initializing the variable.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the uninitialized final variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a final field or variable isn't
+      initialized.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` doesn't have an
+      initializer:
+
+      ```dart
+      final [!x!];
+      ```
+
+      #### Common fixes
+
+      For variables and static fields, you can add an initializer:
+
+      ```dart
+      final x = 0;
+      ```
+
+      For instance fields, you can add an initializer as shown in the previous
+      example, or you can initialize the field in every constructor. You can
+      initialize the field by using a field formal parameter:
+
+      ```dart
+      class C {
+        final int x;
+        C(this.x);
+      }
+      ```
+
+      You can also initialize the field by using an initializer in the
+      constructor:
+
+      ```dart
+      class C {
+        final int x;
+        C(int y) : x = y * 2;
+      }
+      ```
+  FINAL_NOT_INITIALIZED_CONSTRUCTOR_1:
+    sharedName: FINAL_NOT_INITIALIZED_CONSTRUCTOR
+    template: "All final variables must be initialized, but '{0}' isn't."
+    tip: Try adding an initializer for the field.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the uninitialized final variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class defines one or more
+      final instance fields without initializers and has at least one constructor
+      that doesn't initialize those fields. All final instance fields must be
+      initialized when the instance is created, either by the field's initializer
+      or by the constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      class C {
+        final String value;
+
+        [!C!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If the value should be passed in to the constructor directly, then use a
+      field formal parameter to initialize the field `value`:
+
+      ```dart
+      class C {
+        final String value;
+
+        C(this.value);
+      }
+      ```
+
+      If the value should be computed indirectly from a value provided by the
+      caller, then add a parameter and include an initializer:
+
+      ```dart
+      class C {
+        final String value;
+
+        C(Object o) : value = o.toString();
+      }
+      ```
+
+      If the value of the field doesn't depend on values that can be passed to
+      the constructor, then add an initializer for the field as part of the field
+      declaration:
+
+      ```dart
+      class C {
+        final String value = '';
+
+        C();
+      }
+      ```
+
+      If the value of the field doesn't depend on values that can be passed to
+      the constructor but different constructors need to initialize it to
+      different values, then add an initializer for the field in the initializer
+      list:
+
+      ```dart
+      class C {
+        final String value;
+
+        C() : value = '';
+
+        C.named() : value = 'c';
+      }
+      ```
+
+      However, if the value is the same for all instances, then consider using a
+      static field instead of an instance field:
+
+      ```dart
+      class C {
+        static const String value = '';
+
+        C();
+      }
+      ```
+  FINAL_NOT_INITIALIZED_CONSTRUCTOR_2:
+    sharedName: FINAL_NOT_INITIALIZED_CONSTRUCTOR
+    template: "All final variables must be initialized, but '{0}' and '{1}' aren't."
+    tip: Try adding initializers for the fields.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the uninitialized final variable
+      1: the name of the uninitialized final variable
+  FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS:
+    sharedName: FINAL_NOT_INITIALIZED_CONSTRUCTOR
+    template: "All final variables must be initialized, but '{0}', '{1}', and {2} others aren't."
+    tip: Try adding initializers for the fields.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the uninitialized final variable
+      1: the name of the uninitialized final variable
+      2: the number of additional not initialized variables that aren't listed
+  FOR_IN_OF_INVALID_ELEMENT_TYPE:
+    template: "The type '{0}' used in the 'for' loop must implement '{1}' with a type argument that can be assigned to '{2}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the iterable expression.
+      1: the sequence type -- Iterable for `for` or Stream for `await for`.
+      2: the loop variable type.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the `Iterable` or `Stream` in a
+      for-in loop has an element type that can't be assigned to the loop
+      variable.
+
+      #### Example
+
+      The following code produces this diagnostic because `<String>[]` has an
+      element type of `String`, and `String` can't be assigned to the type of `e`
+      (`int`):
+
+      ```dart
+      void f() {
+        for (int e in [!<String>[]!]) {
+          print(e);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the type of the loop variable is correct, then update the type of the
+      iterable:
+
+      ```dart
+      void f() {
+        for (int e in <int>[]) {
+          print(e);
+        }
+      }
+      ```
+
+      If the type of the iterable is correct, then update the type of the loop
+      variable:
+
+      ```dart
+      void f() {
+        for (String e in <String>[]) {
+          print(e);
+        }
+      }
+      ```
+  FOR_IN_OF_INVALID_TYPE:
+    template: "The type '{0}' used in the 'for' loop must implement {1}."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the iterable expression.
+      1: the sequence type -- Iterable for `for` or Stream for `await for`.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression following `in` in
+      a for-in loop has a type that isn't a subclass of `Iterable`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` is a `Map`, and
+      `Map` isn't a subclass of `Iterable`:
+
+      ```dart
+      void f(Map<String, String> m) {
+        for (String s in [!m!]) {
+          print(s);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the expression with one that produces an iterable value:
+
+      ```dart
+      void f(Map<String, String> m) {
+        for (String s in m.values) {
+          print(s);
+        }
+      }
+      ```
+  FOR_IN_WITH_CONST_VARIABLE:
+    template: "A for-in loop variable can't be a 'const'."
+    tip: "Try removing the 'const' modifier from the variable, or use a different variable."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the loop variable declared in a
+      for-in loop is declared to be a `const`. The variable can't be a `const`
+      because the value can't be computed at compile time.
+
+      #### Example
+
+      The following code produces this diagnostic because the loop variable `x`
+      is declared to be a `const`:
+
+      ```dart
+      void f() {
+        for ([!const!] x in [0, 1, 2]) {
+          print(x);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If there's a type annotation, then remove the `const` modifier from the
+      declaration.
+
+      If there's no type, then replace the `const` modifier with `final`, `var`,
+      or a type annotation:
+
+      ```dart
+      void f() {
+        for (final x in [0, 1, 2]) {
+          print(x);
+        }
+      }
+      ```
+  GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND:
+    template: "Generic function types can't be used as type parameter bounds"
+    tip: Try making the free variable in the function type part of the larger declaration signature
+    comment: |-
+      It is a compile-time error if a generic function type is used as a bound
+      for a formal type parameter of a class or a function.
+  GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT:
+    template: "A generic function type can't be a type argument."
+    tip: "Try removing type parameters from the generic function type, or using 'dynamic' as the type argument here."
+    comment: |-
+      It is a compile-time error if a generic function type is used as an actual
+      type argument.
+  GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
+    template: "A method tear-off on a receiver whose type is 'dynamic' can't have type arguments."
+    tip: Specify the type of the receiver, or remove the type arguments from the method tear-off.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an instance method is being torn
+      off from a receiver whose type is `dynamic`, and the tear-off includes type
+      arguments. Because the analyzer can't know how many type parameters the
+      method has, or whether it has any type parameters, there's no way it can
+      validate that the type arguments are correct. As a result, the type
+      arguments aren't allowed.
+
+      #### Example
+
+      The following code produces this diagnostic because the type of `p` is
+      `dynamic` and the tear-off of `m` has type arguments:
+
+      ```dart
+      void f(dynamic list) {
+        [!list.fold!]<int>;
+      }
+      ```
+
+      #### Common fixes
+
+      If you can use a more specific type than `dynamic`, then change the type of
+      the receiver:
+
+      ```dart
+      void f(List<Object> list) {
+        list.fold<int>;
+      }
+      ```
+
+      If you can't use a more specific type, then remove the type arguments:
+
+      ```dart
+      void f(dynamic list) {
+        list.cast;
+      }
+      ```
+  GETTER_NOT_ASSIGNABLE_SETTER_TYPES:
+    template: "The return type of getter '{0}' is '{1}' which isn't assignable to the type '{2}' of its setter '{3}'."
+    tip: Try changing the types so that they are compatible.
+    comment: |-
+      Parameters:
+      0: the name of the getter
+      1: the type of the getter
+      2: the type of the setter
+      3: the name of the setter
+  GETTER_NOT_SUBTYPE_SETTER_TYPES:
+    template: "The return type of getter '{0}' is '{1}' which isn't a subtype of the type '{2}' of its setter '{3}'."
+    tip: Try changing the types so that they are compatible.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the getter
+      1: the type of the getter
+      2: the type of the setter
+      3: the name of the setter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the return type of a getter
+      isn't a subtype of the type of the parameter of a setter with the same
+      name.
+
+      The subtype relationship is a requirement whether the getter and setter are
+      in the same class or whether one of them is in a superclass of the other.
+
+      #### Example
+
+      The following code produces this diagnostic because the return type of the
+      getter `x` is `num`, the parameter type of the setter `x` is `int`, and
+      `num` isn't a subtype of `int`:
+
+      ```dart
+      class C {
+        num get [!x!] => 0;
+
+        set x(int y) {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the type of the getter is correct, then change the type of the setter:
+
+      ```dart
+      class C {
+        num get x => 0;
+
+        set x(num y) {}
+      }
+      ```
+
+      If the type of the setter is correct, then change the type of the getter:
+
+      ```dart
+      class C {
+        int get x => 0;
+
+        set x(int y) {}
+      }
+      ```
+  IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used as values in an if condition inside a const collection literal."
+    tip: Try making the deferred import non-deferred.
+  ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
+    template: "Functions marked 'async*' must have a return type that is a supertype of 'Stream<T>' for some type 'T'."
+    tip: "Try fixing the return type of the function, or removing the modifier 'async*' from the function body."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a function has the
+      `async*` modifier even though the return type of the function isn't either
+      `Stream` or a supertype of `Stream`.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the
+      function `f` has the 'async*' modifier even though the return type `int`
+      isn't a supertype of `Stream`:
+
+      ```dart
+      [!int!] f() async* {}
+      ```
+
+      #### Common fixes
+
+      If the function should be asynchronous, then change the return type to be
+      either `Stream` or a supertype of `Stream`:
+
+      ```dart
+      Stream<int> f() async* {}
+      ```
+
+      If the function should be synchronous, then remove the `async*` modifier:
+
+      ```dart
+      int f() => 0;
+      ```
+  ILLEGAL_ASYNC_RETURN_TYPE:
+    template: "Functions marked 'async' must have a return type assignable to 'Future'."
+    tip: "Try fixing the return type of the function, or removing the modifier 'async' from the function body."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a function has the
+      `async` modifier even though the return type of the function isn't
+      assignable to `Future`.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the
+      function `f` has the `async` modifier even though the return type isn't
+      assignable to `Future`:
+
+      ```dart
+      [!int!] f() async {
+        return 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the function should be asynchronous, then change the return type to be
+      assignable to `Future`:
+
+      ```dart
+      Future<int> f() async {
+        return 0;
+      }
+      ```
+
+      If the function should be synchronous, then remove the `async` modifier:
+
+      ```dart
+      int f() => 0;
+      ```
+  ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
+    template: "Functions marked 'sync*' must have a return type that is a supertype of 'Iterable<T>' for some type 'T'."
+    tip: "Try fixing the return type of the function, or removing the modifier 'sync*' from the function body."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a function has the
+      `sync*` modifier even though the return type of the function isn't either
+      `Iterable` or a supertype of `Iterable`.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the
+      function `f` has the 'sync*' modifier even though the return type `int`
+      isn't a supertype of `Iterable`:
+
+      ```dart
+      [!int!] f() sync* {}
+      ```
+
+      #### Common fixes
+
+      If the function should return an iterable, then change the return type to
+      be either `Iterable` or a supertype of `Iterable`:
+
+      ```dart
+      Iterable<int> f() sync* {}
+      ```
+
+      If the function should return a single value, then remove the `sync*`
+      modifier:
+
+      ```dart
+      int f() => 0;
+      ```
+  IMPLEMENTS_NON_CLASS:
+    template: Classes and mixins can only implement other classes and mixins.
+    tip: Try specifying a class or mixin, or remove the name from the list.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the interface that was not found
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name used in the `implements`
+      clause of a class or mixin declaration is defined to be something other
+      than a class or mixin.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is a variable
+      rather than a class or mixin:
+
+      ```dart
+      var x;
+      class C implements [!x!] {}
+      ```
+
+      #### Common fixes
+
+      If the name is the name of an existing class or mixin that's already being
+      imported, then add a prefix to the import so that the local definition of
+      the name doesn't shadow the imported name.
+
+      If the name is the name of an existing class or mixin that isn't being
+      imported, then add an import, with a prefix, for the library in which it’s
+      declared.
+
+      Otherwise, either replace the name in the `implements` clause with the name
+      of an existing class or mixin, or remove the name from the `implements`
+      clause.
+  IMPLEMENTS_REPEATED:
+    template: "'{0}' can only be implemented once."
+    tip: Try removing all but one occurrence of the class name.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the interface that is implemented more than once
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a single class is specified more
+      than once in an `implements` clause.
+
+      #### Examples
+
+      The following code produces this diagnostic because `A` is in the list
+      twice:
+
+      ```dart
+      class A {}
+      class B implements A, [!A!] {}
+      ```
+
+      #### Common fixes
+
+      Remove all except one occurrence of the class name:
+
+      ```dart
+      class A {}
+      class B implements A {}
+      ```
+  IMPLEMENTS_SUPER_CLASS:
+    template: "'{0}' can't be used in both the 'extends' and 'implements' clauses."
+    tip: Try removing one of the occurrences.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class that appears in both "extends" and "implements"
+         clauses
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when one class is listed in both the
+      `extends` and `implements` clauses of another class.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `A` is used
+      in both the `extends` and `implements` clauses for the class `B`:
+
+      ```dart
+      class A {}
+
+      class B extends A implements [!A!] {}
+      ```
+
+      #### Common fixes
+
+      If you want to inherit the implementation from the class, then remove the
+      class from the `implements` clause:
+
+      ```dart
+      class A {}
+
+      class B extends A {}
+      ```
+
+      If you don't want to inherit the implementation from the class, then remove
+      the `extends` clause:
+
+      ```dart
+      class A {}
+
+      class B implements A {}
+      ```
+  IMPLICIT_THIS_REFERENCE_IN_INITIALIZER:
+    template: "The instance member '{0}' can't be accessed in an initializer."
+    tip: Try replacing the reference to the instance member with a different expression
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the instance member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a reference to an
+      instance member in a constructor's initializer list.
+
+      #### Examples
+
+      The following code produces this diagnostic because `defaultX` is an
+      instance member:
+
+      ```dart
+      class C {
+        int x;
+
+        C() : x = [!defaultX!];
+
+        int get defaultX => 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the member can be made static, then do so:
+
+      ```dart
+      class C {
+        int x;
+
+        C() : x = defaultX;
+
+        static int get defaultX => 0;
+      }
+      ```
+
+      If not, then replace the reference in the initializer with a different
+      expression that doesn't use an instance member:
+
+      ```dart
+      class C {
+        int x;
+
+        C() : x = 0;
+
+        int get defaultX => 0;
+      }
+      ```
+  IMPORT_INTERNAL_LIBRARY:
+    template: "The library '{0}' is internal and can't be imported."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the uri pointing to a library
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an import whose `dart:`
+      URI references an internal library.
+
+      #### Example
+
+      The following code produces this diagnostic because `_interceptors` is an
+      internal library:
+
+      ```dart
+      import [!'dart:_interceptors'!];
+      ```
+
+      #### Common fixes
+
+      Remove the import directive.
+  IMPORT_OF_NON_LIBRARY:
+    template: "The imported library '{0}' can't have a part-of directive."
+    tip: Try importing the library that the part is a part of.
+    comment: |-
+      14.1 Imports: It is a compile-time error if the specified URI of an
+      immediate import does not refer to a library declaration.
+
+      Parameters:
+      0: the uri pointing to a non-library declaration
+  INCONSISTENT_CASE_EXPRESSION_TYPES:
+    template: "Case expressions must have the same types, '{0}' isn't a '{1}'."
+    comment: |-
+      13.9 Switch: It is a compile-time error if values of the expressions
+      <i>e<sub>k</sub></i> are not instances of the same class <i>C</i>, for all
+      <i>1 &lt;= k &lt;= n</i>.
+
+      Parameters:
+      0: the expression source code that is the unexpected type
+      1: the name of the expected type
+  INCONSISTENT_INHERITANCE:
+    template: "Superinterfaces don't have a valid override for '{0}': {1}."
+    tip: Try adding an explicit override that is consistent with all of the inherited members.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the instance member with inconsistent inheritance.
+      1: the list of all inherited signatures for this member.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class inherits two or more
+      conflicting signatures for a member and doesn't provide an implementation
+      that satisfies all the inherited signatures.
+
+      #### Example
+
+      The following code produces this diagnostic because `C` is inheriting the
+      declaration of `m` from `A`, and that implementation isn't consistent with
+      the signature of `m` that's inherited from `B`:
+
+      ```dart
+      %language=2.9
+      class A {
+        void m({int a}) {}
+      }
+
+      class B {
+        void m({int b}) {}
+      }
+
+      class [!C!] extends A implements B {
+      }
+      ```
+
+      #### Common fixes
+
+      Add an implementation of the method that satisfies all the inherited
+      signatures:
+
+      ```dart
+      %language=2.9
+      class A {
+        void m({int a}) {}
+      }
+
+      class B {
+        void m({int b}) {}
+      }
+
+      class C extends A implements B {
+        void m({int a, int b}) {}
+      }
+      ```
+  INCONSISTENT_INHERITANCE_GETTER_AND_METHOD:
+    template: "'{0}' is inherited as a getter (from '{1}') and also a method (from '{2}')."
+    tip: Try adjusting the supertypes of this class to remove the inconsistency.
+    comment: |-
+      11.1.1 Inheritance and Overriding. Let `I` be the implicit interface of a
+      class `C` declared in library `L`. `I` inherits all members of
+      `inherited(I, L)` and `I` overrides `m'` if `m' ∈ overrides(I, L)`. It is
+      a compile-time error if `m` is a method and `m'` is a getter, or if `m`
+      is a getter and `m'` is a method.
+
+      Parameters:
+      0: the name of the the instance member with inconsistent inheritance.
+      1: the name of the superinterface that declares the name as a getter.
+      2: the name of the superinterface that declares the name as a method.
+  INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
+    template: Parts must have exactly the same language version override as the library.
+    comment: |-
+      It is a compile-time error if a part file has a different language version
+      override than its library.
+
+      https://github.com/dart-lang/language/blob/master/accepted/
+      future-releases/language-versioning/feature-specification.md
+      #individual-library-language-version-override
+  INITIALIZER_FOR_NON_EXISTENT_FIELD:
+    template: "'{0}' isn't a field in the enclosing class."
+    tip: "Try correcting the name to match an existing field, or defining a field named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the initializing formal that is not an instance variable in
+         the immediately enclosing class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor initializes a
+      field that isn't declared in the class containing the constructor.
+      Constructors can't initialize fields that aren't declared and fields that
+      are inherited from superclasses.
+
+      #### Examples
+
+      The following code produces this diagnostic because the initializer is
+      initializing `x`, but `x` isn't a field in the class:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C() : [!x = 0!];
+      }
+      ```
+
+      #### Common fixes
+
+      If a different field should be initialized, then change the name to the
+      name of the field:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C() : y = 0;
+      }
+      ```
+
+      If the field must be declared, then add a declaration:
+
+      ```dart
+      %language=2.9
+      class C {
+        int x;
+        int y;
+
+        C() : x = 0;
+      }
+      ```
+  INITIALIZER_FOR_STATIC_FIELD:
+    template: "'{0}' is a static field in the enclosing class. Fields initialized in a constructor can't be static."
+    tip: Try removing the initialization.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the initializing formal that is a static variable in the
+         immediately enclosing class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a static field is initialized in
+      a constructor using either a field formal parameter or an assignment in the
+      initializer list.
+
+      #### Example
+
+      The following code produces this diagnostic because the static field `a` is
+      being initialized by the field formal parameter `this.a`:
+
+      ```dart
+      class C {
+        static int? a;
+        C([!this.a!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the field should be an instance field, then remove the keyword `static`:
+
+      ```dart
+      class C {
+        int? a;
+        C(this.a);
+      }
+      ```
+
+      If you intended to initialize an instance field and typed the wrong name,
+      then correct the name of the field being initialized:
+
+      ```dart
+      class C {
+        static int? a;
+        int? b;
+        C(this.b);
+      }
+      ```
+
+      If you really want to initialize the static field, then move the
+      initialization into the constructor body:
+
+      ```dart
+      class C {
+        static int? a;
+        C(int? c) {
+          a = c;
+        }
+      }
+      ```
+  INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD:
+    template: "'{0}' isn't a field in the enclosing class."
+    tip: "Try correcting the name to match an existing field, or defining a field named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the initializing formal that is not an instance variable in
+         the immediately enclosing class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a field formal parameter is
+      found in a constructor in a class that doesn't declare the field being
+      initialized. Constructors can't initialize fields that aren't declared and
+      fields that are inherited from superclasses.
+
+      #### Examples
+
+      The following code produces this diagnostic because the field `x` isn't
+      defined:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C([!this.x!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the field name was wrong, then change it to the name of an existing
+      field:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C(this.y);
+      }
+      ```
+
+      If the field name is correct but hasn't yet been defined, then declare the
+      field:
+
+      ```dart
+      %language=2.9
+      class C {
+        int x;
+        int y;
+
+        C(this.x);
+      }
+      ```
+
+      If the parameter is needed but shouldn't initialize a field, then convert
+      it to a normal parameter and use it:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C(int x) : y = x * 2;
+      }
+      ```
+
+      If the parameter isn't needed, then remove it:
+
+      ```dart
+      %language=2.9
+      class C {
+        int y;
+
+        C();
+      }
+      ```
+  INSTANCE_ACCESS_TO_STATIC_MEMBER:
+    template: "Static {1} '{0}' can't be accessed through an instance."
+    tip: "Try using the class '{2}' to access the {1}."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the static member
+      1: the kind of the static member (field, getter, setter, or method)
+      2: the name of the defining class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an access operator is used to
+      access a static member through an instance of the class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `zero` is a static
+      field, but it’s being accessed as if it were an instance field:
+
+      ```dart
+      void f(C c) {
+        c.[!zero!];
+      }
+
+      class C {
+        static int zero = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Use the class to access the static member:
+
+      ```dart
+      void f(C c) {
+        C.zero;
+      }
+
+      class C {
+        static int zero = 0;
+      }
+      ```
+  INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
+    template: "Instance members can't be accessed from a factory constructor."
+    tip: Try removing the reference to the instance member.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a factory constructor contains
+      an unqualified reference to an instance member. In a generative
+      constructor, the instance of the class is created and initialized before
+      the body of the constructor is executed, so the instance can be bound to
+      `this` and accessed just like it would be in an instance method. But, in a
+      factory constructor, the instance isn't created before executing the body,
+      so `this` can't be used to reference it.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` isn't in scope in
+      the factory constructor:
+
+      ```dart
+      class C {
+        int x;
+        factory C() {
+          return C._([!x!]);
+        }
+        C._(this.x);
+      }
+      ```
+
+      #### Common fixes
+
+      Rewrite the code so that it doesn't reference the instance member:
+
+      ```dart
+      class C {
+        int x;
+        factory C() {
+          return C._(0);
+        }
+        C._(this.x);
+      }
+      ```
+  INSTANCE_MEMBER_ACCESS_FROM_STATIC:
+    template: "Instance members can't be accessed from a static method."
+    tip: "Try removing the reference to the instance member, or removing the keyword 'static' from the method."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a static method contains an
+      unqualified reference to an instance member.
+
+      #### Examples
+
+      The following code produces this diagnostic because the instance field `x`
+      is being referenced in a static method:
+
+      ```dart
+      %language=2.9
+      class C {
+        int x;
+
+        static int m() {
+          return [!x!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the method must reference the instance member, then it can't be static,
+      so remove the keyword:
+
+      ```dart
+      %language=2.9
+      class C {
+        int x;
+
+        int m() {
+          return x;
+        }
+      }
+      ```
+
+      If the method can't be made an instance method, then add a parameter so
+      that an instance of the class can be passed in:
+
+      ```dart
+      %language=2.9
+      class C {
+        int x;
+
+        static int m(C c) {
+          return c.x;
+        }
+      }
+      ```
+  INSTANTIATE_ABSTRACT_CLASS:
+    template: "Abstract classes can't be instantiated."
+    tip: Try creating an instance of a concrete subtype.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a constructor
+      invocation and the constructor is declared in an abstract class. Even
+      though you can't create an instance of an abstract class, abstract classes
+      can declare constructors that can be invoked by subclasses.
+
+      #### Examples
+
+      The following code produces this diagnostic because `C` is an abstract
+      class:
+
+      ```dart
+      abstract class C {}
+
+      var c = new [!C!]();
+      ```
+
+      #### Common fixes
+
+      If there's a concrete subclass of the abstract class that can be used, then
+      create an instance of the concrete subclass.
+  INSTANTIATE_ENUM:
+    template: "Enums can't be instantiated."
+    tip: Try using one of the defined constants.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an enum is instantiated. It's
+      invalid to create an instance of an enum by invoking a constructor; only
+      the instances named in the declaration of the enum can exist.
+
+      #### Example
+
+      The following code produces this diagnostic because the enum `E` is being
+      instantiated:
+
+      ```dart
+      enum E {a}
+
+      var e = [!E!]();
+      ```
+
+      #### Common fixes
+
+      If you intend to use an instance of the enum, then reference one of the
+      constants defined in the enum:
+
+      ```dart
+      enum E {a}
+
+      var e = E.a;
+      ```
+
+      If you intend to use an instance of a class, then use the name of that class in place of the name of the enum.
+  INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    template: "Type aliases that expand to a type parameter can't be instantiated."
+    tip: Try replacing it with a class.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor invocation is
+      found where the type being instantiated is a type alias for one of the type
+      parameters of the type alias. This isn’t allowed because the value of the
+      type parameter is a type rather than a class.
+
+      #### Example
+
+      The following code produces this diagnostic because it creates an instance
+      of `A`, even though `A` is a type alias that is defined to be equivalent to
+      a type parameter:
+
+      ```dart
+      typedef A<T> = T;
+
+      void f() {
+        const [!A!]<int>();
+      }
+      ```
+
+      #### Common fixes
+
+      Use either a class name or a type alias defined to be a class, rather than
+      a type alias defined to be a type parameter:
+
+      ```dart
+      typedef A<T> = C<T>;
+
+      void f() {
+        const A<int>();
+      }
+
+      class C<T> {
+        const C();
+      }
+      ```
+  INTEGER_LITERAL_IMPRECISE_AS_DOUBLE:
+    template: "The integer literal is being used as a double, but can't be represented as a 64-bit double without overflow or loss of precision: '{0}'."
+    tip: "Try using the class 'BigInt', or switch to the closest valid double: '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the lexeme of the integer
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an integer literal is being
+      implicitly converted to a double, but can't be represented as a 64-bit
+      double without overflow or loss of precision. Integer literals are
+      implicitly converted to a double if the context requires the type `double`.
+
+      #### Example
+
+      The following code produces this diagnostic because the integer value
+      `9223372036854775807` can't be represented exactly as a double:
+
+      ```dart
+      double x = [!9223372036854775807!];
+      ```
+
+      #### Common fixes
+
+      If you need to use the exact value, then use the class `BigInt` to
+      represent the value:
+
+      ```dart
+      var x = BigInt.parse('9223372036854775807');
+      ```
+
+      If you need to use a double, then change the value to one that can be
+      represented exactly:
+
+      ```dart
+      double x = 9223372036854775808;
+      ```
+  INTEGER_LITERAL_OUT_OF_RANGE:
+    template: "The integer literal {0} can't be represented in 64 bits."
+    tip: "Try using the 'BigInt' class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an integer literal has a value
+      that is too large (positive) or too small (negative) to be represented in a
+      64-bit word.
+
+      #### Example
+
+      The following code produces this diagnostic because the value can't be
+      represented in 64 bits:
+
+      ```dart
+      var x = [!9223372036854775810!];
+      ```
+
+      #### Common fixes
+
+      If you need to represent the current value, then wrap it in an instance of
+      the class `BigInt`:
+
+      ```dart
+      var x = BigInt.parse('9223372036854775810');
+      ```
+  INVALID_ANNOTATION:
+    template: Annotation must be either a const variable reference or const constructor invocation.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an annotation is found that is
+      using something that is neither a variable marked as `const` or the
+      invocation of a `const` constructor.
+
+      Getters can't be used as annotations.
+
+      #### Example
+
+      The following code produces this diagnostic because the variable `v` isn't
+      a `const` variable:
+
+      ```dart
+      var v = 0;
+
+      [!@v!]
+      void f() {
+      }
+      ```
+
+      The following code produces this diagnostic because `f` isn't a variable:
+
+      ```dart
+      [!@f!]
+      void f() {
+      }
+      ```
+
+      The following code produces this diagnostic because `f` isn't a
+      constructor:
+
+      ```dart
+      [!@f()!]
+      void f() {
+      }
+      ```
+
+      The following code produces this diagnostic because `g` is a getter:
+
+      ```dart
+      [!@g!]
+      int get g => 0;
+      ```
+
+      #### Common fixes
+
+      If the annotation is referencing a variable that isn't a `const`
+      constructor, add the keyword `const` to the variable's declaration:
+
+      ```dart
+      const v = 0;
+
+      @v
+      void f() {
+      }
+      ```
+
+      If the annotation isn't referencing a variable, then remove it:
+
+      ```dart
+      int v = 0;
+
+      void f() {
+      }
+      ```
+  INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used in annotations."
+    tip: "Try moving the constant from the deferred library, or removing 'deferred' from the import."
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constant defined in a library
+      that is imported as a deferred library is referenced in the argument list
+      of an annotation. Annotations are evaluated at compile time, and values
+      from deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      The following code produces this diagnostic because the constant `pi` is
+      being referenced in the argument list of an annotation, even though the
+      library that defines it is being imported as a deferred library:
+
+      ```dart
+      import 'dart:math' deferred as math;
+
+      class C {
+        const C(double d);
+      }
+
+      @C([!math.pi!])
+      void f () {}
+      ```
+
+      #### Common fixes
+
+      If you need to reference the imported constant, then remove the `deferred`
+      keyword:
+
+      ```dart
+      import 'dart:math' as math;
+
+      class C {
+        const C(double d);
+      }
+
+      @C(math.pi)
+      void f () {}
+      ```
+
+      If the import is required to be deferred and there's another constant that
+      is appropriate, then use that constant in place of the constant from the
+      deferred library.
+  INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used as annotations."
+    tip: Try removing the annotation, or changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constant from a library that
+      is imported using a deferred import is used as an annotation. Annotations
+      are evaluated at compile time, and constants from deferred libraries aren't
+      available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      The following code produces this diagnostic because the constant `pi` is
+      being used as an annotation when the library `dart:math` is imported as
+      `deferred`:
+
+      ```dart
+      import 'dart:math' deferred as math;
+
+      @[!math.pi!]
+      void f() {}
+      ```
+
+      #### Common fixes
+
+      If you need to reference the constant as an annotation, then remove the
+      keyword `deferred` from the import:
+
+      ```dart
+      import 'dart:math' as math;
+
+      @math.pi
+      void f() {}
+      ```
+
+      If you can use a different constant as an annotation, then replace the
+      annotation with a different constant:
+
+      ```dart
+      @deprecated
+      void f() {}
+      ```
+  INVALID_ASSIGNMENT:
+    template: "A value of type '{0}' can't be assigned to a variable of type '{1}'."
+    tip: "Try changing the type of the variable, or casting the right-hand type to '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the right hand side type
+      1: the name of the left hand side type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the static type of an expression
+      that is assigned to a variable isn't assignable to the type of the
+      variable.
+
+      #### Examples
+
+      The following code produces this diagnostic because the type of the
+      initializer (`int`) isn't assignable to the type of the variable
+      (`String`):
+
+      ```dart
+      int i = 0;
+      String s = [!i!];
+      ```
+
+      #### Common fixes
+
+      If the value being assigned is always assignable at runtime, even though
+      the static types don't reflect that, then add an explicit cast.
+
+      Otherwise, change the value being assigned so that it has the expected
+      type. In the previous example, this might look like:
+
+      ```dart
+      int i = 0;
+      String s = i.toString();
+      ```
+
+      If you can’t change the value, then change the type of the variable to be
+      compatible with the type of the value being assigned:
+
+      ```dart
+      int i = 0;
+      int s = i;
+      ```
+  INVALID_CAST_FUNCTION:
+    template: "The function '{0}' has type '{1}' that isn't of expected type '{2}'. This means its parameter or return type doesn't match what is expected."
+    comment: |-
+      Parameters:
+      0: the type of the function
+      1: the expected function type
+  INVALID_CAST_FUNCTION_EXPR:
+    template: "The function expression type '{0}' isn't of type '{1}'. This means its parameter or return type doesn't match what is expected. Consider changing parameter type(s) or the returned type(s)."
+    comment: |-
+      Parameters:
+      0: the type of the torn-off function expression
+      1: the expected function type
+  INVALID_CAST_LITERAL:
+    template: "The literal '{0}' with type '{1}' isn't of expected type '{2}'."
+    comment: |-
+      Parameters:
+      0: the type of the literal
+      1: the expected type
+  INVALID_CAST_LITERAL_LIST:
+    template: "The list literal type '{0}' isn't of expected type '{1}'. The list's type can be changed with an explicit generic type argument or by changing the element types."
+    comment: |-
+      Parameters:
+      0: the type of the list literal
+      1: the expected type
+  INVALID_CAST_LITERAL_MAP:
+    template: "The map literal type '{0}' isn't of expected type '{1}'. The maps's type can be changed with an explicit generic type arguments or by changing the key and value types."
+    comment: |-
+      Parameters:
+      0: the type of the map literal
+      1: the expected type
+  INVALID_CAST_LITERAL_SET:
+    template: "The set literal type '{0}' isn't of expected type '{1}'. The set's type can be changed with an explicit generic type argument or by changing the element types."
+    comment: |-
+      Parameters:
+      0: the type of the set literal
+      1: the expected type
+  INVALID_CAST_METHOD:
+    template: "The method tear-off '{0}' has type '{1}' that isn't of expected type '{2}'. This means its parameter or return type doesn't match what is expected."
+    comment: |-
+      Parameters:
+      0: the type of the torn-off method
+      1: the expected function type
+  INVALID_CAST_NEW_EXPR:
+    template: "The constructor returns type '{0}' that isn't of expected type '{1}'."
+    comment: |-
+      Parameters:
+      0: the type of the instantiated object
+      1: the expected type
+  INVALID_CONSTANT:
+    template: Invalid constant value.
+    comment: |-
+      TODO(brianwilkerson) Remove this when we have decided on how to report
+      errors in compile-time constants. Until then, this acts as a placeholder
+      for more informative errors.
+
+      See TODOs in ConstantVisitor
+  INVALID_CONSTRUCTOR_NAME:
+    template: Invalid constructor name.
+    comment: |-
+      7.6 Constructors: It is a compile-time error if the name of a constructor
+      is not a constructor name.
+  INVALID_EXTENSION_ARGUMENT_COUNT:
+    template: "Extension overrides must have exactly one argument: the value of 'this' in the extension method."
+    tip: Try specifying exactly one argument.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override doesn't
+      have exactly one argument. The argument is the expression used to compute
+      the value of `this` within the extension method, so there must be one
+      argument.
+
+      #### Examples
+
+      The following code produces this diagnostic because there are no arguments:
+
+      ```dart
+      extension E on String {
+        String join(String other) => '$this $other';
+      }
+
+      void f() {
+        E[!()!].join('b');
+      }
+      ```
+
+      And, the following code produces this diagnostic because there's more than
+      one argument:
+
+      ```dart
+      extension E on String {
+        String join(String other) => '$this $other';
+      }
+
+      void f() {
+        E[!('a', 'b')!].join('c');
+      }
+      ```
+
+      #### Common fixes
+
+      Provide one argument for the extension override:
+
+      ```dart
+      extension E on String {
+        String join(String other) => '$this $other';
+      }
+
+      void f() {
+        E('a').join('b');
+      }
+      ```
+  INVALID_FACTORY_NAME_NOT_A_CLASS:
+    template: The name of a factory constructor must be the same as the name of the immediately enclosing class.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name of a factory
+      constructor isn't the same as the name of the surrounding class.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name of the factory
+      constructor (`A`) isn't the same as the surrounding class (`C`):
+
+      ```dart
+      class A {}
+
+      class C {
+        factory [!A!]() => throw 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the factory returns an instance of the surrounding class, then rename
+      the factory:
+
+      ```dart
+      class A {}
+
+      class C {
+        factory C() => throw 0;
+      }
+      ```
+
+      If the factory returns an instance of a different class, then move the
+      factory to that class:
+
+      ```dart
+      class A {
+        factory A() => throw 0;
+      }
+
+      class C {}
+      ```
+
+      If the factory returns an instance of a different class, but you can't
+      modify that class or don't want to move the factory, then convert it to be
+      a static method:
+
+      ```dart
+      class A {}
+
+      class C {
+        static A a() => throw 0;
+      }
+      ```
+  INVALID_IMPLEMENTATION_OVERRIDE:
+    template: "'{1}.{0}' ('{2}') isn't a valid concrete implementation of '{3}.{0}' ('{4}')."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the declared member that is not a valid override.
+      1: the name of the interface that declares the member.
+      2: the type of the declared member in the interface.
+      3. the name of the interface with the overridden member.
+      4. the type of the overridden member.
+
+      These parameters must be kept in sync with those of
+      [CompileTimeErrorCode.INVALID_OVERRIDE].
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when all of the following are true:
+
+      - A class defines an abstract member.
+      - There is a concrete implementation of that member in a superclass.
+      - The concrete implementation isn't a valid implementation of the abstract
+        method.
+
+      The concrete implementation can be invalid because of incompatibilities in
+      either the return type, the types of parameters, or the type variables.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `A.add` has
+      a parameter of type `int`, and the overriding method `B.add` has a
+      corresponding parameter of type `num`:
+
+      ```dart
+      class A {
+        int add(int a) => a;
+      }
+      class [!B!] extends A {
+        int add(num a);
+      }
+      ```
+
+      This is a problem because in an invocation of `B.add` like the following:
+
+      ```dart
+      void f(B b) {
+        b.add(3.4);
+      }
+      ```
+
+      `B.add` is expecting to be able to take, for example, a `double`, but when
+      the method `A.add` is executed (because it's the only concrete
+      implementation of `add`), a runtime exception will be thrown because a
+      `double` can't be assigned to a parameter of type `int`.
+
+      #### Common fixes
+
+      If the method in the subclass can conform to the implementation in the
+      superclass, then change the declaration in the subclass (or remove it if
+      it's the same):
+
+      ```dart
+      class A {
+        int add(int a) => a;
+      }
+      class B	extends A {
+        int add(int a);
+      }
+      ```
+
+      If the method in the superclass can be generalized to be a valid
+      implementation of the method in the subclass, then change the superclass
+      method:
+
+      ```dart
+      class A {
+        int add(num a) => a.floor();
+      }
+      class B	extends A {
+        int add(num a);
+      }
+      ```
+
+      If neither the method in the superclass nor the method in the subclass can
+      be changed, then provide a concrete implementation of the method in the
+      subclass:
+
+      ```dart
+      class A {
+        int add(int a) => a;
+      }
+      class B	extends A {
+        int add(num a) => a.floor();
+      }
+      ```
+  INVALID_INLINE_FUNCTION_TYPE:
+    template: "Inline function types can't be used for parameters in a generic function type."
+    tip: "Try using a generic function type (returnType 'Function(' parameters ')')."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generic function type has a
+      function-valued parameter that is written using the older inline function
+      type syntax.
+
+      #### Example
+
+      The following code produces this diagnostic because the parameter `f`, in
+      the generic function type used to define `F`, uses the inline function
+      type syntax:
+
+      ```dart
+      typedef F = int Function(int f[!(!]String s));
+      ```
+
+      #### Common fixes
+
+      Use the generic function syntax for the parameter's type:
+
+      ```dart
+      typedef F = int Function(int Function(String));
+      ```
+  INVALID_MODIFIER_ON_CONSTRUCTOR:
+    template: "The modifier '{0}' can't be applied to the body of a constructor."
+    tip: Try removing the modifier.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the invalid modifier
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a constructor is
+      prefixed by one of the following modifiers: `async`, `async*`, or `sync*`.
+      Constructor bodies must be synchronous.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the
+      constructor for `C` is marked as being `async`:
+
+      ```dart
+      class C {
+        C() [!async!] {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the constructor can be synchronous, then remove the modifier:
+
+      ```dart
+      class C {
+        C();
+      }
+      ```
+
+      If the constructor can't be synchronous, then use a static method to create
+      the instance instead:
+
+      ```dart
+      class C {
+        C();
+        static Future<C> c() async {
+          return C();
+        }
+      }
+      ```
+  INVALID_MODIFIER_ON_SETTER:
+    template: "Setters can't use 'async', 'async*', or 'sync*'."
+    tip: Try removing the modifier.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the invalid modifier
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a setter is prefixed
+      by one of the following modifiers: `async`, `async*`, or `sync*`. Setter
+      bodies must be synchronous.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the setter
+      `x` is marked as being `async`:
+
+      ```dart
+      class C {
+        set x(int i) [!async!] {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the setter can be synchronous, then remove the modifier:
+
+      ```dart
+      class C {
+        set x(int i) {}
+      }
+      ```
+
+      If the setter can't be synchronous, then use a method to set the value
+      instead:
+
+      ```dart
+      class C {
+        void x(int i) async {}
+      }
+      ```
+  INVALID_OVERRIDE:
+    template: "'{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}')."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the declared member that is not a valid override.
+      1: the name of the interface that declares the member.
+      2: the type of the declared member in the interface.
+      3. the name of the interface with the overridden member.
+      4. the type of the overridden member.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member of a class is found
+      that overrides a member from a supertype and the override isn't valid. An
+      override is valid if all of these are true:
+      * It allows all of the arguments allowed by the overridden member.
+      * It doesn't require any arguments that aren't required by the overridden
+        member.
+      * The type of every parameter of the overridden member is assignable to the
+        corresponding parameter of the override.
+      * The return type of the override is assignable to the return type of the
+        overridden member.
+
+      #### Examples
+
+      The following code produces this diagnostic because the type of the
+      parameter `s` (`String`) isn't assignable to the type of the parameter `i`
+      (`int`):
+
+      ```dart
+      class A {
+        void m(int i) {}
+      }
+
+      class B extends A {
+        void [!m!](String s) {}
+      }
+      ```
+
+      #### Common fixes
+
+      If the invalid method is intended to override the method from the
+      superclass, then change it to conform:
+
+      ```dart
+      class A {
+        void m(int i) {}
+      }
+
+      class B extends A {
+        void m(int i) {}
+      }
+      ```
+
+      If it isn't intended to override the method from the superclass, then
+      rename it:
+
+      ```dart
+      class A {
+        void m(int i) {}
+      }
+
+      class B extends A {
+        void m2(String s) {}
+      }
+      ```
+  INVALID_REFERENCE_TO_THIS:
+    template: "Invalid reference to 'this' expression."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when `this` is used outside of an
+      instance method or a generative constructor. The reserved word `this` is
+      only defined in the context of an instance method or a generative
+      constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because `v` is a top-level
+      variable:
+
+      ```dart
+      C f() => [!this!];
+
+      class C {}
+      ```
+
+      #### Common fixes
+
+      Use a variable of the appropriate type in place of `this`, declaring it if
+      necessary:
+
+      ```dart
+      C f(C c) => c;
+
+      class C {}
+      ```
+  INVALID_SUPER_INVOCATION:
+    template: "The superclass call must be last in an initializer list: '{0}'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the initializer list of a
+      constructor contains an invocation of a constructor in the superclass, but
+      the invocation isn't the last item in the initializer list.
+
+      #### Example
+
+      The following code produces this diagnostic because the invocation of the
+      superclass' constructor isn't the last item in the initializer list:
+
+      ```dart
+      class A {
+        A(int x);
+      }
+
+      class B extends A {
+        B(int x) : [!super!](x), assert(x >= 0);
+      }
+      ```
+
+      #### Common fixes
+
+      Move the invocation of the superclass' constructor to the end of the
+      initializer list:
+
+      ```dart
+      class A {
+        A(int x);
+      }
+
+      class B extends A {
+        B(int x) : assert(x >= 0), super(x);
+      }
+      ```
+  INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
+    sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
+    template: "Constant list literals can't include a type parameter as a type argument, such as '{0}'."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type parameter is used as a
+      type argument in a list, map, or set literal that is prefixed by `const`.
+      This isn't allowed because the value of the type parameter (the actual type
+      that will be used at runtime) can't be known at compile time.
+
+      #### Example
+
+      The following code produces this diagnostic because the type parameter `T`
+      is being used as a type argument when creating a constant list:
+
+      ```dart
+      List<T> newList<T>() => const <[!T!]>[];
+      ```
+
+      The following code produces this diagnostic because the type parameter `T`
+      is being used as a type argument when creating a constant map:
+
+      ```dart
+      Map<String, T> newSet<T>() => const <String, [!T!]>{};
+      ```
+
+      The following code produces this diagnostic because the type parameter `T`
+      is being used as a type argument when creating a constant set:
+
+      ```dart
+      Set<T> newSet<T>() => const <[!T!]>{};
+      ```
+
+      #### Common fixes
+
+      If the type that will be used for the type parameter can be known at
+      compile time, then remove the type parameter:
+
+      ```dart
+      List<int> newList() => const <int>[];
+      ```
+
+      If the type that will be used for the type parameter can't be known until
+      runtime, then remove the keyword `const`:
+
+      ```dart
+      List<T> newList<T>() => <T>[];
+      ```
+  INVALID_TYPE_ARGUMENT_IN_CONST_MAP:
+    sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
+    template: "Constant map literals can't include a type parameter as a type argument, such as '{0}'."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type parameter
+  INVALID_TYPE_ARGUMENT_IN_CONST_SET:
+    sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
+    template: "Constant set literals can't include a type parameter as a type argument, such as '{0}'."
+    tip: Try replacing the type parameter with a different type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type parameter
+  INVALID_URI:
+    template: "Invalid URI syntax: '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the URI that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a URI in a directive doesn't
+      conform to the syntax of a valid URI.
+
+      #### Examples
+
+      The following code produces this diagnostic because `'#'` isn't a valid
+      URI:
+
+      ```dart
+      import [!'#'!];
+      ```
+
+      #### Common fixes
+
+      Replace the invalid URI with a valid URI.
+  INVALID_USE_OF_COVARIANT:
+    template: "The 'covariant' keyword can only be used for parameters in instance methods or before non-final instance fields."
+    tip: "Try removing the 'covariant' keyword."
+    comment: "The 'covariant' keyword was found in an inappropriate location."
+  INVALID_USE_OF_NULL_VALUE:
+    template: "An expression whose value is always 'null' can't be dereferenced."
+    tip: Try changing the type of the expression.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an expression whose value will
+      always be `null` is dereferenced.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` will always be
+      `null`:
+
+      ```dart
+      int f(Null x) {
+        return [!x!].length;
+      }
+      ```
+
+      #### Common fixes
+
+      If the value is allowed to be something other than `null`, then change the
+      type of the expression:
+
+      ```dart
+      int f(String? x) {
+        return x!.length;
+      }
+      ```
+  INVOCATION_OF_EXTENSION_WITHOUT_CALL:
+    template: "The extension '{0}' doesn't define a 'call' method so the override can't be used in an invocation."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the extension
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is used to
+      invoke a function but the extension doesn't declare a `call` method.
+
+      #### Examples
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't define a `call` method:
+
+      ```dart
+      extension E on String {}
+
+      void f() {
+        [!E('')!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If the extension is intended to define a `call` method, then declare it:
+
+      ```dart
+      extension E on String {
+        int call() => 0;
+      }
+
+      void f() {
+        E('')();
+      }
+      ```
+
+      If the extended type defines a `call` method, then remove the extension
+      override.
+
+      If the `call` method isn't defined, then rewrite the code so that it
+      doesn't invoke the `call` method.
+  INVOCATION_OF_NON_FUNCTION:
+    template: "'{0}' isn't a function."
+    tip: "Try correcting the name to match an existing function, or define a method or function named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the identifier that is not a function type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a function invocation,
+      but the name of the function being invoked is defined to be something other
+      than a function.
+
+      #### Examples
+
+      The following code produces this diagnostic because `Binary` is the name of
+      a function type, not a function:
+
+      ```dart
+      typedef Binary = int Function(int, int);
+
+      int f() {
+        return [!Binary!](1, 2);
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the name with the name of a function.
+  INVOCATION_OF_NON_FUNCTION_EXPRESSION:
+    template: "The expression doesn't evaluate to a function, so it can't be invoked."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a function invocation is found,
+      but the name being referenced isn't the name of a function, or when the
+      expression computing the function doesn't compute a function.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` isn't a function:
+
+      ```dart
+      int x = 0;
+
+      int f() => x;
+
+      var y = [!x!]();
+      ```
+
+      The following code produces this diagnostic because `f()` doesn't return a
+      function:
+
+      ```dart
+      int x = 0;
+
+      int f() => x;
+
+      var y = [!f()!]();
+      ```
+
+      #### Common fixes
+
+      If you need to invoke a function, then replace the code before the argument
+      list with the name of a function or with an expression that computes a
+      function:
+
+      ```dart
+      int x = 0;
+
+      int f() => x;
+
+      var y = f();
+      ```
+  LABEL_IN_OUTER_SCOPE:
+    template: "Can't reference label '{0}' declared in an outer method."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the unresolvable label
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `break` or `continue`
+      statement references a label that is declared in a method or function
+      containing the function in which the `break` or `continue` statement
+      appears. The `break` and `continue` statements can't be used to transfer
+      control outside the function that contains them.
+
+      #### Example
+
+      The following code produces this diagnostic because the label `loop` is
+      declared outside the local function `g`:
+
+      ```dart
+      void f() {
+        loop:
+        while (true) {
+          void g() {
+            break [!loop!];
+          }
+
+          g();
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Try rewriting the code so that it isn't necessary to transfer control
+      outside the local function, possibly by inlining the local function:
+
+      ```dart
+      void f() {
+        loop:
+        while (true) {
+          break loop;
+        }
+      }
+      ```
+
+      If that isn't possible, then try rewriting the local function so that a
+      value returned by the function can be used to determine whether control is
+      transferred:
+
+      ```dart
+      void f() {
+        loop:
+        while (true) {
+          bool g() {
+            return true;
+          }
+
+          if (g()) {
+            break loop;
+          }
+        }
+      }
+      ```
+  LABEL_UNDEFINED:
+    template: "Can't reference an undefined label '{0}'."
+    tip: Try defining the label, or correcting the name to match an existing label.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the unresolvable label
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a reference to a label
+      that isn't defined in the scope of the `break` or `continue` statement that
+      is referencing it.
+
+      #### Example
+
+      The following code produces this diagnostic because the label `loop` isn't
+      defined anywhere:
+
+      ```dart
+      void f() {
+        for (int i = 0; i < 10; i++) {
+          for (int j = 0; j < 10; j++) {
+            break [!loop!];
+          }
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the label should be on the innermost enclosing `do`, `for`, `switch`, or
+      `while` statement, then remove the label:
+
+      ```dart
+      void f() {
+        for (int i = 0; i < 10; i++) {
+          for (int j = 0; j < 10; j++) {
+            break;
+          }
+        }
+      }
+      ```
+
+      If the label should be on some other statement, then add the label:
+
+      ```dart
+      void f() {
+        loop: for (int i = 0; i < 10; i++) {
+          for (int j = 0; j < 10; j++) {
+            break loop;
+          }
+        }
+      }
+      ```
+  LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
+    template: "Can't have a late final field in a class with a generative const constructor."
+    tip: "Try removing the 'late' modifier, or don't declare 'const' constructors."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that has at least one
+      `const` constructor also has a field marked both `late` and `final`.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `A` has a
+      `const` constructor and the `final` field `f` is marked as `late`:
+
+      ```dart
+      class A {
+        [!late!] final int f;
+
+        const A();
+      }
+      ```
+
+      #### Common fixes
+
+      If the field doesn't need to be marked `late`, then remove the `late`
+      modifier from the field:
+
+      ```dart
+      class A {
+        final int f = 0;
+
+        const A();
+      }
+      ```
+
+      If the field must be marked `late`, then remove the `const` modifier from
+      the constructors:
+
+      ```dart
+      class A {
+        late final int f;
+
+        A();
+      }
+      ```
+  LATE_FINAL_LOCAL_ALREADY_ASSIGNED:
+    template: The late final local variable is already assigned.
+    tip: "Try removing the 'final' modifier, or don't reassign the value."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the analyzer can prove that a
+      local variable marked as both `late` and `final` was already assigned a
+      value at the point where another assignment occurs.
+
+      Because `final` variables can only be assigned once, subsequent assignments
+      are guaranteed to fail, so they're flagged.
+
+      #### Example
+
+      The following code produces this diagnostic because the `final` variable
+      `v` is assigned a value in two places:
+
+      ```dart
+      int f() {
+        late final int v;
+        v = 0;
+        [!v!] += 1;
+        return v;
+      }
+      ```
+
+      #### Common fixes
+
+      If you need to be able to reassign the variable, then remove the `final`
+      keyword:
+
+      ```dart
+      int f() {
+        late int v;
+        v = 0;
+        v += 1;
+        return v;
+      }
+      ```
+
+      If you don't need to reassign the variable, then remove all except the
+      first of the assignments:
+
+      ```dart
+      int f() {
+        late final int v;
+        v = 0;
+        return v;
+      }
+      ```
+  LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
+    template: "The element type '{0}' can't be assigned to the list type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the actual type of the list element
+      1: the expected type of the list element
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of an element in a list
+      literal isn't assignable to the element type of the list.
+
+      #### Examples
+
+      The following code produces this diagnostic because `2.5` is a double, and
+      the list can hold only integers:
+
+      ```dart
+      List<int> x = [1, [!2.5!], 3];
+      ```
+
+      #### Common fixes
+
+      If you intended to add a different object to the list, then replace the
+      element with an expression that computes the intended object:
+
+      ```dart
+      List<int> x = [1, 2, 3];
+      ```
+
+      If the object shouldn't be in the list, then remove the element:
+
+      ```dart
+      List<int> x = [1, 3];
+      ```
+
+      If the object being computed is correct, then widen the element type of the
+      list to allow all of the different types of objects it needs to contain:
+
+      ```dart
+      List<num> x = [1, 2.5, 3];
+      ```
+  MAIN_FIRST_POSITIONAL_PARAMETER_TYPE:
+    template: "The type of the first positional parameter of the 'main' function must be a supertype of 'List<String>'."
+    tip: Try changing the type of the parameter.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the first positional parameter
+      of a function named `main` isn't a supertype of `List<String>`.
+
+      #### Example
+
+      The following code produces this diagnostic because `List<int>` isn't a
+      supertype of `List<String>`:
+
+      ```dart
+      void main([!List<int>!] args) {}
+      ```
+
+      #### Common fixes
+
+      If the function is an entry point, then change the type of the first
+      positional parameter to be a supertype of `List<String>`:
+
+      ```dart
+      void main(List<String> args) {}
+      ```
+
+      If the function isn't an entry point, then change the name of the function:
+
+      ```dart
+      void f(List<int> args) {}
+      ```
+  MAIN_HAS_REQUIRED_NAMED_PARAMETERS:
+    template: "The function 'main' can't have any required named parameters."
+    tip: "Try using a different name for the function, or removing the 'required' modifier."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a function named `main` has one
+      or more required named parameters.
+
+      #### Example
+
+      The following code produces this diagnostic because the function named
+      `main` has a required named parameter (`x`):
+
+      ```dart
+      void [!main!]({required int x}) {}
+      ```
+
+      #### Common fixes
+
+      If the function is an entry point, then remove the `required` keyword:
+
+      ```dart
+      void main({int? x}) {}
+      ```
+
+      If the function isn't an entry point, then change the name of the function:
+
+      ```dart
+      void f({required int x}) {}
+      ```
+  MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS:
+    template: "The function 'main' can't have more than two required positional parameters."
+    tip: Try using a different name for the function, or removing extra parameters.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a function named `main` has more
+      than two required positional parameters.
+
+      #### Example
+
+      The following code produces this diagnostic because the function `main` has
+      three required positional parameters:
+
+      ```dart
+      void [!main!](List<String> args, int x, int y) {}
+      ```
+
+      #### Common fixes
+
+      If the function is an entry point and the extra parameters aren't used,
+      then remove them:
+
+      ```dart
+      void main(List<String> args, int x) {}
+      ```
+
+      If the function is an entry point, but the extra parameters used are for
+      when the function isn't being used as an entry point, then make the extra
+      parameters optional:
+
+      ```dart
+      void main(List<String> args, int x, [int y = 0]) {}
+      ```
+
+      If the function isn't an entry point, then change the name of the function:
+
+      ```dart
+      void f(List<String> args, int x, int y) {}
+      ```
+  MAIN_IS_NOT_FUNCTION:
+    template: "The declaration named 'main' must be a function."
+    tip: Try using a different name for this declaration.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library contains a declaration
+      of the name `main` that isn't the declaration of a top-level function.
+
+      #### Example
+
+      The following code produces this diagnostic because the name `main` is
+      being used to declare a top-level variable:
+
+      ```dart
+      var [!main!] = 3;
+      ```
+
+      #### Common fixes
+
+      Use a different name for the declaration:
+
+      ```dart
+      var mainIndex = 3;
+      ```
+  MAP_ENTRY_NOT_IN_MAP:
+    template: Map entries can only be used in a map literal.
+    tip: Try converting the collection to a map or removing the map entry.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a map entry (a key/value pair)
+      is found in a set literal.
+
+      #### Examples
+
+      The following code produces this diagnostic because the literal has a map
+      entry even though it's a set literal:
+
+      ```dart
+      const collection = <String>{[!'a' : 'b'!]};
+      ```
+
+      #### Common fixes
+
+      If you intended for the collection to be a map, then change the code so
+      that it is a map. In the previous example, you could do this by adding
+      another type argument:
+
+      ```dart
+      const collection = <String, String>{'a' : 'b'};
+      ```
+
+      In other cases, you might need to change the explicit type from `Set` to
+      `Map`.
+
+      If you intended for the collection to be a set, then remove the map entry,
+      possibly by replacing the colon with a comma if both values should be
+      included in the set:
+
+      ```dart
+      const collection = <String>{'a', 'b'};
+      ```
+  MAP_KEY_TYPE_NOT_ASSIGNABLE:
+    template: "The element type '{0}' can't be assigned to the map key type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the expression being used as a key
+      1: the type of keys declared for the map
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a key of a key-value pair in a
+      map literal has a type that isn't assignable to the key type of the map.
+
+      #### Examples
+
+      The following code produces this diagnostic because `2` is an `int`, but
+      the keys of the map are required to be `String`s:
+
+      ```dart
+      var m = <String, String>{[!2!] : 'a'};
+      ```
+
+      #### Common fixes
+
+      If the type of the map is correct, then change the key to have the correct
+      type:
+
+      ```dart
+      var m = <String, String>{'2' : 'a'};
+      ```
+
+      If the type of the key is correct, then change the key type of the map:
+
+      ```dart
+      var m = <int, String>{2 : 'a'};
+      ```
+  MAP_VALUE_TYPE_NOT_ASSIGNABLE:
+    template: "The element type '{0}' can't be assigned to the map value type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the expression being used as a value
+      1: the type of values declared for the map
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a value of a key-value pair in a
+      map literal has a type that isn't assignable to the the value type of the
+      map.
+
+      #### Examples
+
+      The following code produces this diagnostic because `2` is an `int`, but/
+      the values of the map are required to be `String`s:
+
+      ```dart
+      var m = <String, String>{'a' : [!2!]};
+      ```
+
+      #### Common fixes
+
+      If the type of the map is correct, then change the value to have the
+      correct type:
+
+      ```dart
+      var m = <String, String>{'a' : '2'};
+      ```
+
+      If the type of the value is correct, then change the value type of the map:
+
+      ```dart
+      var m = <String, int>{'a' : 2};
+      ```
+  MISSING_CONST_IN_LIST_LITERAL:
+    template: "List literals must be prefixed with 'const' when used as a constant expression."
+    tip: "Try adding the keyword 'const' before the literal."
+    comment: "12.1 Constants: A constant expression is ... a constant list literal."
+  MISSING_CONST_IN_MAP_LITERAL:
+    template: "Map literals must be prefixed with 'const' when used as a constant expression."
+    tip: "Try adding the keyword 'const' before the literal."
+    comment: "12.1 Constants: A constant expression is ... a constant map literal."
+  MISSING_CONST_IN_SET_LITERAL:
+    template: "Set literals must be prefixed with 'const' when used as a constant expression."
+    tip: "Try adding the keyword 'const' before the literal."
+    comment: "12.1 Constants: A constant expression is ... a constant set literal."
+  MISSING_DART_LIBRARY:
+    template: "Required library '{0}' is missing."
+    tip: Re-install the Dart or Flutter SDK.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when either the Dart or Flutter SDK
+      isn’t installed correctly, and, as a result, one of the `dart:` libraries
+      can't be found.
+
+      #### Common fixes
+
+      Reinstall the Dart or Flutter SDK.
+  MISSING_DEFAULT_VALUE_FOR_PARAMETER:
+    template: "The parameter '{0}' can't have a value of 'null' because of its type, but the implicit default value is 'null'."
+    tip: "Try adding either an explicit non-'null' default value or the 'required' modifier."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an optional parameter, whether
+      positional or named, has a [potentially non-nullable][] type and doesn't
+      specify a default value. Optional parameters that have no explicit default
+      value have an implicit default value of `null`. If the type of the
+      parameter doesn't allow the parameter to have a value of `null`, then the
+      implicit default value isn't valid.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` can't be `null`,
+      and no non-`null` default value is specified:
+
+      ```dart
+      void f([int [!x!]]) {}
+      ```
+
+      As does this:
+
+      ```dart
+      void g({int [!x!]}) {}
+      ```
+
+      #### Common fixes
+
+      If you want to use `null` to indicate that no value was provided, then you
+      need to make the type nullable:
+
+      ```dart
+      void f([int? x]) {}
+      void g({int? x}) {}
+      ```
+
+      If the parameter can't be null, then either provide a default value:
+
+      ```dart
+      void f([int x = 1]) {}
+      void g({int x = 2}) {}
+      ```
+
+      or make the parameter a required parameter:
+
+      ```dart
+      void f(int x) {}
+      void g({required int x}) {}
+      ```
+  MISSING_REQUIRED_ARGUMENT:
+    template: "The named parameter '{0}' is required, but there's no corresponding argument."
+    tip: Try adding the required argument.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an invocation of a function is
+      missing a required named parameter.
+
+      #### Example
+
+      The following code produces this diagnostic because the invocation of `f`
+      doesn't include a value for the required named parameter `end`:
+
+      ```dart
+      void f(int start, {required int end}) {}
+      void g() {
+        [!f!](3);
+      }
+      ```
+
+      #### Common fixes
+
+      Add a named argument corresponding to the missing required parameter:
+
+      ```dart
+      void f(int start, {required int end}) {}
+      void g() {
+        f(3, end: 5);
+      }
+      ```
+  MIXINS_SUPER_CLASS:
+    template: "'{0}' can't be used in both 'extends' and 'with' clauses."
+    tip: Try removing one of the occurrences.
+    comment: |-
+      Technically this is [IMPLEMENTS_SUPER_CLASS].
+      See https://github.com/dart-lang/sdk/issues/25765#issuecomment-307422593
+
+      Parameters:
+      0: the name of the class that appears in both "extends" and "with" clauses
+  MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
+    template: "The super-invoked member '{0}' has the type '{1}', and the concrete member in the class has the type '{2}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the super-invoked member
+      1: the display name of the type of the super-invoked member in the mixin
+      2: the display name of the type of the concrete member in the class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a mixin that invokes a method
+      using `super` is used in a class where the concrete implementation of that
+      method has a different signature than the signature defined for that method
+      by the mixin's `on` type. The reason this is an error is because the
+      invocation in the mixin might invoke the method in a way that's
+      incompatible with the method that will actually be executed.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `C` uses the
+      mixin `M`, the mixin `M` invokes `foo` using `super`, and the abstract
+      version of `foo` declared in `I` (the mixin's `on` type) doesn't have the
+      same signature as the concrete version of `foo` declared in `A`:
+
+      ```dart
+      class I {
+        void foo([int? p]) {}
+      }
+
+      class A {
+        void foo(int p) {}
+      }
+
+      abstract class B extends A implements I {
+        @override
+        void foo([int? p]);
+      }
+
+      mixin M on I {
+        void bar() {
+          super.foo(42);
+        }
+      }
+
+      abstract class C extends B with [!M!] {}
+      ```
+
+      #### Common fixes
+
+      If the class doesn't need to use the mixin, then remove it from the `with`
+      clause:
+
+      ```dart
+      class I {
+        void foo([int? p]) {}
+      }
+
+      class A {
+        void foo(int? p) {}
+      }
+
+      abstract class B extends A implements I {
+        @override
+        void foo([int? p]);
+      }
+
+      mixin M on I {
+        void bar() {
+          super.foo(42);
+        }
+      }
+
+      abstract class C extends B {}
+      ```
+
+      If the class needs to use the mixin, then ensure that there's a concrete
+      implementation of the method that conforms to the signature expected by the
+      mixin:
+
+      ```dart
+      class I {
+        void foo([int? p]) {}
+      }
+
+      class A {
+        void foo(int? p) {}
+      }
+
+      abstract class B extends A implements I {
+        @override
+        void foo([int? p]) {
+          super.foo(p);
+        }
+      }
+
+      mixin M on I {
+        void bar() {
+          super.foo(42);
+        }
+      }
+
+      abstract class C extends B with M {}
+      ```
+  MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE:
+    template: "'{0}' can't be mixed onto '{1}' because '{1}' doesn't implement '{2}'."
+    tip: "Try extending the class '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the display name of the mixin
+      1: the display name of the superclass
+      2: the display name of the type that is not implemented
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a mixin that has a superclass
+      constraint is used in a [mixin application][] with a superclass that
+      doesn't implement the required constraint.
+
+      #### Example
+
+      The following code produces this diagnostic because the mixin `M` requires
+      that the class to which it's applied be a subclass of `A`, but `Object`
+      isn't a subclass of `A`:
+
+      ```dart
+      class A {}
+
+      mixin M on A {}
+
+      class X = Object with [!M!];
+      ```
+
+      #### Common fixes
+
+      If you need to use the mixin, then change the superclass to be either the
+      same as or a subclass of the superclass constraint:
+
+      ```dart
+      class A {}
+
+      mixin M on A {}
+
+      class X = A with M;
+      ```
+  MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
+    template: "The class doesn't have a concrete implementation of the super-invoked member '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the display name of the member without a concrete implementation
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a [mixin application][] contains
+      an invocation of a member from its superclass, and there's no concrete
+      member of that name in the mixin application's superclass.
+
+      #### Example
+
+      The following code produces this diagnostic because the mixin `M` contains
+      the invocation `super.m()`, and the class `A`, which is the superclass of
+      the [mixin application][] `A+M`, doesn't define a concrete implementation
+      of `m`:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      mixin M on A {
+        void bar() {
+          super.m();
+        }
+      }
+
+      abstract class B extends A with [!M!] {}
+      ```
+
+      #### Common fixes
+
+      If you intended to apply the mixin `M` to a different class, one that has a
+      concrete implementation of `m`, then change the superclass of `B` to that
+      class:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      mixin M on A {
+        void bar() {
+          super.m();
+        }
+      }
+
+      class C implements A {
+        void m() {}
+      }
+
+      abstract class B extends C with M {}
+      ```
+
+      If you need to make `B` a subclass of `A`, then add a concrete
+      implementation of `m` in `A`:
+
+      ```dart
+      abstract class A {
+        void m() {}
+      }
+
+      mixin M on A {
+        void bar() {
+          super.m();
+        }
+      }
+
+      abstract class B extends A with M {}
+      ```
+  MIXIN_CLASS_DECLARES_CONSTRUCTOR:
+    template: "The class '{0}' can't be used as a mixin because it declares a constructor."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the mixin that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class is used as a mixin and
+      the mixed-in class defines a constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `A`, which
+      defines a constructor, is being used as a mixin:
+
+      ```dart
+      class A {
+        A();
+      }
+
+      class B with [!A!] {}
+      ```
+
+      #### Common fixes
+
+      If it's possible to convert the class to a mixin, then do so:
+
+      ```dart
+      mixin A {
+      }
+
+      class B with A {}
+      ```
+
+      If the class can't be a mixin and it's possible to remove the constructor,
+      then do so:
+
+      ```dart
+      class A {
+      }
+
+      class B with A {}
+      ```
+
+      If the class can't be a mixin and you can't remove the constructor, then
+      try extending or implementing the class rather than mixing it in:
+
+      ```dart
+      class A {
+        A();
+      }
+
+      class B extends A {}
+      ```
+  MIXIN_DECLARES_CONSTRUCTOR:
+    template: "Mixins can't declare constructors."
+    comment: |-
+      The <i>mixinMember</i> production allows the same instance or static
+      members that a class would allow, but no constructors (for now).
+  MIXIN_INFERENCE_INCONSISTENT_MATCHING_CLASSES:
+    template: "Type parameters couldn't be inferred for the mixin '{0}' because the base class implements the mixin's supertype constraint '{1}' in multiple conflicting ways"
+  MIXIN_INFERENCE_NO_MATCHING_CLASS:
+    template: "Type parameters couldn't be inferred for the mixin '{0}' because the base class doesn't implement the mixin's supertype constraint '{1}'"
+  MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION:
+    template: "Type parameters couldn't be inferred for the mixin '{0}' because no type parameter substitution could be found matching the mixin's supertype constraints"
+  MIXIN_INHERITS_FROM_NOT_OBJECT:
+    template: "The class '{0}' can't be used as a mixin because it extends a class other than 'Object'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the mixin that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that extends a class
+      other than `Object` is used as a mixin.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `B`, which
+      extends `A`, is being used as a mixin by `C`:
+
+      ```dart
+      class A {}
+
+      class B extends A {}
+
+      class C with [!B!] {}
+      ```
+
+      #### Common fixes
+
+      If the class being used as a mixin can be changed to extend `Object`, then
+      change it:
+
+      ```dart
+      class A {}
+
+      class B {}
+
+      class C with B {}
+      ```
+
+      If the class being used as a mixin can't be changed and the class that's
+      using it extends `Object`, then extend the class being used as a mixin:
+
+      ```dart
+      class A {}
+
+      class B extends A {}
+
+      class C extends B {}
+      ```
+
+      If the class doesn't extend `Object` or if you want to be able to mix in
+      the behavior from `B` in other places, then create a real mixin:
+
+      ```dart
+      class A {}
+
+      mixin M on A {}
+
+      class B extends A with M {}
+
+      class C extends A with M {}
+      ```
+  MIXIN_INSTANTIATE:
+    template: "Mixins can't be instantiated."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a mixin is instantiated.
+
+      #### Example
+
+      The following code produces this diagnostic because the mixin `M` is being
+      instantiated:
+
+      ```dart
+      mixin M {}
+
+      var m = [!M!]();
+      ```
+
+      #### Common fixes
+
+      If you intend to use an instance of a class, then use the name of that
+      class in place of the name of the mixin.
+  MIXIN_OF_NON_CLASS:
+    template: Classes can only mix in mixins and classes.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name in a `with` clause is
+      defined to be something other than a mixin or a class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `F` is defined to be a
+      function type:
+
+      ```dart
+      typedef F = int Function(String);
+
+      class C with [!F!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the invalid name from the list, possibly replacing it with the name
+      of the intended mixin or class:
+
+      ```dart
+      typedef F = int Function(String);
+
+      class C {}
+      ```
+  MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
+    template: "Deferred classes can't be used as super-class constraints."
+    tip: Try changing the import to not be deferred.
+    comment: No parameters.
+  MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
+    template: Only classes and mixins can be used as superclass constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type following the `on`
+      keyword in a mixin declaration is neither a class nor a mixin.
+
+      #### Examples
+
+      The following code produces this diagnostic because `F` is neither a class
+      nor a mixin:
+
+      ```dart
+      typedef F = void Function();
+
+      mixin M on [!F!] {}
+      ```
+
+      #### Common fixes
+
+      If the type was intended to be a class but was mistyped, then replace the
+      name.
+
+      Otherwise, remove the type from the `on` clause.
+  MIXIN_WITH_NON_CLASS_SUPERCLASS:
+    template: Mixin can only be applied to class.
+    comment: |-
+      9.1 Mixin Application: It is a compile-time error if <i>S</i> does not
+      denote a class available in the immediately enclosing scope.
+  MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS:
+    template: "Constructors can have at most one 'this' redirection."
+    tip: Try removing all but one of the redirections.
+    comment: |-
+      7.6.1 Generative Constructors: A generative constructor may be redirecting,
+      in which case its only action is to invoke another generative constructor.
+  MULTIPLE_SUPER_INITIALIZERS:
+    template: "A constructor can have at most one 'super' initializer."
+    tip: "Try removing all but one of the 'super' initializers."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the initializer list of a
+      constructor contains more than one invocation of a constructor from the
+      superclass. The initializer list is required to have exactly one such call,
+      which can either be explicit or implicit.
+
+      #### Example
+
+      The following code produces this diagnostic because the initializer list
+      for `B`’s constructor invokes both the constructor `one` and the
+      constructor `two` from the superclass `A`:
+
+      ```dart
+      class A {
+        int? x;
+        String? s;
+        A.one(this.x);
+        A.two(this.s);
+      }
+
+      class B extends A {
+        B() : super.one(0), [!super.two('')!];
+      }
+      ```
+
+      #### Common fixes
+
+      If one of the super constructors will initialize the instance fully, then
+      remove the other:
+
+      ```dart
+      class A {
+        int? x;
+        String? s;
+        A.one(this.x);
+        A.two(this.s);
+      }
+
+      class B extends A {
+        B() : super.one(0);
+      }
+      ```
+
+      If the initialization achieved by one of the super constructors can be
+      performed in the body of the constructor, then remove its super invocation
+      and perform the initialization in the body:
+
+      ```dart
+      class A {
+        int? x;
+        String? s;
+        A.one(this.x);
+        A.two(this.s);
+      }
+
+      class B extends A {
+        B() : super.one(0) {
+          s = '';
+        }
+      }
+      ```
+
+      If the initialization can only be performed in a constructor in the
+      superclass, then either add a new constructor or modify one of the existing
+      constructors so there's a constructor that allows all the required
+      initialization to occur in a single call:
+
+      ```dart
+      class A {
+        int? x;
+        String? s;
+        A.one(this.x);
+        A.two(this.s);
+        A.three(this.x, this.s);
+      }
+
+      class B extends A {
+        B() : super.three(0, '');
+      }
+      ```
+  NEW_WITH_UNDEFINED_CONSTRUCTOR:
+    template: "The class '{0}' doesn't have a constructor named '{1}'."
+    tip: "Try invoking a different constructor, or define a constructor named '{1}'."
+    comment: |-
+      12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
+      current scope then:
+      1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, &hellip;,
+         a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;,
+         x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if
+         <i>T.id</i> is not the name of a constructor declared by the type
+         <i>T</i>.
+      If <i>e</i> of the form <i>new T(a<sub>1</sub>, &hellip;, a<sub>n</sub>,
+      x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;, x<sub>n+k</sub>:
+      a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
+      declare a constructor with the same name as the declaration of <i>T</i>.
+  NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+    template: "The class '{0}' doesn't have an unnamed constructor."
+    tip: "Try using one of the named constructors defined in '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class being instantiated
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an unnamed constructor is
+      invoked on a class that defines named constructors but the class doesn’t
+      have an unnamed constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because `A` doesn't define an
+      unnamed constructor:
+
+      ```dart
+      class A {
+        A.a();
+      }
+
+      A f() => [!A!]();
+      ```
+
+      #### Common fixes
+
+      If one of the named constructors does what you need, then use it:
+
+      ```dart
+      class A {
+        A.a();
+      }
+
+      A f() => A.a();
+      ```
+
+      If none of the named constructors does what you need, and you're able to
+      add an unnamed constructor, then add the constructor:
+
+      ```dart
+      class A {
+        A();
+        A.a();
+      }
+
+      A f() => A();
+      ```
+  NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
+    sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+    template: "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and {4} more."
+    tip: Try implementing the missing methods, or make the class abstract.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the first member
+      1: the name of the second member
+      2: the name of the third member
+      3: the name of the fourth member
+      4: the number of additional missing members that aren't listed
+  NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR:
+    sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+    template: "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'."
+    tip: Try implementing the missing methods, or make the class abstract.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the first member
+      1: the name of the second member
+      2: the name of the third member
+      3: the name of the fourth member
+  NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE:
+    sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+    template: "Missing concrete implementation of '{0}'."
+    tip: Try implementing the missing method, or make the class abstract.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a concrete class inherits one or
+      more abstract members, and doesn't provide or inherit an implementation for
+      at least one of those abstract members.
+
+      #### Examples
+
+      The following code produces this diagnostic because the class `B` doesn't
+      have a concrete implementation of `m`:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      class [!B!] extends A {}
+      ```
+
+      #### Common fixes
+
+      If the subclass can provide a concrete implementation for some or all of
+      the abstract inherited members, then add the concrete implementations:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      class B extends A {
+        void m() {}
+      }
+      ```
+
+      If there is a mixin that provides an implementation of the inherited
+      methods, then apply the mixin to the subclass:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      class B extends A with M {}
+
+      mixin M {
+        void m() {}
+      }
+      ```
+
+      If the subclass can't provide a concrete implementation for all of the
+      abstract inherited members, then mark the subclass as being abstract:
+
+      ```dart
+      abstract class A {
+        void m();
+      }
+
+      abstract class B extends A {}
+      ```
+  NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE:
+    sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+    template: "Missing concrete implementations of '{0}', '{1}', and '{2}'."
+    tip: Try implementing the missing methods, or make the class abstract.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the first member
+      1: the name of the second member
+      2: the name of the third member
+  NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO:
+    sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+    template: "Missing concrete implementations of '{0}' and '{1}'."
+    tip: Try implementing the missing methods, or make the class abstract.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the first member
+      1: the name of the second member
+  NON_BOOL_CONDITION:
+    template: "Conditions must have a static type of 'bool'."
+    tip: Try changing the condition.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a condition, such as an `if` or
+      `while` loop, doesn't have the static type `bool`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` has the static type
+      `int`:
+
+      ```dart
+      void f(int x) {
+        if ([!x!]) {
+          // ...
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Change the condition so that it produces a Boolean value:
+
+      ```dart
+      void f(int x) {
+        if (x == 0) {
+          // ...
+        }
+      }
+      ```
+  NON_BOOL_EXPRESSION:
+    template: "The expression in an assert must be of type 'bool'."
+    tip: Try changing the expression.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the first expression in an
+      assert has a type other than `bool`.
+
+      #### Examples
+
+      The following code produces this diagnostic because the type of `p` is
+      `int`, but a `bool` is required:
+
+      ```dart
+      void f(int p) {
+        assert([!p!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Change the expression so that it has the type `bool`:
+
+      ```dart
+      void f(int p) {
+        assert(p > 0);
+      }
+      ```
+  NON_BOOL_NEGATION_EXPRESSION:
+    template: "A negation operand must have a static type of 'bool'."
+    tip: "Try changing the operand to the '!' operator."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the operand of the unary
+      negation operator (`!`) doesn't have the type `bool`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is an `int` when it
+      must be a `bool`:
+
+      ```dart
+      int x = 0;
+      bool y = ![!x!];
+      ```
+
+      #### Common fixes
+
+      Replace the operand with an expression that has the type `bool`:
+
+      ```dart
+      int x = 0;
+      bool y = !(x > 0);
+      ```
+  NON_BOOL_OPERAND:
+    template: "The operands of the operator '{0}' must be assignable to 'bool'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the lexeme of the logical operator
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when one of the operands of either
+      the `&&` or `||` operator doesn't have the type `bool`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `a` isn't a Boolean
+      value:
+
+      ```dart
+      int a = 3;
+      bool b = [!a!] || a > 1;
+      ```
+
+      #### Common fixes
+
+      Change the operand to a Boolean value:
+
+      ```dart
+      int a = 3;
+      bool b = a == 0 || a > 1;
+      ```
+  NON_CONSTANT_ANNOTATION_CONSTRUCTOR:
+    template: Annotation creation can only call a const constructor.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an annotation is the invocation
+      of an existing constructor even though the invoked constructor isn't a
+      const constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor for `C`
+      isn't a const constructor:
+
+      ```dart
+      [!@C()!]
+      void f() {
+      }
+
+      class C {
+        C();
+      }
+      ```
+
+      #### Common fixes
+
+      If it's valid for the class to have a const constructor, then create a
+      const constructor that can be used for the annotation:
+
+      ```dart
+      @C()
+      void f() {
+      }
+
+      class C {
+        const C();
+      }
+      ```
+
+      If it isn't valid for the class to have a const constructor, then either
+      remove the annotation or use a different class for the annotation.
+  NON_CONSTANT_CASE_EXPRESSION:
+    template: Case expressions must be constant.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression in a `case`
+      clause isn't a constant expression.
+
+      #### Examples
+
+      The following code produces this diagnostic because `j` isn't a constant:
+
+      ```dart
+      void f(int i, int j) {
+        switch (i) {
+          case [!j!]:
+            // ...
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Either make the expression a constant expression, or rewrite the `switch`
+      statement as a sequence of `if` statements:
+
+      ```dart
+      void f(int i, int j) {
+        if (i == j) {
+          // ...
+        }
+      }
+      ```
+  NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used as a case expression."
+    tip: Try re-writing the switch as a series of if statements, or changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the expression in a case clause
+      references a constant from a library that is imported using a deferred
+      import. In order for switch statements to be compiled efficiently, the
+      constants referenced in case clauses need to be available at compile time,
+      and constants from deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines the constant `zero`:
+
+      ```dart
+      %uri="lib/a.dart"
+      const zero = 0;
+      ```
+
+      The following code produces this diagnostic because the library `a.dart` is
+      imported using a `deferred` import, and the constant `a.zero`, declared in
+      the imported library, is used in a case clause:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      void f(int x) {
+        switch (x) {
+          case [!a.zero!]:
+            // ...
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If you need to reference the constant from the imported library, then
+      remove the `deferred` keyword:
+
+      ```dart
+      import 'a.dart' as a;
+
+      void f(int x) {
+        switch (x) {
+          case a.zero:
+            // ...
+            break;
+        }
+      }
+      ```
+
+      If you need to reference the constant from the imported library and also
+      need the imported library to be deferred, then rewrite the switch statement
+      as a sequence of `if` statements:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      void f(int x) {
+        if (x == a.zero) {
+          // ...
+        }
+      }
+      ```
+
+      If you don't need to reference the constant, then replace the case
+      expression:
+
+      ```dart
+      void f(int x) {
+        switch (x) {
+          case 0:
+            // ...
+            break;
+        }
+      }
+      ```
+  NON_CONSTANT_DEFAULT_VALUE:
+    template: The default value of an optional parameter must be constant.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an optional parameter, either
+      named or positional, has a default value that isn't a compile-time
+      constant.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      %language=2.9
+      var defaultValue = 3;
+
+      void f([int value = [!defaultValue!]]) {}
+      ```
+
+      #### Common fixes
+
+      If the default value can be converted to be a constant, then convert it:
+
+      ```dart
+      %language=2.9
+      const defaultValue = 3;
+
+      void f([int value = defaultValue]) {}
+      ```
+
+      If the default value needs to change over time, then apply the default
+      value inside the function:
+
+      ```dart
+      %language=2.9
+      var defaultValue = 3;
+
+      void f([int value]) {
+        value ??= defaultValue;
+      }
+      ```
+  NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be used as a default parameter value."
+    tip: Try leaving the default as null and initializing the parameter inside the function body.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the default value of an optional
+      parameter uses a constant from a library imported using a deferred import.
+      Default values need to be available at compile time, and constants from
+      deferred libraries aren't available at compile time.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines the constant `zero`:
+
+      ```dart
+      %uri="lib/a.dart"
+      const zero = 0;
+      ```
+
+      The following code produces this diagnostic because `zero` is declared in a
+      library imported using a deferred import:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      void f({int x = [!a.zero!]}) {}
+      ```
+
+      #### Common fixes
+
+      If you need to reference the constant from the imported library, then
+      remove the `deferred` keyword:
+
+      ```dart
+      import 'a.dart' as a;
+
+      void f({int x = a.zero}) {}
+      ```
+
+      If you don't need to reference the constant, then replace the default
+      value:
+
+      ```dart
+      void f({int x = 0}) {}
+      ```
+  NON_CONSTANT_LIST_ELEMENT:
+    template: The values in a const list literal must be constants.
+    tip: "Try removing the keyword 'const' from the list literal."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an element in a constant list
+      literal isn't a constant value. The list literal can be constant either
+      explicitly (because it's prefixed by the `const` keyword) or implicitly
+      (because it appears in a [constant context][]).
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` isn't a constant,
+      even though it appears in an implicitly constant list literal:
+
+      ```dart
+      var x = 2;
+      var y = const <int>[0, 1, [!x!]];
+      ```
+
+      #### Common fixes
+
+      If the list needs to be a constant list, then convert the element to be a
+      constant. In the example above, you might add the `const` keyword to the
+      declaration of `x`:
+
+      ```dart
+      const x = 2;
+      var y = const <int>[0, 1, x];
+      ```
+
+      If the expression can't be made a constant, then the list can't be a
+      constant either, so you must change the code so that the list isn't a
+      constant. In the example above this means removing the `const` keyword
+      before the list literal:
+
+      ```dart
+      var x = 2;
+      var y = <int>[0, 1, x];
+      ```
+  NON_CONSTANT_MAP_ELEMENT:
+    template: The elements in a const map literal must be constant.
+    tip: "Try removing the keyword 'const' from the map literal."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an `if` element or a spread
+      element in a constant map isn't a constant element.
+
+      #### Examples
+
+      The following code produces this diagnostic because it's attempting to
+      spread a non-constant map:
+
+      ```dart
+      var notConst = <int, int>{};
+      var map = const <int, int>{...[!notConst!]};
+      ```
+
+      Similarly, the following code produces this diagnostic because the
+      condition in the `if` element isn't a constant expression:
+
+      ```dart
+      bool notConst = true;
+      var map = const <int, int>{if ([!notConst!]) 1 : 2};
+      ```
+
+      #### Common fixes
+
+      If the map needs to be a constant map, then make the elements constants.
+      In the spread example, you might do that by making the collection being
+      spread a constant:
+
+      ```dart
+      const notConst = <int, int>{};
+      var map = const <int, int>{...notConst};
+      ```
+
+      If the map doesn't need to be a constant map, then remove the `const`
+      keyword:
+
+      ```dart
+      bool notConst = true;
+      var map = <int, int>{if (notConst) 1 : 2};
+      ```
+  NON_CONSTANT_MAP_KEY:
+    template: The keys in a const map literal must be constant.
+    tip: "Try removing the keyword 'const' from the map literal."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a key in a constant map literal
+      isn't a constant value.
+
+      #### Examples
+
+      The following code produces this diagnostic beause `a` isn't a constant:
+
+      ```dart
+      var a = 'a';
+      var m = const {[!a!]: 0};
+      ```
+
+      #### Common fixes
+
+      If the map needs to be a constant map, then make the key a constant:
+
+      ```dart
+      const a = 'a';
+      var m = const {a: 0};
+      ```
+
+      If the map doesn't need to be a constant map, then remove the `const`
+      keyword:
+
+      ```dart
+      var a = 'a';
+      var m = {a: 0};
+      ```
+  NON_CONSTANT_MAP_VALUE:
+    template: The values in a const map literal must be constant.
+    tip: "Try removing the keyword 'const' from the map literal."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a value in a constant map
+      literal isn't a constant value.
+
+      #### Examples
+
+      The following code produces this diagnostic because `a` isn't a constant:
+
+      ```dart
+      var a = 'a';
+      var m = const {0: [!a!]};
+      ```
+
+      #### Common fixes
+
+      If the map needs to be a constant map, then make the key a constant:
+
+      ```dart
+      const a = 'a';
+      var m = const {0: a};
+      ```
+
+      If the map doesn't need to be a constant map, then remove the `const`
+      keyword:
+
+      ```dart
+      var a = 'a';
+      var m = {0: a};
+      ```
+  NON_CONSTANT_SET_ELEMENT:
+    template: The values in a const set literal must be constants.
+    tip: "Try removing the keyword 'const' from the set literal."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constant set literal contains
+      an element that isn't a compile-time constant.
+
+      #### Examples
+
+      The following code produces this diagnostic because `i` isn't a constant:
+
+      ```dart
+      var i = 0;
+
+      var s = const {[!i!]};
+      ```
+
+      #### Common fixes
+
+      If the element can be changed to be a constant, then change it:
+
+      ```dart
+      const i = 0;
+
+      var s = const {i};
+      ```
+
+      If the element can't be a constant, then remove the keyword `const`:
+
+      ```dart
+      var i = 0;
+
+      var s = {i};
+      ```
+  NON_CONST_MAP_AS_EXPRESSION_STATEMENT:
+    template: "A non-constant map or set literal without type arguments can't be used as an expression statement."
+    comment: |-
+      13.2 Expression Statements: It is a compile-time error if a non-constant
+      map literal that has no explicit type arguments appears in a place where a
+      statement is expected.
+  NON_GENERATIVE_CONSTRUCTOR:
+    template: "The generative constructor '{0}' is expected, but a factory was found."
+    tip: Try calling a different constructor of the superclass, or making the called constructor not be a factory constructor.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the non-generative constructor
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the initializer list of a
+      constructor invokes a constructor from the superclass, and the invoked
+      constructor is a factory constructor. Only a generative constructor can be
+      invoked in the initializer list.
+
+      #### Example
+
+      The following code produces this diagnostic because the invocation of the
+      constructor `super.one()` is invoking a factory constructor:
+
+      ```dart
+      class A {
+        factory A.one() = B;
+        A.two();
+      }
+
+      class B extends A {
+        B() : [!super.one()!];
+      }
+      ```
+
+      #### Common fixes
+
+      Change the super invocation to invoke a generative constructor:
+
+      ```dart
+      class A {
+        factory A.one() = B;
+        A.two();
+      }
+
+      class B extends A {
+        B() : super.two();
+      }
+      ```
+
+      If the generative constructor is the unnamed constructor, and if there are
+      no arguments being passed to it, then you can remove the super invocation.
+  NON_GENERATIVE_IMPLICIT_CONSTRUCTOR:
+    template: "The unnamed constructor of superclass '{0}' (called by the default constructor of '{1}') must be a generative constructor, but factory found."
+    tip: "Try adding an explicit constructor that has a different superinitializer or changing the superclass constructor '{2}' to not be a factory constructor."
+    comment: |-
+      An error code for when a class has no explicit constructor, and therefore
+      a constructor is implicitly defined which uses a factory as a
+      superinitializer. See [NON_GENERATIVE_CONSTRUCTOR].
+
+      Parameters:
+      0: the name of the superclass
+      1: the name of the current class
+      2: the implicitly called factory constructor of the superclass
+  NON_SYNC_FACTORY:
+    template: "Factory bodies can't use 'async', 'async*', or 'sync*'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the body of a factory
+      constructor is marked with `async`, `async*`, or `sync*`. All constructors,
+      including factory constructors, are required to return an instance of the
+      class in which they're declared, not a `Future`, `Stream`, or `Iterator`.
+
+      #### Example
+
+      The following code produces this diagnostic because the body of the factory
+      constructor is marked with `async`:
+
+      ```dart
+      class C {
+        factory C() [!async!] {
+          return C._();
+        }
+        C._();
+      }
+      ```
+
+      #### Common fixes
+
+      If the member must be declared as a factory constructor, then remove the
+      keyword appearing before the body:
+
+      ```dart
+      class C {
+        factory C() {
+          return C._();
+        }
+        C._();
+      }
+      ```
+
+      If the member must return something other than an instance of the enclosing
+      class, then make the member a static method:
+
+      ```dart
+      class C {
+        static Future<C> m() async {
+          return C._();
+        }
+        C._();
+      }
+      ```
+  NON_TYPE_AS_TYPE_ARGUMENT:
+    template: "The name '{0}' isn't a type so it can't be used as a type argument."
+    tip: "Try correcting the name to an existing type, or defining a type named '{0}'."
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name appearing where a type is expected
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an identifier that isn't a type
+      is used as a type argument.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is a variable, not
+      a type:
+
+      ```dart
+      var x = 0;
+      List<[!x!]> xList = [];
+      ```
+
+      #### Common fixes
+
+      Change the type argument to be a type:
+
+      ```dart
+      var x = 0;
+      List<int> xList = [];
+      ```
+  NON_TYPE_IN_CATCH_CLAUSE:
+    template: "The name '{0}' isn't a type and can't be used in an on-catch clause."
+    tip: Try correcting the name to match an existing class.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the non-type element
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the identifier following the
+      `on` in a `catch` clause is defined to be something other than a type.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is a function, not
+      a type:
+
+      ```dart
+      %language=2.9
+      void f() {
+        try {
+          // ...
+        } on [!f!] {
+          // ...
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Change the name to the type of object that should be caught:
+
+      ```dart
+      %language=2.9
+      void f() {
+        try {
+          // ...
+        } on FormatException {
+          // ...
+        }
+      }
+      ```
+  NON_VOID_RETURN_FOR_OPERATOR:
+    template: "The return type of the operator []= must be 'void'."
+    tip: "Try changing the return type to 'void'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a declaration of the operator
+      `[]=` has a return type other than `void`.
+
+      #### Example
+
+      The following code produces this diagnostic because the declaration of the
+      operator `[]=` has a return type of `int`:
+
+      ```dart
+      class C {
+        [!int!] operator []=(int index, int value) => 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Change the return type to `void`:
+
+      ```dart
+      class C {
+        void operator []=(int index, int value) => 0;
+      }
+      ```
+  NON_VOID_RETURN_FOR_SETTER:
+    template: "The return type of the setter must be 'void' or absent."
+    tip: Try removing the return type, or define a method rather than a setter.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a setter is defined with a
+      return type other than `void`.
+
+      #### Example
+
+      The following code produces this diagnostic because the setter `p` has a
+      return type of `int`:
+
+      ```dart
+      class C {
+        [!int!] set p(int i) => 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Change the return type to `void` or omit the return type:
+
+      ```dart
+      class C {
+        set p(int i) => 0;
+      }
+      ```
+  NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE:
+    template: "The non-nullable local variable '{0}' must be assigned before it can be used."
+    tip: "Try giving it an initializer expression, or ensure that it's assigned on every execution path."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the variable that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a local variable is referenced
+      and has all these characteristics:
+      - Has a type that's [potentially non-nullable][].
+      - Doesn't have an initializer.
+      - Isn't marked as `late`.
+      - The analyzer can't prove that the local variable will be assigned before
+        the reference based on the specification of [definite assignment][].
+
+      #### Example
+
+      The following code produces this diagnostic because `x` can't have a value
+      of `null`, but is referenced before a value was assigned to it:
+
+      ```dart
+      String f() {
+        int x;
+        return [!x!].toString();
+      }
+      ```
+
+      The following code produces this diagnostic because the assignment to `x`
+      might not be executed, so it might have a value of `null`:
+
+      ```dart
+      int g(bool b) {
+        int x;
+        if (b) {
+          x = 1;
+        }
+        return [!x!] * 2;
+      }
+      ```
+
+      The following code produces this diagnostic because the analyzer can't
+      prove, based on definite assignment analysis, that `x` won't be referenced
+      without having a value assigned to it:
+
+      ```dart
+      int h(bool b) {
+        int x;
+        if (b) {
+          x = 1;
+        }
+        if (b) {
+          return [!x!] * 2;
+        }
+        return 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If `null` is a valid value, then make the variable nullable:
+
+      ```dart
+      String f() {
+        int? x;
+        return x!.toString();
+      }
+      ```
+
+      If `null` isn’t a valid value, and there's a reasonable default value, then
+      add an initializer:
+
+      ```dart
+      int g(bool b) {
+        int x = 2;
+        if (b) {
+          x = 1;
+        }
+        return x * 2;
+      }
+      ```
+
+      Otherwise, ensure that a value was assigned on every possible code path
+      before the value is accessed:
+
+      ```dart
+      int g(bool b) {
+        int x;
+        if (b) {
+          x = 1;
+        } else {
+          x = 2;
+        }
+        return x * 2;
+      }
+      ```
+
+      You can also mark the variable as `late`, which removes the diagnostic, but
+      if the variable isn't assigned a value before it's accessed, then it
+      results in an exception being thrown at runtime. This approach should only
+      be used if you're sure that the variable will always be assigned, even
+      though the analyzer can't prove it based on definite assignment analysis.
+
+      ```dart
+      int h(bool b) {
+        late int x;
+        if (b) {
+          x = 1;
+        }
+        if (b) {
+          return x * 2;
+        }
+        return 0;
+      }
+      ```
+  NOT_A_TYPE:
+    template: "{0} isn't a type."
+    tip: Try correcting the name to match an existing type.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name that is not a type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name is used as a type but
+      declared to be something other than a type.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is a function:
+
+      ```dart
+      f() {}
+      g([!f!] v) {}
+      ```
+
+      #### Common fixes
+
+      Replace the name with the name of a type.
+  NOT_BINARY_OPERATOR:
+    template: "'{0}' isn't a binary operator."
+    comment: |-
+      Parameters:
+      0: the name of the operator that is not a binary operator.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an operator that can only be
+      used as a unary operator is used as a binary operator.
+
+      #### Example
+
+      The following code produces this diagnostic because the operator `~` can
+      only be used as a unary operator:
+
+      ```dart
+      var a = 5 [!~!] 3;
+      ```
+
+      #### Common fixes
+
+      Replace the operator with the correct binary operator:
+
+      ```dart
+      var a = 5 - 3;
+      ```
+  NOT_ENOUGH_POSITIONAL_ARGUMENTS:
+    template: "{0} positional argument(s) expected, but {1} found."
+    tip: Try adding the missing arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the expected number of required arguments
+      1: the actual number of positional arguments given
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function invocation
+      has fewer positional arguments than the number of required positional
+      parameters.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` declares two
+      required parameters, but only one argument is provided:
+
+      ```dart
+      void f(int a, int b) {}
+      void g() {
+        f[!(0)!];
+      }
+      ```
+
+      #### Common fixes
+
+      Add arguments corresponding to the remaining parameters:
+
+      ```dart
+      void f(int a, int b) {}
+      void g() {
+        f(0, 1);
+      }
+      ```
+  NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
+    template: "Non-nullable instance field '{0}' must be initialized."
+    tip: "Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field that is not initialized
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a field is declared and has all
+      these characteristics:
+      - Has a type that's [potentially non-nullable][]
+      - Doesn't have an initializer
+      - Isn't marked as `late`
+
+      #### Example
+
+      The following code produces this diagnostic because `x` is implicitly
+      initialized to `null` when it isn't allowed to be `null`:
+
+      ```dart
+      class C {
+        int [!x!];
+      }
+      ```
+
+      Similarly, the following code produces this diagnostic because `x` is
+      implicitly initialized to `null`, when it isn't allowed to be `null`, by
+      one of the constructors, even though it's initialized by other
+      constructors:
+
+      ```dart
+      class C {
+        int x;
+
+        C(this.x);
+
+        [!C!].n();
+      }
+      ```
+
+      #### Common fixes
+
+      If there's a reasonable default value for the field that’s the same for all
+      instances, then add an initializer expression:
+
+      ```dart
+      class C {
+        int x = 0;
+      }
+      ```
+
+      If the value of the field should be provided when an instance is created,
+      then add a constructor that sets the value of the field or update an
+      existing constructor:
+
+      ```dart
+      class C {
+        int x;
+
+        C(this.x);
+      }
+      ```
+
+      You can also mark the field as `late`, which removes the diagnostic, but if
+      the field isn't assigned a value before it's accessed, then it results in
+      an exception being thrown at runtime. This approach should only be used if
+      you're sure that the field will always be assigned before it's referenced.
+
+      ```dart
+      class C {
+        late int x;
+      }
+      ```
+  NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR:
+    sharedName: NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD
+    template: "Non-nullable instance field '{0}' must be initialized."
+    tip: "Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the field that is not initialized
+  NOT_INITIALIZED_NON_NULLABLE_VARIABLE:
+    template: "The non-nullable variable '{0}' must be initialized."
+    tip: Try adding an initializer expression.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the variable that is invalid
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a static field or top-level
+      variable has a type that's non-nullable and doesn't have an initializer.
+      Fields and variables that don't have an initializer are normally
+      initialized to `null`, but the type of the field or variable doesn't allow
+      it to be set to `null`, so an explicit initializer must be provided.
+
+      #### Example
+
+      The following code produces this diagnostic because the field `f` can't be
+      initialized to `null`:
+
+      ```dart
+      class C {
+        static int [!f!];
+      }
+      ```
+
+      Similarly, the following code produces this diagnostic because the
+      top-level variable `v` can't be initialized to `null`:
+
+      ```dart
+      int [!v!];
+      ```
+
+      #### Common fixes
+
+      If the field or variable can't be initialized to `null`, then add an
+      initializer that sets it to a non-null value:
+
+      ```dart
+      class C {
+        static int f = 0;
+      }
+      ```
+
+      If the field or variable should be initialized to `null`, then change the
+      type to be nullable:
+
+      ```dart
+      int? v;
+      ```
+
+      If the field or variable can't be initialized in the declaration but will
+      always be initialized before it's referenced, then mark it as being `late`:
+
+      ```dart
+      class C {
+        static late int f;
+      }
+      ```
+  NOT_INSTANTIATED_BOUND:
+    template: Type parameter bound types must be instantiated.
+    tip: Try adding type arguments to the type parameter bound.
+    comment: No parameters.
+  NOT_ITERABLE_SPREAD:
+    template: "Spread elements in list or set literals must implement 'Iterable'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the static type of the
+      expression of a spread element that appears in either a list literal or a
+      set literal doesn't implement the type `Iterable`.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      var m = <String, int>{'a': 0, 'b': 1};
+      var s = <String>{...[!m!]};
+      ```
+
+      #### Common fixes
+
+      The most common fix is to replace the expression with one that produces an
+      iterable object:
+
+      ```dart
+      var m = <String, int>{'a': 0, 'b': 1};
+      var s = <String>{...m.keys};
+      ```
+  NOT_MAP_SPREAD:
+    template: "Spread elements in map literals must implement 'Map'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the static type of the
+      expression of a spread element that appears in a map literal doesn't
+      implement the type `Map`.
+
+      #### Examples
+
+      The following code produces this diagnostic because `l` isn't a `Map`:
+
+      ```dart
+      var l =  <String>['a', 'b'];
+      var m = <int, String>{...[!l!]};
+      ```
+
+      #### Common fixes
+
+      The most common fix is to replace the expression with one that produces a
+      map:
+
+      ```dart
+      var l =  <String>['a', 'b'];
+      var m = <int, String>{...l.asMap()};
+      ```
+  NOT_NULL_AWARE_NULL_SPREAD:
+    template: "The Null typed expression can't be used with a non-null-aware spread."
+    comment: No parameters.
+  NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
+    template: Annotation creation must have arguments.
+    tip: Try adding an empty argument list.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an annotation consists of a
+      single identifier, but that identifier is the name of a class rather than a
+      variable. To create an instance of the class, the identifier must be
+      followed by an argument list.
+
+      #### Examples
+
+      The following code produces this diagnostic because `C` is a class, and a
+      class can't be used as an annotation without invoking a `const` constructor
+      from the class:
+
+      ```dart
+      class C {
+        const C();
+      }
+
+      [!@C!]
+      var x;
+      ```
+
+      #### Common fixes
+
+      Add the missing argument list:
+
+      ```dart
+      class C {
+        const C();
+      }
+
+      @C()
+      var x;
+      ```
+  NO_COMBINED_SUPER_SIGNATURE:
+    template: "Can't infer missing types in '{0}' from overridden methods: {1}."
+    tip: "Try providing explicit types for this method's parameters and return type."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class where override error was detected
+      1: the list of candidate signatures which cannot be combined
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there is a method declaration
+      for which one or more types needs to be inferred, and those types can't be
+      inferred because none of the overridden methods has a function type that is
+      a supertype of all the other overridden methods, as specified by
+      [override inference][].
+
+      #### Example
+
+      The following code produces this diagnostic because the method `m` declared
+      in the class `C` is missing both the return type and the type of the
+      parameter `a`, and neither of the missing types can be inferred for it:
+
+      ```dart
+      abstract class A {
+        A m(String a);
+      }
+
+      abstract class B {
+        B m(int a);
+      }
+
+      abstract class C implements A, B {
+        [!m!](a);
+      }
+      ```
+
+      In this example, override inference can't be performed because the
+      overridden methods are incompatible in these ways:
+      - Neither parameter type (`String` and `int`) is a supertype of the other.
+      - Neither return type is a subtype of the other.
+
+      #### Common fixes
+
+      If possible, add types to the method in the subclass that are consistent
+      with the types from all the overridden methods:
+
+      ```dart
+      abstract class A {
+        A m(String a);
+      }
+
+      abstract class B {
+        B m(int a);
+      }
+
+      abstract class C implements A, B {
+        C m(Object a);
+      }
+      ```
+  NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT:
+    sharedName: NO_DEFAULT_SUPER_CONSTRUCTOR
+    template: "The superclass '{0}' doesn't have a zero argument constructor."
+    tip: "Try declaring a zero argument constructor in '{0}', or explicitly invoking a different constructor in '{0}'."
+    comment: |-
+      Parameters:
+      0: the name of the superclass that does not define an implicitly invoked
+         constructor
+  NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT:
+    sharedName: NO_DEFAULT_SUPER_CONSTRUCTOR
+    template: "The superclass '{0}' doesn't have a zero argument constructor."
+    tip: "Try declaring a zero argument constructor in '{0}', or declaring a constructor in {1} that explicitly invokes a constructor in '{0}'."
+    comment: |-
+      Parameters:
+      0: the name of the superclass that does not define an implicitly invoked
+         constructor
+      1: the name of the subclass that does not contain any explicit constructors
+  NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
+    template: "The class '{0}' cannot extend '{1}' because '{1}' only has factory constructors (no generative constructors), and '{0}' has at least one generative constructor."
+    tip: "Try implementing the class instead, adding a generative (not factory) constructor to the superclass {0}, or a factory constructor to the subclass."
+    comment: |-
+      User friendly specialized error for [NON_GENERATIVE_CONSTRUCTOR]. This
+      handles the case of `class E extends Exception` which will never work
+      because [Exception] has no generative constructors.
+
+      Parameters:
+      0: the name of the subclass
+      1: the name of the superclass
+  NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
+    template: "A class can't extend a nullable type."
+    tip: Try removing the question mark.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class declaration uses an
+      `extends` clause to specify a superclass, and the superclass is followed by
+      a `?`.
+
+      It isn't valid to specify a nullable superclass because doing so would have
+      no meaning; it wouldn't change either the interface or implementation being
+      inherited by the class containing the `extends` clause.
+
+      Note, however, that it _is_ valid to use a nullable type as a type argument
+      to the superclass, such as `class A extends B<C?> {}`.
+
+      #### Example
+
+      The following code produces this diagnostic because `A?` is a nullable
+      type, and nullable types can't be used in an `extends` clause:
+
+      ```dart
+      class A {}
+      class B extends [!A?!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the question mark from the type:
+
+      ```dart
+      class A {}
+      class B extends A {}
+      ```
+  NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE:
+    template: "A class or mixin can't implement a nullable type."
+    tip: Try removing the question mark.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class or mixin declaration has
+      an `implements` clause, and an interface is followed by a `?`.
+
+      It isn't valid to specify a nullable interface because doing so would have
+      no meaning; it wouldn't change the interface being inherited by the class
+      containing the `implements` clause.
+
+      Note, however, that it _is_ valid to use a nullable type as a type argument
+      to the interface, such as `class A implements B<C?> {}`.
+
+
+      #### Example
+
+      The following code produces this diagnostic because `A?` is a nullable
+      type, and nullable types can't be used in an `implements` clause:
+
+      ```dart
+      class A {}
+      class B implements [!A?!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the question mark from the type:
+
+      ```dart
+      class A {}
+      class B implements A {}
+      ```
+  NULLABLE_TYPE_IN_ON_CLAUSE:
+    template: "A mixin can't have a nullable type as a superclass constraint."
+    tip: Try removing the question mark.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a mixin declaration uses an `on`
+      clause to specify a superclass constraint, and the class that's specified
+      is followed by a `?`.
+
+      It isn't valid to specify a nullable superclass constraint because doing so
+      would have no meaning; it wouldn't change the interface being depended on
+      by the mixin containing the `on` clause.
+
+      Note, however, that it _is_ valid to use a nullable type as a type argument
+      to the superclass constraint, such as `mixin A on B<C?> {}`.
+
+
+      #### Example
+
+      The following code produces this diagnostic because `A?` is a nullable type
+      and nullable types can't be used in an `on` clause:
+
+      ```dart
+      class C {}
+      mixin M on [!C?!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the question mark from the type:
+
+      ```dart
+      class C {}
+      mixin M on C {}
+      ```
+  NULLABLE_TYPE_IN_WITH_CLAUSE:
+    template: "A class or mixin can't mix in a nullable type."
+    tip: Try removing the question mark.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class or mixin declaration has
+      a `with` clause, and a mixin is followed by a `?`.
+
+      It isn't valid to specify a nullable mixin because doing so would have no
+      meaning; it wouldn't change either the interface or implementation being
+      inherited by the class containing the `with` clause.
+
+      Note, however, that it _is_ valid to use a nullable type as a type argument
+      to the mixin, such as `class A with B<C?> {}`.
+
+      #### Example
+
+      The following code produces this diagnostic because `A?` is a nullable
+      type, and nullable types can't be used in a `with` clause:
+
+      ```dart
+      mixin M {}
+      class C with [!M?!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the question mark from the type:
+
+      ```dart
+      mixin M {}
+      class C with M {}
+      ```
+  OBJECT_CANNOT_EXTEND_ANOTHER_CLASS:
+    template: "The class 'Object' can't extend any other class."
+    comment: |-
+      7.9 Superclasses: It is a compile-time error to specify an extends clause
+      for class Object.
+  ON_REPEATED:
+    template: "The type '{0}' can be included in the superclass constraints only once."
+    tip: Try removing all except one occurrence of the type name.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the interface that is implemented more than once
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the same type is listed in the
+      superclass constraints of a mixin multiple times.
+
+      #### Example
+
+      The following code produces this diagnostic because `A` is included twice
+      in the superclass constraints for `M`:
+
+      ```dart
+      mixin M on A, [!A!] {
+      }
+
+      class A {}
+      class B {}
+      ```
+
+      #### Common fixes
+
+      If a different type should be included in the superclass constraints, then
+      replace one of the occurrences with the other type:
+
+      ```dart
+      mixin M on A, B {
+      }
+
+      class A {}
+      class B {}
+      ```
+
+      If no other type was intended, then remove the repeated type name:
+
+      ```dart
+      mixin M on A {
+      }
+
+      class A {}
+      class B {}
+      ```
+  OPTIONAL_PARAMETER_IN_OPERATOR:
+    template: "Optional parameters aren't allowed when defining an operator."
+    tip: Try removing the optional parameters.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when one or more of the parameters in
+      an operator declaration are optional.
+
+      #### Example
+
+      The following code produces this diagnostic because the parameter `other`
+      is an optional parameter:
+
+      ```dart
+      class C {
+        C operator +([[!C? other!]]) => this;
+      }
+      ```
+
+      #### Common fixes
+
+      Make all of the parameters be required parameters:
+
+      ```dart
+      class C {
+        C operator +(C other) => this;
+      }
+      ```
+  PART_OF_DIFFERENT_LIBRARY:
+    template: "Expected this library to be part of '{0}', not '{1}'."
+    tip: "Try including a different part, or changing the name of the library in the part's part-of directive."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of expected library name
+      1: the non-matching actual library name from the "part of" declaration
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library attempts to include a
+      file as a part of itself when the other file is a part of a different
+      library.
+
+      #### Example
+
+      Given a file named `part.dart` containing
+
+      ```dart
+      %uri="package:a/part.dart"
+      part of 'library.dart';
+      ```
+
+      The following code, in any file other than `library.dart`, produces this
+      diagnostic because it attempts to include `part.dart` as a part of itself
+      when `part.dart` is a part of a different library:
+
+      ```dart
+      part [!'package:a/part.dart'!];
+      ```
+
+      #### Common fixes
+
+      If the library should be using a different file as a part, then change the
+      URI in the part directive to be the URI of the other file.
+
+      If the part file should be a part of this library, then update the URI (or
+      library name) in the part-of directive to be the URI (or name) of the
+      correct library.
+  PART_OF_NON_PART:
+    template: "The included part '{0}' must have a part-of directive."
+    tip: "Try adding a part-of directive to '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the uri pointing to a non-library declaration
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a part directive is found and
+      the referenced file doesn't have a part-of directive.
+
+      #### Examples
+
+      Given a file (`a.dart`) containing:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {}
+      ```
+
+      The following code produces this diagnostic because `a.dart` doesn't
+      contain a part-of directive:
+
+      ```dart
+      part [!'a.dart'!];
+      ```
+
+      #### Common fixes
+
+      If the referenced file is intended to be a part of another library, then
+      add a part-of directive to the file:
+
+      ```dart
+      part of 'test.dart';
+
+      class A {}
+      ```
+
+      If the referenced file is intended to be a library, then replace the part
+      directive with an import directive:
+
+      ```dart
+      import 'a.dart';
+      ```
+  PART_OF_UNNAMED_LIBRARY:
+    template: "The library is unnamed. A URI is expected, not a library name '{0}', in the part-of directive."
+    tip: Try changing the part-of directive to a URI, or try including a different part.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the URI of the expected library
+      1: the non-matching actual library name from the "part of" declaration
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library that doesn't have a
+      `library` directive (and hence has no name) contains a `part` directive and
+      the `part of` directive in the part file uses a name to specify the library
+      that it's a part of.
+
+      #### Example
+
+      Given a part file named `part_file.dart` containing the following code:
+
+      ```dart
+      %uri="lib/part_file.dart"
+      part of lib;
+      ```
+
+      The following code produces this diagnostic because the library including
+      the part file doesn't have a name even though the part file uses a name to
+      specify which library it's a part of:
+
+      ```dart
+      part [!'part_file.dart'!];
+      ```
+
+      #### Common fixes
+
+      Change the `part of` directive in the part file to specify its library by
+      URI:
+
+      ```dart
+      part of 'test.dart';
+      ```
+  PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
+    template: "The name '{0}' is already used as an import prefix and can't be used to name a top-level element."
+    tip: Try renaming either the top-level element or the prefix.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the prefix
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name is used as both an import
+      prefix and the name of a top-level declaration in the same library.
+
+      #### Example
+
+      The following code produces this diagnostic because `f` is used as both an
+      import prefix and the name of a function:
+
+      ```dart
+      import 'dart:math' as f;
+
+      int [!f!]() => f.min(0, 1);
+      ```
+
+      #### Common fixes
+
+      If you want to use the name for the import prefix, then rename the
+      top-level declaration:
+
+      ```dart
+      import 'dart:math' as f;
+
+      int g() => f.min(0, 1);
+      ```
+
+      If you want to use the name for the top-level declaration, then rename the
+      import prefix:
+
+      ```dart
+      import 'dart:math' as math;
+
+      int f() => math.min(0, 1);
+      ```
+  PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT:
+    template: "The name '{0}' refers to an import prefix, so it must be followed by '.'."
+    tip: Try correcting the name to refer to something other than a prefix, or renaming the prefix.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the prefix
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import prefix is used by
+      itself, without accessing any of the names declared in the libraries
+      associated with the prefix. Prefixes aren't variables, and therefore can't
+      be used as a value.
+
+      #### Example
+
+      The following code produces this diagnostic because the prefix `math` is
+      being used as if it were a variable:
+
+      ```dart
+      import 'dart:math' as math;
+
+      void f() {
+        print([!math!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the code is incomplete, then reference something in one of the libraries
+      associated with the prefix:
+
+      ```dart
+      import 'dart:math' as math;
+
+      void f() {
+        print(math.pi);
+      }
+      ```
+
+      If the name is wrong, then correct the name.
+  PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
+    template: "The prefix '{0}' can't be used here because it is shadowed by a local declaration."
+    tip: Try renaming either the prefix or the local declaration.
+    comment: |-
+      From the `Static Types` section of the spec:
+
+          A type T is malformed if:
+          - T has the form id or the form prefix.id, and in the enclosing lexical
+            scope, the name id (respectively prefix.id) does not denote a type.
+
+      In particular, this means that if an import prefix is shadowed by a local
+      declaration, it is an error to try to use it as a prefix for a type name.
+  PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
+    template: "The private name '{0}', defined by '{1}', conflicts with the same name defined by '{2}'."
+    tip: "Try removing '{1}' from the 'with' clause."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the private name that collides
+      1: the name of the first mixin
+      2: the name of the second mixin
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when two mixins that define the same
+      private member are used together in a single class in a library other than
+      the one that defines the mixins.
+
+      #### Example
+
+      Given a file named `a.dart` containing the following code:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {
+        void _foo() {}
+      }
+
+      class B {
+        void _foo() {}
+      }
+      ```
+
+      The following code produces this diagnostic because the classes `A` and `B`
+      both define the method `_foo`:
+
+      ```dart
+      import 'a.dart';
+
+      class C extends Object with A, [!B!] {}
+      ```
+
+      #### Common fixes
+
+      If you don't need both of the mixins, then remove one of them from the
+      `with` clause:
+
+      ```dart
+      import 'a.dart';
+
+      class C extends Object with A, [!B!] {}
+      ```
+
+      If you need both of the mixins, then rename the conflicting member in one
+      of the two mixins.
+  PRIVATE_OPTIONAL_PARAMETER:
+    template: "Named parameters can't start with an underscore."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name of a named parameter
+      starts with an underscore.
+
+      #### Example
+
+      The following code produces this diagnostic because the named parameter
+      `_x` starts with an underscore:
+
+      ```dart
+      class C {
+        void m({int [!_x!] = 0}) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Rename the parameter so that it doesn't start with an underscore:
+
+      ```dart
+      class C {
+        void m({int x = 0}) {}
+      }
+      ```
+  PRIVATE_SETTER:
+    template: "The setter '{0}' is private and can't be accessed outside of the library that declares it."
+    tip: Try making it public.
+  READ_POTENTIALLY_UNASSIGNED_FINAL:
+    template: "The final variable '{0}' can't be read because it is potentially unassigned at this point."
+    tip: Ensure that it is assigned on necessary execution paths.
+  RECURSIVE_COMPILE_TIME_CONSTANT:
+    template: The compile-time constant expression depends on itself.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of a compile-time
+      constant is defined in terms of itself, either directly or indirectly,
+      creating an infinite loop.
+
+      #### Example
+
+      The following code produces this diagnostic twice because both of the
+      constants are defined in terms of the other:
+
+      ```dart
+      const [!secondsPerHour!] = minutesPerHour * 60;
+      const [!minutesPerHour!] = secondsPerHour / 60;
+      ```
+
+      #### Common fixes
+
+      Break the cycle by finding an alternative way of defining at least one of
+      the constants:
+
+      ```dart
+      const secondsPerHour = minutesPerHour * 60;
+      const minutesPerHour = 60;
+      ```
+  RECURSIVE_CONSTRUCTOR_REDIRECT:
+    template: "Constructors can't redirect to themselves either directly or indirectly."
+    tip: Try changing one of the constructors in the loop to not redirect.
+    hasPublishedDocs: true
+    comment: |-
+      No parameters.
+
+      TODO(scheglov) review this later, there are no explicit "it is a
+      compile-time error" in specification. But it was added to the co19 and
+      there is same error for factories.
+
+      https://code.google.com/p/dart/issues/detail?id=954
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor redirects to
+      itself, either directly or indirectly, creating an infinite loop.
+
+      #### Example
+
+      The following code produces this diagnostic because the generative
+      constructors `C.a` and `C.b` each redirect to the other:
+
+      ```dart
+      class C {
+        C.a() : [!this.b()!];
+        C.b() : [!this.a()!];
+      }
+      ```
+
+      The following code produces this diagnostic because the factory
+      constructors `A` and `B` each redirect to the other:
+
+      ```dart
+      abstract class A {
+        factory A() = [!B!];
+      }
+      class B implements A {
+        factory B() = [!A!];
+        B.named();
+      }
+      ```
+
+      #### Common fixes
+
+      In the case of generative constructors, break the cycle by finding defining
+      at least one of the constructors to not redirect to another constructor:
+
+      ```dart
+      class C {
+        C.a() : this.b();
+        C.b();
+      }
+      ```
+
+      In the case of factory constructors, break the cycle by defining at least
+      one of the factory constructors to do one of the following:
+
+      - Redirect to a generative constructor:
+
+      ```dart
+      abstract class A {
+        factory A() = B;
+      }
+      class B implements A {
+        factory B() = B.named;
+        B.named();
+      }
+      ```
+
+      - Not redirect to another constructor:
+
+      ```dart
+      abstract class A {
+        factory A() = B;
+      }
+      class B implements A {
+        factory B() {
+          return B.named();
+        }
+
+        B.named();
+      }
+      ```
+
+      - Not be a factory constructor:
+
+      ```dart
+      abstract class A {
+        factory A() = B;
+      }
+      class B implements A {
+        B();
+        B.named();
+      }
+      ```
+  RECURSIVE_FACTORY_REDIRECT:
+    sharedName: RECURSIVE_CONSTRUCTOR_REDIRECT
+    template: "Constructors can't redirect to themselves either directly or indirectly."
+    tip: Try changing one of the constructors in the loop to not redirect.
+    hasPublishedDocs: true
+    comment: No parameters.
+  RECURSIVE_INTERFACE_INHERITANCE:
+    template: "'{0}' can't be a superinterface of itself: {1}."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class that implements itself recursively
+      1: a string representation of the implements loop
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's a circularity in the
+      type hierarchy. This happens when a type, either directly or indirectly,
+      is declared to be a subtype of itself.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `A` is
+      declared to be a subtype of `B`, and `B` is a subtype of `A`:
+
+      ```dart
+      class [!A!] extends B {}
+      class B implements A {}
+      ```
+
+      #### Common fixes
+
+      Change the type hierarchy so that there's no circularity.
+  RECURSIVE_INTERFACE_INHERITANCE_EXTENDS:
+    sharedName: RECURSIVE_INTERFACE_INHERITANCE
+    template: "'{0}' can't extend itself."
+    hasPublishedDocs: true
+    comment: |-
+      7.10 Superinterfaces: It is a compile-time error if the interface of a
+      class <i>C</i> is a superinterface of itself.
+
+      8.1 Superinterfaces: It is a compile-time error if an interface is a
+      superinterface of itself.
+
+      7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+      superclass of itself.
+
+      Parameters:
+      0: the name of the class that implements itself recursively
+  RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS:
+    sharedName: RECURSIVE_INTERFACE_INHERITANCE
+    template: "'{0}' can't implement itself."
+    hasPublishedDocs: true
+    comment: |-
+      7.10 Superinterfaces: It is a compile-time error if the interface of a
+      class <i>C</i> is a superinterface of itself.
+
+      8.1 Superinterfaces: It is a compile-time error if an interface is a
+      superinterface of itself.
+
+      7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+      superclass of itself.
+
+      Parameters:
+      0: the name of the class that implements itself recursively
+  RECURSIVE_INTERFACE_INHERITANCE_ON:
+    sharedName: RECURSIVE_INTERFACE_INHERITANCE
+    template: "'{0}' can't use itself as a superclass constraint."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the mixin that constraints itself recursively
+  RECURSIVE_INTERFACE_INHERITANCE_WITH:
+    sharedName: RECURSIVE_INTERFACE_INHERITANCE
+    template: "'{0}' can't use itself as a mixin."
+    hasPublishedDocs: true
+    comment: |-
+      7.10 Superinterfaces: It is a compile-time error if the interface of a
+      class <i>C</i> is a superinterface of itself.
+
+      8.1 Superinterfaces: It is a compile-time error if an interface is a
+      superinterface of itself.
+
+      7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+      superclass of itself.
+
+      Parameters:
+      0: the name of the class that implements itself recursively
+  REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR:
+    template: "The constructor '{0}' couldn't be found in '{1}'."
+    tip: "Try redirecting to a different constructor, or defining the constructor named '{0}'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generative constructor
+      redirects to a constructor that isn't defined.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor `C.a`
+      redirects to the constructor `C.b`, but `C.b` isn't defined:
+
+      ```dart
+      class C {
+        C.a() : [!this.b()!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the missing constructor must be called, then define it:
+
+      ```dart
+      class C {
+        C.a() : this.b();
+        C.b();
+      }
+      ```
+
+      If the missing constructor doesn't need to be called, then remove the
+      redirect:
+
+      ```dart
+      class C {
+        C.a();
+      }
+      ```
+  REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR:
+    template: "Generative constructors can't redirect to a factory constructor."
+    tip: Try redirecting to a different constructor.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generative constructor
+      redirects to a factory constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the generative
+      constructor `C.a` redirects to the factory constructor `C.b`:
+
+      ```dart
+      class C {
+        C.a() : [!this.b()!];
+        factory C.b() => C.a();
+      }
+      ```
+
+      #### Common fixes
+
+      If the generative constructor doesn't need to redirect to another
+      constructor, then remove the redirect.
+
+      ```dart
+      class C {
+        C.a();
+        factory C.b() => C.a();
+      }
+      ```
+
+      If the generative constructor must redirect to another constructor, then
+      make the other constructor be a generative (non-factory) constructor:
+
+      ```dart
+      class C {
+        C.a() : this.b();
+        C.b();
+      }
+      ```
+  REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR:
+    template: "The redirecting constructor '{0}' can't redirect to a constructor of the abstract class '{1}'."
+    tip: Try redirecting to a constructor of a different class.
+    comment: |-
+      A factory constructor can't redirect to a non-generative constructor of an
+      abstract class.
+  REDIRECT_TO_INVALID_FUNCTION_TYPE:
+    template: "The redirected constructor '{0}' has incompatible parameters with '{1}'."
+    tip: Try redirecting to a different constructor.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the redirected constructor
+      1: the name of the redirecting constructor
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a factory constructor attempts
+      to redirect to another constructor, but the two have incompatible
+      parameters. The parameters are compatible if all of the parameters of the
+      redirecting constructor can be passed to the other constructor and if the
+      other constructor doesn't require any parameters that aren't declared by
+      the redirecting constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because the constructor for `A`
+      doesn't declare a parameter that the constructor for `B` requires:
+
+      ```dart
+      abstract class A {
+        factory A() = [!B!];
+      }
+
+      class B implements A {
+        B(int x);
+        B.zero();
+      }
+      ```
+
+      The following code produces this diagnostic because the constructor for `A`
+      declares a named parameter (`y`) that the constructor for `B` doesn't
+      allow:
+
+      ```dart
+      abstract class A {
+        factory A(int x, {int y}) = [!B!];
+      }
+
+      class B implements A {
+        B(int x);
+      }
+      ```
+
+      #### Common fixes
+
+      If there's a different constructor that is compatible with the redirecting
+      constructor, then redirect to that constructor:
+
+      ```dart
+      abstract class A {
+        factory A() = B.zero;
+      }
+
+      class B implements A {
+        B(int x);
+        B.zero();
+      }
+      ```
+
+      Otherwise, update the redirecting constructor to be compatible:
+
+      ```dart
+      abstract class A {
+        factory A(int x) = B;
+      }
+
+      class B implements A {
+        B(int x);
+      }
+      ```
+  REDIRECT_TO_INVALID_RETURN_TYPE:
+    template: "The return type '{0}' of the redirected constructor isn't a subtype of '{1}'."
+    tip: Try redirecting to a different constructor.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the redirected constructor's return type
+      1: the name of the redirecting constructor's return type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a factory constructor redirects
+      to a constructor whose return type isn't a subtype of the type that the
+      factory constructor is declared to produce.
+
+      #### Examples
+
+      The following code produces this diagnostic because `A` isn't a subclass
+      of `C`, which means that the value returned by the constructor `A()`
+      couldn't be returned from the constructor `C()`:
+
+      ```dart
+      class A {}
+
+      class B implements C {}
+
+      class C {
+        factory C() = [!A!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the factory constructor is redirecting to a constructor in the wrong
+      class, then update the factory constructor to redirect to the correct
+      constructor:
+
+      ```dart
+      class A {}
+
+      class B implements C {}
+
+      class C {
+        factory C() = B;
+      }
+      ```
+
+      If the class defining the constructor being redirected to is the class that
+      should be returned, then make it a subtype of the factory's return type:
+
+      ```dart
+      class A implements C {}
+
+      class B implements C {}
+
+      class C {
+        factory C() = A;
+      }
+      ```
+  REDIRECT_TO_MISSING_CONSTRUCTOR:
+    template: "The constructor '{0}' couldn't be found in '{1}'."
+    tip: "Try redirecting to a different constructor, or define the constructor named '{0}'."
+    comment: |-
+      7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with
+      the const modifier but <i>k'</i> is not a constant constructor.
+  REDIRECT_TO_NON_CLASS:
+    template: "The name '{0}' isn't a type and can't be used in a redirected constructor."
+    tip: Try redirecting to a different constructor.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the non-type referenced in the redirect
+    documentation: |-
+      #### Description
+
+      One way to implement a factory constructor is to redirect to another
+      constructor by referencing the name of the constructor. The analyzer
+      produces this diagnostic when the redirect is to something other than a
+      constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is a function:
+
+      ```dart
+      C f() => throw 0;
+
+      class C {
+        factory C() = [!f!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the constructor isn't defined, then either define it or replace it with
+      a constructor that is defined.
+
+      If the constructor is defined but the class that defines it isn't visible,
+      then you probably need to add an import.
+
+      If you're trying to return the value returned by a function, then rewrite
+      the constructor to return the value from the constructor's body:
+
+      ```dart
+      C f() => throw 0;
+
+      class C {
+        factory C() => f();
+      }
+      ```
+  REDIRECT_TO_NON_CONST_CONSTRUCTOR:
+    template: "A constant redirecting constructor can't redirect to a non-constant constructor."
+    tip: Try redirecting to a different constructor.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor marked as `const`
+      redirects to a constructor that isn't marked as `const`.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor `C.a`
+      is marked as `const` but redirects to the constructor `C.b`, which isn't:
+
+      ```dart
+      class C {
+        const C.a() : this.[!b!]();
+        C.b();
+      }
+      ```
+
+      #### Common fixes
+
+      If the non-constant constructor can be marked as `const`, then mark it as
+      `const`:
+
+      ```dart
+      class C {
+        const C.a() : this.b();
+        const C.b();
+      }
+      ```
+
+      If the non-constant constructor can't be marked as `const`, then either
+      remove the redirect or remove `const` from the redirecting constructor:
+
+      ```dart
+      class C {
+        C.a() : this.b();
+        C.b();
+      }
+      ```
+  REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    template: "A redirecting constructor can't redirect to a type alias that expands to a type parameter."
+    tip: Try replacing it with a class.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a redirecting factory
+      constructor redirects to a type alias, and the type alias expands to one of
+      the type parameters of the type alias. This isn’t allowed because the value
+      of the type parameter is a type rather than a class.
+
+      #### Example
+
+      The following code produces this diagnostic because the redirect to `B<A>`
+      is to a type alias whose value is `T`, even though it looks like the value
+      should be `A`:
+
+      ```dart
+      class A implements C {}
+
+      typedef B<T> = T;
+
+      abstract class C {
+        factory C() = [!B!]<A>;
+      }
+      ```
+
+      #### Common fixes
+
+      Use either a class name or a type alias that is defined to be a class
+      rather than a type alias defined to be a type parameter:
+
+      ```dart
+      class A implements C {}
+
+      abstract class C {
+        factory C() = A;
+      }
+      ```
+  REFERENCED_BEFORE_DECLARATION:
+    template: "Local variable '{0}' can't be referenced before it is declared."
+    tip: "Try moving the declaration to before the first use, or renaming the local variable so that it doesn't hide a name from an enclosing scope."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a variable is referenced before
+      it’s declared. In Dart, variables are visible everywhere in the block in
+      which they are declared, but can only be referenced after they are
+      declared.
+
+      The analyzer also produces a context message that indicates where the
+      declaration is located.
+
+      #### Examples
+
+      The following code produces this diagnostic because `i` is used before it
+      is declared:
+
+      ```dart
+      %language=2.9
+      void f() {
+        print([!i!]);
+        int i = 5;
+      }
+      ```
+
+      #### Common fixes
+
+      If you intended to reference the local variable, move the declaration
+      before the first reference:
+
+      ```dart
+      %language=2.9
+      void f() {
+        int i = 5;
+        print(i);
+      }
+      ```
+
+      If you intended to reference a name from an outer scope, such as a
+      parameter, instance field or top-level variable, then rename the local
+      declaration so that it doesn't hide the outer variable.
+
+      ```dart
+      %language=2.9
+      void f(int i) {
+        print(i);
+        int x = 5;
+        print(x);
+      }
+      ```
+  RETHROW_OUTSIDE_CATCH:
+    template: A rethrow must be inside of a catch clause.
+    tip: "Try moving the expression into a catch clause, or using a 'throw' expression."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `rethrow` statement is outside
+      a `catch` clause. The `rethrow` statement is used to throw a caught
+      exception again, but there's no caught exception outside of a `catch`
+      clause.
+
+      #### Example
+
+      The following code produces this diagnostic because the`rethrow` statement
+      is outside of a `catch` clause:
+
+      ```dart
+      void f() {
+        [!rethrow!];
+      }
+      ```
+
+      #### Common fixes
+
+      If you're trying to rethrow an exception, then wrap the `rethrow` statement
+      in a `catch` clause:
+
+      ```dart
+      void f() {
+        try {
+          // ...
+        } catch (exception) {
+          rethrow;
+        }
+      }
+      ```
+
+      If you're trying to throw a new exception, then replace the `rethrow`
+      statement with a `throw` expression:
+
+      ```dart
+      void f() {
+        throw UnsupportedError('Not yet implemented');
+      }
+      ```
+  RETURN_IN_GENERATIVE_CONSTRUCTOR:
+    template: "Constructors can't return values."
+    tip: Try removing the return statement or using a factory constructor.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generative constructor
+      contains a `return` statement that specifies a value to be returned.
+      Generative constructors always return the object that was created, and
+      therefore can't return a different object.
+
+      #### Example
+
+      The following code produces this diagnostic because the `return` statement
+      has an expression:
+
+      ```dart
+      class C {
+        C() {
+          return [!this!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the constructor should create a new instance, then remove either the
+      `return` statement or the expression:
+
+      ```dart
+      class C {
+        C();
+      }
+      ```
+
+      If the constructor shouldn't create a new instance, then convert it to be a
+      factory constructor:
+
+      ```dart
+      class C {
+        factory C() {
+          return _instance;
+        }
+
+        static C _instance = C._();
+
+        C._();
+      }
+      ```
+  RETURN_IN_GENERATOR:
+    template: "Can't return a value from a generator function that uses the 'async*' or 'sync*' modifier."
+    tip: "Try replacing 'return' with 'yield', using a block function body, or changing the method body modifier."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generator function (one whose
+      body is marked with either `async*` or `sync*`) uses either a `return`
+      statement to return a value or implicitly returns a value because of using
+      `=>`. In any of these cases, they should use `yield` instead of `return`.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `f` is a
+      generator and is using `return` to return a value:
+
+      ```dart
+      Iterable<int> f() sync* {
+        [!return 3!];
+      }
+      ```
+
+      The following code produces this diagnostic because the function `f` is a
+      generator and is implicitly returning a value:
+
+      ```dart
+      Stream<int> f() async* [!=>!] 3;
+      ```
+
+      #### Common fixes
+
+      If the function is using `=>` for the body of the function, then convert it
+      to a block function body, and use `yield` to return a value:
+
+      ```dart
+      Stream<int> f() async* {
+        yield 3;
+      }
+      ```
+
+      If the method is intended to be a generator, then use `yield` to return a
+      value:
+
+      ```dart
+      Iterable<int> f() sync* {
+        yield 3;
+      }
+      ```
+
+      If the method isn't intended to be a generator, then remove the modifier
+      from the body (or use `async` if you're returning a future):
+
+      ```dart
+      int f() {
+        return 3;
+      }
+      ```
+  RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR:
+    sharedName: RETURN_OF_INVALID_TYPE
+    template: "A value of type '{0}' can't be returned from the constructor '{2}' because it has a return type of '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type as declared in the return statement
+      1: the expected return type as defined by the enclosing class
+      2: the name of the constructor
+  RETURN_OF_INVALID_TYPE_FROM_FUNCTION:
+    sharedName: RETURN_OF_INVALID_TYPE
+    template: "A value of type '{0}' can't be returned from the function '{2}' because it has a return type of '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type as declared in the return statement
+      1: the expected return type as defined by the method
+      2: the name of the method
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function returns a
+      value whose type isn't assignable to the declared return type.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` has a return type
+      of `String` but is returning an `int`:
+
+      ```dart
+      String f() => [!3!];
+      ```
+
+      #### Common fixes
+
+      If the return type is correct, then replace the value being returned with a
+      value of the correct type, possibly by converting the existing value:
+
+      ```dart
+      String f() => 3.toString();
+      ```
+
+      If the value is correct, then change the return type to match:
+
+      ```dart
+      int f() => 3;
+      ```
+  RETURN_OF_INVALID_TYPE_FROM_METHOD:
+    sharedName: RETURN_OF_INVALID_TYPE
+    template: "A value of type '{0}' can't be returned from the method '{2}' because it has a return type of '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type as declared in the return statement
+      1: the expected return type as defined by the method
+      2: the name of the method
+  RETURN_OF_INVALID_TYPE_FROM_CLOSURE:
+    template: "The return type '{0}' isn't a '{1}', as required by the closure's context."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type as declared in the return statement
+      1: the expected return type as defined by the method
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the static type of a returned
+      expression isn't assignable to the return type that the closure is required
+      to have.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` is defined to be a
+      function that returns a `String`, but the closure assigned to it returns an
+      `int`:
+
+      ```dart
+      String Function(String) f = (s) => [!3!];
+      ```
+
+      #### Common fixes
+
+      If the return type is correct, then replace the returned value with a value
+      of the correct type, possibly by converting the existing value:
+
+      ```dart
+      String Function(String) f = (s) => 3.toString();
+      ```
+  RETURN_WITHOUT_VALUE:
+    template: "The return value is missing after 'return'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds a `return` statement
+      without an expression in a function that declares a return type.
+
+      #### Examples
+
+      The following code produces this diagnostic because the function `f` is
+      expected to return an `int`, but no value is being returned:
+
+      ```dart
+      int f() {
+        [!return!];
+      }
+      ```
+
+      #### Common fixes
+
+      Add an expression that computes the value to be returned:
+
+      ```dart
+      int f() {
+        return 0;
+      }
+      ```
+  SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
+    template: "The element type '{0}' can't be assigned to the set type '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the actual type of the set element
+      1: the expected type of the set element
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an element in a set literal has
+      a type that isn't assignable to the element type of the set.
+
+      #### Example
+
+      The following code produces this diagnostic because the type of the string
+      literal `'0'` is `String`, which isn't assignable to `int`, the element
+      type of the set:
+
+      ```dart
+      var s = <int>{[!'0'!]};
+      ```
+
+      #### Common fixes
+
+      If the element type of the set literal is wrong, then change the element
+      type of the set:
+
+      ```dart
+      var s = <String>{'0'};
+      ```
+
+      If the type of the element is wrong, then change the element:
+
+      ```dart
+      var s = <int>{'0'.length};
+      ```
+  SHARED_DEFERRED_PREFIX:
+    template: "The prefix of a deferred import can't be used in other import directives."
+    tip: Try renaming one of the prefixes.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a prefix in a deferred import is
+      also used as a prefix in other imports (whether deferred or not). The
+      prefix in a deferred import can't be shared with other imports because the
+      prefix is used to load the imported library.
+
+      #### Example
+
+      The following code produces this diagnostic because the prefix `x` is used
+      as the prefix for a deferred import and is also used for one other import:
+
+      ```dart
+      import 'dart:math' [!deferred!] as x;
+      import 'dart:convert' as x;
+
+      var y = x.json.encode(x.min(0, 1));
+      ```
+
+      #### Common fixes
+
+      If you can use a different name for the deferred import, then do so:
+
+      ```dart
+      import 'dart:math' deferred as math;
+      import 'dart:convert' as x;
+
+      var y = x.json.encode(math.min(0, 1));
+      ```
+
+      If you can use a different name for the other imports, then do so:
+
+      ```dart
+      import 'dart:math' deferred as x;
+      import 'dart:convert' as convert;
+
+      var y = convert.json.encode(x.min(0, 1));
+      ```
+  SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY:
+    template: "Constant values from a deferred library can't be spread into a const literal."
+    tip: Try making the deferred import non-deferred.
+  STATIC_ACCESS_TO_INSTANCE_MEMBER:
+    template: "Instance member '{0}' can't be accessed using static access."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the instance member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class name is used to access
+      an instance field. Instance fields don't exist on a class; they exist only
+      on an instance of the class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is an instance
+      field:
+
+      ```dart
+      %language=2.9
+      class C {
+        static int a;
+
+        int b;
+      }
+
+      int f() => C.[!b!];
+      ```
+
+      #### Common fixes
+
+      If you intend to access a static field, then change the name of the field
+      to an existing static field:
+
+      ```dart
+      %language=2.9
+      class C {
+        static int a;
+
+        int b;
+      }
+
+      int f() => C.a;
+      ```
+
+      If you intend to access the instance field, then use an instance of the
+      class to access the field:
+
+      ```dart
+      %language=2.9
+      class C {
+        static int a;
+
+        int b;
+      }
+
+      int f(C c) => c.b;
+      ```
+  IMPLEMENTS_DEFERRED_CLASS:
+    sharedName: SUBTYPE_OF_DEFERRED_CLASS
+    template: "Classes and mixins can't implement deferred classes."
+    tip: Try specifying a different interface, removing the class from the list, or changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: No parameters.
+  MIXIN_DEFERRED_CLASS:
+    sharedName: SUBTYPE_OF_DEFERRED_CLASS
+    template: "Classes can't mixin deferred classes."
+    tip: Try changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: No parameters.
+  EXTENDS_DEFERRED_CLASS:
+    sharedName: SUBTYPE_OF_DEFERRED_CLASS
+    template: "Classes can't extend deferred classes."
+    tip: Try specifying a different superclass, or removing the extends clause.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type (class or mixin) is a
+      subtype of a class from a library being imported using a deferred import.
+      The supertypes of a type must be compiled at the same time as the type, and
+      classes from deferred libraries aren't compiled until the library is
+      loaded.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines the class `A`:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {}
+      ```
+
+      The following code produces this diagnostic because the superclass of `B`
+      is declared in a deferred library:
+
+      ```dart
+      import 'a.dart' deferred as a;
+
+      class B extends [!a.A!] {}
+      ```
+
+      #### Common fixes
+
+      If you need to create a subtype of a type from the deferred library, then
+      remove the `deferred` keyword:
+
+      ```dart
+      import 'a.dart' as a;
+
+      class B extends a.A {}
+      ```
+  EXTENDS_DISALLOWED_CLASS:
+    sharedName: SUBTYPE_OF_DISALLOWED_TYPE
+    template: "Classes can't extend '{0}'."
+    tip: Try specifying a different superclass, or removing the extends clause.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the disallowed type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when one of the restricted classes is
+      used in either an `extends`, `implements`, `with`, or `on` clause. The
+      classes `bool`, `double`, `FutureOr`, `int`, `Null`, `num`, and `String`
+      are all restricted in this way, to allow for more efficient
+      implementations.
+
+      #### Example
+
+      The following code produces this diagnostic because `String` is used in an
+      `extends` clause:
+
+      ```dart
+      class A extends [!String!] {}
+      ```
+
+      The following code produces this diagnostic because `String` is used in an
+      `implements` clause:
+
+      ```dart
+      class B implements [!String!] {}
+      ```
+
+      The following code produces this diagnostic because `String` is used in a
+      `with` clause:
+
+      ```dart
+      class C with [!String!] {}
+      ```
+
+      The following code produces this diagnostic because `String` is used in an
+      `on` clause:
+
+      ```dart
+      mixin M on [!String!] {}
+      ```
+
+      #### Common fixes
+
+      If a different type should be specified, then replace the type:
+
+      ```dart
+      class A extends Object {}
+      ```
+
+      If there isn't a different type that would be appropriate, then remove the
+      type, and possibly the whole clause:
+
+      ```dart
+      class B {}
+      ```
+  MIXIN_OF_DISALLOWED_CLASS:
+    sharedName: SUBTYPE_OF_DISALLOWED_TYPE
+    template: "Classes can't mixin '{0}'."
+    tip: Try specifying a different class or mixin, or remove the class or mixin from the list.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the disallowed type
+  MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS:
+    sharedName: SUBTYPE_OF_DISALLOWED_TYPE
+    template: "''{0}' can't be used as a superclass constraint."
+    tip: "Try specifying a different super-class constraint, or remove the 'on' clause."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the disallowed type
+  IMPLEMENTS_DISALLOWED_CLASS:
+    sharedName: SUBTYPE_OF_DISALLOWED_TYPE
+    template: "Classes and mixins can't implement '{0}'."
+    tip: Try specifying a different interface, or remove the class from the list.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the disallowed type
+  EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
+    template: "A type alias that expands to a type parameter can't be used as a superclass."
+    tip: Try specifying a different superclass, or removing the extends clause.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type alias that expands to a
+      type parameter is used in an `extends`, `implements`, `with`, or `on`
+      clause.
+
+      #### Example
+
+      The following code produces this diagnostic because the type alias `T`,
+      which expands to the type parameter `S`, is used in the `extends` clause of
+      the class `C`:
+
+      ```dart
+      typedef T<S> = S;
+
+      class C extends [!T!]<Object> {}
+      ```
+
+      #### Common fixes
+
+      Use the value of the type argument directly:
+
+      ```dart
+      typedef T<S> = S;
+
+      class C extends Object {}
+      ```
+  MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
+    template: "A type alias that expands to a type parameter can't be used as a superclass constraint."
+    hasPublishedDocs: true
+    comment: No parameters.
+  MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
+    template: "A type alias that expands to a type parameter can't be mixed in."
+    hasPublishedDocs: true
+    comment: No parameters.
+  IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
+    template: "A type alias that expands to a type parameter can't be implemented."
+    tip: Try specifying a class or mixin, or removing the list.
+    hasPublishedDocs: true
+    comment: No parameters.
+  SUPER_INITIALIZER_IN_OBJECT:
+    template: "The class 'Object' can't invoke a constructor from a superclass."
+    comment: |-
+      7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It
+      is a compile-time error if a generative constructor of class Object
+      includes a superinitializer.
+  SUPER_IN_EXTENSION:
+    template: "The 'super' keyword can't be used in an extension because an extension doesn't have a superclass."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member declared inside an
+      extension uses the `super` keyword . Extensions aren't classes and don't
+      have superclasses, so the `super` keyword serves no purpose.
+
+      #### Examples
+
+      The following code produces this diagnostic because `super` can't be used
+      in an extension:
+
+      ```dart
+      extension E on Object {
+        String get displayString => [!super!].toString();
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the `super` keyword :
+
+      ```dart
+      extension E on Object {
+        String get displayString => toString();
+      }
+      ```
+  SUPER_IN_INVALID_CONTEXT:
+    template: "Invalid context for 'super' invocation."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the keyword `super` is used
+      outside of a instance method.
+
+      #### Examples
+
+      The following code produces this diagnostic because `super` is used in a
+      top-level function:
+
+      ```dart
+      void f() {
+        [!super!].f();
+      }
+      ```
+
+      #### Common fixes
+
+      Rewrite the code to not use `super`.
+  SUPER_IN_REDIRECTING_CONSTRUCTOR:
+    template: "The redirecting constructor can't have a 'super' initializer."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor that redirects to
+      another constructor also attempts to invoke a constructor from the
+      superclass. The superclass constructor will be invoked when the constructor
+      that the redirecting constructor is redirected to is invoked.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor `C.a`
+      both redirects to `C.b` and invokes a constructor from the superclass:
+
+      ```dart
+      class C {
+        C.a() : this.b(), [!super()!];
+        C.b();
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the invocation of the `super` constructor:
+
+      ```dart
+      class C {
+        C.a() : this.b();
+        C.b();
+      }
+      ```
+  SWITCH_CASE_COMPLETES_NORMALLY:
+    template: "The 'case' should not complete normally."
+    tip: "Try adding 'break', or 'return', etc."
+    comment: |-
+      It is an error if any case of a switch statement except the last case (the
+      default case if present) may complete normally. The previous syntactic
+      restriction requiring the last statement of each case to be one of an
+      enumerated list of statements (break, continue, return, throw, or rethrow)
+      is removed.
+  SWITCH_EXPRESSION_NOT_ASSIGNABLE:
+    template: "Type '{0}' of the switch expression isn't assignable to the type '{1}' of case expressions."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the static type of the switch expression
+      1: the static type of the case expressions
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of the expression in a
+      `switch` statement isn't assignable to the type of the expressions in the
+      `case` clauses.
+
+      #### Example
+
+      The following code produces this diagnostic because the type of `s`
+      (`String`) isn't assignable to the type of `0` (`int`):
+
+      ```dart
+      %language=2.9
+      void f(String s) {
+        switch ([!s!]) {
+          case 0:
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the type of the `case` expressions is correct, then change the
+      expression in the `switch` statement to have the correct type:
+
+      ```dart
+      %language=2.9
+      void f(String s) {
+        switch (int.parse(s)) {
+          case 0:
+            break;
+        }
+      }
+      ```
+
+      If the type of the `switch` expression is correct, then change the `case`
+      expressions to have the correct type:
+
+      ```dart
+      %language=2.9
+      void f(String s) {
+        switch (s) {
+          case '0':
+            break;
+        }
+      }
+      ```
+  TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
+    template: "A generative constructor of an abstract class can't be torn off."
+    tip: Try tearing off a constructor of a concrete class, or a non-generative constructor.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a generative constructor from an
+      abstract class is being torn off. This isn't allowed because it isn't valid
+      to create an instance of an abstract class, which means that there isn't
+      any valid use for the torn off constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the constructor `C.new`
+      is being torn off and the class `C` is an abstract class:
+
+      ```dart
+      abstract class C {
+        C();
+      }
+
+      void f() {
+        [!C.new!];
+      }
+      ```
+
+      #### Common fixes
+
+      Tear off the constructor of a concrete class.
+  THROW_OF_INVALID_TYPE:
+    template: "The type '{0}' of the thrown expression must be assignable to 'Object'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type that can't be thrown
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of the expression in a
+      throw expression isn't assignable to `Object`. It isn't valid to throw
+      `null`, so it isn't valid to use an expression that might evaluate to
+      `null`.
+
+      #### Example
+
+      The following code produces this diagnostic because `s` might be `null`:
+
+      ```dart
+      void f(String? s) {
+        throw [!s!];
+      }
+      ```
+
+      #### Common fixes
+
+      Add an explicit null check to the expression:
+
+      ```dart
+      void f(String? s) {
+        throw s!;
+      }
+      ```
+  TOP_LEVEL_CYCLE:
+    template: "The type of '{0}' can't be inferred because it depends on itself through the cycle: {1}."
+    tip: Try adding an explicit type to one or more of the variables in the cycle in order to break the cycle.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the element whose type could not be inferred.
+      1: The [TopLevelInferenceError]'s arguments that led to the cycle.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a top-level variable has no type
+      annotation and the variable's initializer refers to the variable, either
+      directly or indirectly.
+
+      #### Example
+
+      The following code produces this diagnostic because the variables `x` and
+      `y` are defined in terms of each other, and neither has an explicit type,
+      so the type of the other can't be inferred:
+
+      ```dart
+      var x = y;
+      var y = [!x!];
+      ```
+
+      #### Common fixes
+
+      If the two variables don't need to refer to each other, then break the
+      cycle:
+
+      ```dart
+      var x = 0;
+      var y = x;
+      ```
+
+      If the two variables need to refer to each other, then give at least one of
+      them an explicit type:
+
+      ```dart
+      int x = y;
+      var y = x;
+      ```
+
+      Note, however, that while this code doesn't produce any diagnostics, it
+      will produce a stack overflow at runtime unless at least one of the
+      variables is assigned a value that doesn't depend on the other variables
+      before any of the variables in the cycle are referenced.
+  TYPE_ALIAS_CANNOT_REFERENCE_ITSELF:
+    template: "Typedefs can't reference themselves directly or recursively via another typedef."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a typedef refers to itself,
+      either directly or indirectly.
+
+      #### Example
+
+      The following code produces this diagnostic because `F` depends on itself
+      indirectly through `G`:
+
+      ```dart
+      typedef [!F!] = void Function(G);
+      typedef G = void Function(F);
+      ```
+
+      #### Common fixes
+
+      Change one or more of the typedefs in the cycle so that none of them refer
+      to themselves:
+
+      ```dart
+      typedef F = void Function(G);
+      typedef G = void Function(int);
+      ```
+  TYPE_ANNOTATION_DEFERRED_CLASS:
+    template: "The deferred type '{0}' can't be used in a declaration, cast, or type test."
+    tip: Try using a different type, or changing the import to not be deferred.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type that is deferred and being used in a type
+         annotation
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type annotation is in a
+      variable declaration, or the type used in a cast (`as`) or type test (`is`)
+      is a type declared in a library that is imported using a deferred import.
+      These types are required to be available at compile time, but aren't.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      The following code produces this diagnostic because the type of the
+      parameter `f` is imported from a deferred library:
+
+      ```dart
+      import 'dart:io' deferred as io;
+
+      void f([!io.File!] f) {}
+      ```
+
+      #### Common fixes
+
+      If you need to reference the imported type, then remove the `deferred`
+      keyword:
+
+      ```dart
+      import 'dart:io' as io;
+
+      void f(io.File f) {}
+      ```
+
+      If the import is required to be deferred and there's another type that is
+      appropriate, then use that type in place of the type from the deferred
+      library.
+  TYPE_ARGUMENT_NOT_MATCHING_BOUNDS:
+    template: "'{0}' doesn't conform to the bound '{2}' of the type parameter '{1}'."
+    tip: "Try using a type that is or is a subclass of '{2}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type used in the instance creation that should be
+         limited by the bound as specified in the class declaration
+      1: the name of the type parameter
+      2: the substituted bound of the type parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type argument isn't the same
+      as or a subclass of the bounds of the corresponding type parameter.
+
+      #### Examples
+
+      The following code produces this diagnostic because `String` isn't a
+      subclass of `num`:
+
+      ```dart
+      class A<E extends num> {}
+
+      var a = A<[!String!]>();
+      ```
+
+      #### Common fixes
+
+      Change the type argument to be a subclass of the bounds:
+
+      ```dart
+      class A<E extends num> {}
+
+      var a = A<int>();
+      ```
+  TYPE_PARAMETER_REFERENCED_BY_STATIC:
+    template: "Static members can't reference type parameters of the class."
+    tip: Try removing the reference to the type parameter, or making the member an instance member.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a static member references a
+      type parameter that is declared for the class. Type parameters only have
+      meaning for instances of the class.
+
+      #### Example
+
+      The following code produces this diagnostic because the static method
+      `hasType` has a reference to the type parameter `T`:
+
+      ```dart
+      class C<T> {
+        static bool hasType(Object o) => o is [!T!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the member can be an instance member, then remove the keyword `static`:
+
+      ```dart
+      class C<T> {
+        bool hasType(Object o) => o is T;
+      }
+      ```
+
+      If the member must be a static member, then make the member be generic:
+
+      ```dart
+      class C<T> {
+        static bool hasType<S>(Object o) => o is S;
+      }
+      ```
+
+      Note, however, that there isn’t a relationship between `T` and `S`, so this
+      second option changes the semantics from what was likely to be intended.
+  TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND:
+    template: "'{0}' can't be a supertype of its upper bound."
+    tip: "Try using a type that is the same as or a subclass of '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type parameter
+      1: the name of the bounding type
+
+      See [CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS].
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the bound of a type parameter
+      (the type following the `extends` keyword) is either directly or indirectly
+      the type parameter itself. Stating that the type parameter must be the same
+      as itself or a subtype of itself or a subtype of itself isn't helpful
+      because it will always be the same as itself.
+
+      #### Example
+
+      The following code produces this diagnostic because the bound of `T` is
+      `T`:
+
+      ```dart
+      class C<[!T!] extends T> {}
+      ```
+
+      The following code produces this diagnostic because the bound of `T1` is
+      `T2`, and the bound of `T2` is `T1`, effectively making the bound of `T1`
+      be `T1`:
+
+      ```dart
+      class C<[!T1!] extends T2, T2 extends T1> {}
+      ```
+
+      #### Common fixes
+
+      If the type parameter needs to be a subclass of some type, then replace the
+      bound with the required type:
+
+      ```dart
+      class C<T extends num> {}
+      ```
+
+      If the type parameter can be any type, then remove the `extends` clause:
+
+      ```dart
+      class C<T> {}
+      ```
+  TYPE_TEST_WITH_NON_TYPE:
+    template: "The name '{0}' isn't a type and can't be used in an 'is' expression."
+    tip: Try correcting the name to match an existing type.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the right-hand side of an `is`
+      or `is!` test isn't a type.
+
+      #### Example
+
+      The following code produces this diagnostic because the right-hand side is
+      a parameter, not a type:
+
+      ```dart
+      typedef B = int Function(int);
+
+      void f(Object a, B b) {
+        if (a is [!b!]) {
+          return;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If you intended to use a type test, then replace the right-hand side with a
+      type:
+
+      ```dart
+      typedef B = int Function(int);
+
+      void f(Object a, B b) {
+        if (a is B) {
+          return;
+        }
+      }
+      ```
+
+      If you intended to use a different kind of test, then change the test:
+
+      ```dart
+      typedef B = int Function(int);
+
+      void f(Object a, B b) {
+        if (a == b) {
+          return;
+        }
+      }
+      ```
+  TYPE_TEST_WITH_UNDEFINED_NAME:
+    template: "The name '{0}' isn't defined, so it can't be used in an 'is' expression."
+    tip: "Try changing the name to the name of an existing type, or creating a type with the name '{0}'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name following the `is` in a
+      type test expression isn't defined.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `Srting` isn't
+      defined:
+
+      ```dart
+      void f(Object o) {
+        if (o is [!Srting!]) {
+          // ...
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the name with the name of a type:
+
+      ```dart
+      void f(Object o) {
+        if (o is String) {
+          // ...
+        }
+      }
+      ```
+  UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "A nullable expression can't be used in a spread."
+    tip: "Try checking that the value isn't 'null' before using it in a spread, or use a null-aware spread."
+    hasPublishedDocs: true
+  UNCHECKED_INVOCATION_OF_NULLABLE_VALUE:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "The function can't be unconditionally invoked because it can be 'null'."
+    tip: "Try adding a null check ('!')."
+    hasPublishedDocs: true
+  UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "The method '{0}' can't be unconditionally invoked because the receiver can be 'null'."
+    tip: "Try making the call conditional (using '?.') or adding a null check to the target ('!')."
+    hasPublishedDocs: true
+  UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "The operator '{0}' can't be unconditionally invoked because the receiver can be 'null'."
+    tip: "Try adding a null check to the target ('!')."
+    hasPublishedDocs: true
+  UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "A nullable expression can't be used in a yield-each statement."
+    tip: "Try checking that the value isn't 'null' before using it in a yield-each statement."
+    hasPublishedDocs: true
+  UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "A nullable expression can't be used as a condition."
+    tip: "Try checking that the value isn't 'null' before using it as a condition."
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an expression whose type is
+      [potentially non-nullable][] is dereferenced without first verifying that
+      the value isn't `null`.
+
+      #### Example
+
+      The following code produces this diagnostic because `s` can be `null` at
+      the point where it's referenced:
+
+      ```dart
+      void f(String? s) {
+        if (s.[!length!] > 3) {
+          // ...
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the value really can be `null`, then add a test to ensure that members
+      are only accessed when the value isn't `null`:
+
+      ```dart
+      void f(String? s) {
+        if (s != null && s.length > 3) {
+          // ...
+        }
+      }
+      ```
+
+      If the expression is a variable and the value should never be `null`, then
+      change the type of the variable to be non-nullable:
+
+      ```dart
+      void f(String s) {
+        if (s.length > 3) {
+          // ...
+        }
+      }
+      ```
+
+      If you believe that the value of the expression should never be `null`, but
+      you can't change the type of the variable, and you're willing to risk
+      having an exception thrown at runtime if you're wrong, then you can assert
+      that the value isn't null:
+
+      ```dart
+      void f(String? s) {
+        if (s!.length > 3) {
+          // ...
+        }
+      }
+      ```
+  UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "A nullable expression can't be used as an iterator in a for-in loop."
+    tip: "Try checking that the value isn't 'null' before using it as an iterator."
+    hasPublishedDocs: true
+  UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE:
+    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
+    template: "The property '{0}' can't be unconditionally accessed because the receiver can be 'null'."
+    tip: "Try making the access conditional (using '?.') or adding a null check to the target ('!')."
+    hasPublishedDocs: true
+  UNDEFINED_ANNOTATION:
+    template: "Undefined name '{0}' used as an annotation."
+    tip: Try defining the name or importing it from another library.
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name that isn't defined is
+      used as an annotation.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `undefined`
+      isn't defined:
+
+      ```dart
+      [!@undefined!]
+      void f() {}
+      ```
+
+      #### Common fixes
+
+      If the name is correct, but it isn’t declared yet, then declare the name as
+      a constant value:
+
+      ```dart
+      const undefined = 'undefined';
+
+      @undefined
+      void f() {}
+      ```
+
+      If the name is wrong, replace the name with the name of a valid constant:
+
+      ```dart
+      @deprecated
+      void f() {}
+      ```
+
+      Otherwise, remove the annotation.
+  UNDEFINED_CLASS:
+    template: "Undefined class '{0}'."
+    tip: "Try changing the name to the name of an existing class, or creating a class with the name '{0}'."
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the undefined class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of a class but either isn't defined or isn't visible
+      in the scope in which it's being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because `Piont` isn't defined:
+
+      ```dart
+      class Point {}
+
+      void f([!Piont!] p) {}
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      the name of a class that is defined. The example above can be corrected by
+      fixing the spelling of the class:
+
+      ```dart
+      class Point {}
+
+      void f(Point p) {}
+      ```
+
+      If the class is defined but isn't visible, then you probably need to add an
+      import.
+  UNDEFINED_CLASS_BOOLEAN:
+    sharedName: UNDEFINED_CLASS
+    template: "Undefined class '{0}'."
+    tip: "Try using the type 'bool'."
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Same as [CompileTimeErrorCode.UNDEFINED_CLASS], but to catch using
+      "boolean" instead of "bool" in order to improve the correction message.
+
+      Parameters:
+      0: the name of the undefined class
+  UNDEFINED_CONSTRUCTOR_IN_INITIALIZER:
+    template: "The class '{0}' doesn't have a constructor named '{1}'."
+    tip: "Try defining a constructor named '{1}' in '{0}', or invoking a different constructor."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the superclass that does not define the invoked constructor
+      1: the name of the constructor being invoked
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a superclass constructor is
+      invoked in the initializer list of a constructor, but the superclass
+      doesn't define the constructor being invoked.
+
+      #### Examples
+
+      The following code produces this diagnostic because `A` doesn't have an
+      unnamed constructor:
+
+      ```dart
+      class A {
+        A.n();
+      }
+      class B extends A {
+        B() : [!super()!];
+      }
+      ```
+
+      The following code produces this diagnostic because `A` doesn't have a
+      constructor named `m`:
+
+      ```dart
+      class A {
+        A.n();
+      }
+      class B extends A {
+        B() : [!super.m()!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the superclass defines a constructor that should be invoked, then change
+      the constructor being invoked:
+
+      ```dart
+      class A {
+        A.n();
+      }
+      class B extends A {
+        B() : super.n();
+      }
+      ```
+
+      If the superclass doesn't define an appropriate constructor, then define
+      the constructor being invoked:
+
+      ```dart
+      class A {
+        A.m();
+        A.n();
+      }
+      class B extends A {
+        B() : super.m();
+      }
+      ```
+  UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT:
+    sharedName: UNDEFINED_CONSTRUCTOR_IN_INITIALIZER
+    template: "The class '{0}' doesn't have an unnamed constructor."
+    tip: "Try defining an unnamed constructor in '{0}', or invoking a different constructor."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the superclass that does not define the invoked constructor
+  UNDEFINED_ENUM_CONSTANT:
+    template: "There's no constant named '{0}' in '{1}'."
+    tip: "Try correcting the name to the name of an existing constant, or defining a constant named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the enumeration constant that is not defined
+      1: the name of the enumeration used to access the constant
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of an enum constant, and the name either isn't
+      defined or isn't visible in the scope in which it's being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because `E` doesn't define a
+      constant named `c`:
+
+      ```dart
+      enum E {a, b}
+
+      var e = E.[!c!];
+      ```
+
+      #### Common fixes
+
+      If the constant should be defined, then add it to the declaration of the
+      enum:
+
+      ```dart
+      enum E {a, b, c}
+
+      var e = E.c;
+      ```
+
+      If the constant shouldn't be defined, then change the name to the name of
+      an existing constant:
+
+      ```dart
+      enum E {a, b}
+
+      var e = E.b;
+      ```
+  UNDEFINED_EXTENSION_GETTER:
+    template: "The getter '{0}' isn't defined for the extension '{1}'."
+    tip: "Try correcting the name to the name of an existing getter, or defining a getter named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the getter that is undefined
+      1: the name of the extension that was explicitly specified
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is used to
+      invoke a getter, but the getter isn't defined by the specified extension.
+      The analyzer also produces this diagnostic when a static getter is
+      referenced but isn't defined by the specified extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare an instance getter named `b`:
+
+      ```dart
+      extension E on String {
+        String get a => 'a';
+      }
+
+      extension F on String {
+        String get b => 'b';
+      }
+
+      void f() {
+        E('c').[!b!];
+      }
+      ```
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare a static getter named `a`:
+
+      ```dart
+      extension E on String {}
+
+      var x = E.[!a!];
+      ```
+
+      #### Common fixes
+
+      If the name of the getter is incorrect, then change it to the name of an
+      existing getter:
+
+      ```dart
+      extension E on String {
+        String get a => 'a';
+      }
+
+      extension F on String {
+        String get b => 'b';
+      }
+
+      void f() {
+        E('c').a;
+      }
+      ```
+
+      If the name of the getter is correct but the name of the extension is
+      wrong, then change the name of the extension to the correct name:
+
+      ```dart
+      extension E on String {
+        String get a => 'a';
+      }
+
+      extension F on String {
+        String get b => 'b';
+      }
+
+      void f() {
+        F('c').b;
+      }
+      ```
+
+      If the name of the getter and extension are both correct, but the getter
+      isn't defined, then define the getter:
+
+      ```dart
+      extension E on String {
+        String get a => 'a';
+        String get b => 'z';
+      }
+
+      extension F on String {
+        String get b => 'b';
+      }
+
+      void f() {
+        E('c').b;
+      }
+      ```
+  UNDEFINED_EXTENSION_METHOD:
+    template: "The method '{0}' isn't defined for the extension '{1}'."
+    tip: "Try correcting the name to the name of an existing method, or defining a method named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method that is undefined
+      1: the name of the extension that was explicitly specified
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is used to
+      invoke a method, but the method isn't defined by the specified extension.
+      The analyzer also produces this diagnostic when a static method is
+      referenced but isn't defined by the specified extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare an instance method named `b`:
+
+      ```dart
+      extension E on String {
+        String a() => 'a';
+      }
+
+      extension F on String {
+        String b() => 'b';
+      }
+
+      void f() {
+        E('c').[!b!]();
+      }
+      ```
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare a static method named `a`:
+
+      ```dart
+      extension E on String {}
+
+      var x = E.[!a!]();
+      ```
+
+      #### Common fixes
+
+      If the name of the method is incorrect, then change it to the name of an
+      existing method:
+
+      ```dart
+      extension E on String {
+        String a() => 'a';
+      }
+
+      extension F on String {
+        String b() => 'b';
+      }
+
+      void f() {
+        E('c').a();
+      }
+      ```
+
+      If the name of the method is correct, but the name of the extension is
+      wrong, then change the name of the extension to the correct name:
+
+      ```dart
+      extension E on String {
+        String a() => 'a';
+      }
+
+      extension F on String {
+        String b() => 'b';
+      }
+
+      void f() {
+        F('c').b();
+      }
+      ```
+
+      If the name of the method and extension are both correct, but the method
+      isn't defined, then define the method:
+
+      ```dart
+      extension E on String {
+        String a() => 'a';
+        String b() => 'z';
+      }
+
+      extension F on String {
+        String b() => 'b';
+      }
+
+      void f() {
+        E('c').b();
+      }
+      ```
+  UNDEFINED_EXTENSION_OPERATOR:
+    template: "The operator '{0}' isn't defined for the extension '{1}'."
+    tip: "Try defining the operator '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the operator that is undefined
+      1: the name of the extension that was explicitly specified
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an operator is invoked on a
+      specific extension when that extension doesn't implement the operator.
+
+      #### Example
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't define the operator `*`:
+
+      ```dart
+      var x = E('') [!*!] 4;
+
+      extension E on String {}
+      ```
+
+      #### Common fixes
+
+      If the extension is expected to implement the operator, then add an
+      implementation of the operator to the extension:
+
+      ```dart
+      var x = E('') * 4;
+
+      extension E on String {
+        int operator *(int multiplier) => length * multiplier;
+      }
+      ```
+
+      If the operator is defined by a different extension, then change the name
+      of the extension to the name of the one that defines the operator.
+
+      If the operator is defined on the argument of the extension override, then
+      remove the extension override:
+
+      ```dart
+      var x = '' * 4;
+
+      extension E on String {}
+      ```
+  UNDEFINED_EXTENSION_SETTER:
+    template: "The setter '{0}' isn't defined for the extension '{1}'."
+    tip: "Try correcting the name to the name of an existing setter, or defining a setter named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the setter that is undefined
+      1: the name of the extension that was explicitly specified
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension override is used to
+      invoke a setter, but the setter isn't defined by the specified extension.
+      The analyzer also produces this diagnostic when a static setter is
+      referenced but isn't defined by the specified extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare an instance setter named `b`:
+
+      ```dart
+      extension E on String {
+        set a(String v) {}
+      }
+
+      extension F on String {
+        set b(String v) {}
+      }
+
+      void f() {
+        E('c').[!b!] = 'd';
+      }
+      ```
+
+      The following code produces this diagnostic because the extension `E`
+      doesn't declare a static setter named `a`:
+
+      ```dart
+      extension E on String {}
+
+      void f() {
+        E.[!a!] = 3;
+      }
+      ```
+
+      #### Common fixes
+
+      If the name of the setter is incorrect, then change it to the name of an
+      existing setter:
+
+      ```dart
+      extension E on String {
+        set a(String v) {}
+      }
+
+      extension F on String {
+        set b(String v) {}
+      }
+
+      void f() {
+        E('c').a = 'd';
+      }
+      ```
+
+      If the name of the setter is correct, but the name of the extension is
+      wrong, then change the name of the extension to the correct name:
+
+      ```dart
+      extension E on String {
+        set a(String v) {}
+      }
+
+      extension F on String {
+        set b(String v) {}
+      }
+
+      void f() {
+        F('c').b = 'd';
+      }
+      ```
+
+      If the name of the setter and extension are both correct, but the setter
+      isn't defined, then define the setter:
+
+      ```dart
+      extension E on String {
+        set a(String v) {}
+        set b(String v) {}
+      }
+
+      extension F on String {
+        set b(String v) {}
+      }
+
+      void f() {
+        E('c').b = 'd';
+      }
+      ```
+  UNDEFINED_FUNCTION:
+    template: "The function '{0}' isn't defined."
+    tip: "Try importing the library that defines '{0}', correcting the name to the name of an existing function, or defining a function named '{0}'."
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method that is undefined
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of a function but either isn't defined or isn't
+      visible in the scope in which it's being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `emty` isn't
+      defined:
+
+      ```dart
+      List<int> empty() => [];
+
+      void main() {
+        print([!emty!]());
+      }
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      the name of a function that is defined. The example above can be corrected
+      by fixing the spelling of the function:
+
+      ```dart
+      List<int> empty() => [];
+
+      void main() {
+        print(empty());
+      }
+      ```
+
+      If the function is defined but isn't visible, then you probably need to add
+      an import or re-arrange your code to make the function visible.
+  UNDEFINED_GETTER:
+    template: "The getter '{0}' isn't defined for the type '{1}'."
+    tip: "Try importing the library that defines '{0}', correcting the name to the name of an existing getter, or defining a getter or field named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the getter
+      1: the name of the enclosing type where the getter is being looked for
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of a getter but either isn't defined or isn't
+      visible in the scope in which it's being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because `String` has no member
+      named `len`:
+
+      ```dart
+      int f(String s) => s.[!len!];
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      the name of a getter that is defined. The example above can be corrected by
+      fixing the spelling of the getter:
+
+      ```dart
+      int f(String s) => s.length;
+      ```
+  UNDEFINED_GETTER_ON_FUNCTION_TYPE:
+    sharedName: UNDEFINED_GETTER
+    template: "The getter '{0}' isn't defined for the '{1}' function type."
+    tip: "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension getter on 'Type'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the getter
+      1: the name of the function type alias
+  UNDEFINED_IDENTIFIER:
+    template: "Undefined name '{0}'."
+    tip: Try correcting the name to one that is defined, or defining the name.
+    isUnresolvedIdentifier: true
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the identifier
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      either isn't defined or isn't visible in the scope in which it's being
+      referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because the name `rihgt` isn't
+      defined:
+
+      ```dart
+      int min(int left, int right) => left <= [!rihgt!] ? left : right;
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      an identifier that is defined. The example above can be corrected by
+      fixing the spelling of the variable:
+
+      ```dart
+      int min(int left, int right) => left <= right ? left : right;
+      ```
+
+      If the identifier is defined but isn't visible, then you probably need to
+      add an import or re-arrange your code to make the identifier visible.
+  UNDEFINED_IDENTIFIER_AWAIT:
+    template: "Undefined name 'await' in function body not marked with 'async'."
+    tip: "Try correcting the name to one that is defined, defining the name, or adding 'async' to the enclosing function body."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the name `await` is used in a
+      method or function body without being declared, and the body isn't marked
+      with the `async` keyword. The name `await` only introduces an await
+      expression in an asynchronous function.
+
+      #### Example
+
+      The following code produces this diagnostic because the name `await` is
+      used in the body of `f` even though the body of `f` isn't marked with the
+      `async` keyword:
+
+      ```dart
+      void f(p) { [!await!] p; }
+      ```
+
+      #### Common fixes
+
+      Add the keyword `async` to the function body:
+
+      ```dart
+      void f(p) async { await p; }
+      ```
+  UNDEFINED_METHOD:
+    template: "The method '{0}' isn't defined for the type '{1}'."
+    tip: "Try correcting the name to the name of an existing method, or defining a method named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method that is undefined
+      1: the resolved type name that the method lookup is happening on
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of a method but either isn't defined or isn't
+      visible in the scope in which it's being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because the identifier
+      `removeMiddle` isn't defined:
+
+      ```dart
+      int f(List<int> l) => l.[!removeMiddle!]();
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      the name of a method that is defined. The example above can be corrected by
+      fixing the spelling of the method:
+
+      ```dart
+      int f(List<int> l) => l.removeLast();
+      ```
+  UNDEFINED_METHOD_ON_FUNCTION_TYPE:
+    sharedName: UNDEFINED_METHOD
+    template: "The method '{0}' isn't defined for the '{1}' function type."
+    tip: "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension method on 'Type'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method
+      1: the name of the function type alias
+  UNDEFINED_NAMED_PARAMETER:
+    template: "The named parameter '{0}' isn't defined."
+    tip: "Try correcting the name to an existing named parameter's name, or defining a named parameter with the name '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the requested named parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function invocation
+      has a named argument, but the method or function being invoked doesn't
+      define a parameter with the same name.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` doesn't declare a
+      named parameter named `a`:
+
+      ```dart
+      %language=2.9
+      class C {
+        m({int b}) {}
+      }
+
+      void f(C c) {
+        c.m([!a!]: 1);
+      }
+      ```
+
+      #### Common fixes
+
+      If the argument name is mistyped, then replace it with the correct name.
+      The example above can be fixed by changing `a` to `b`:
+
+      ```dart
+      %language=2.9
+      class C {
+        m({int b}) {}
+      }
+
+      void f(C c) {
+        c.m(b: 1);
+      }
+      ```
+
+      If a subclass adds a parameter with the name in question, then cast the
+      receiver to the subclass:
+
+      ```dart
+      %language=2.9
+      class C {
+        m({int b}) {}
+      }
+
+      class D extends C {
+        m({int a, int b}) {}
+      }
+
+      void f(C c) {
+        (c as D).m(a: 1);
+      }
+      ```
+
+      If the parameter should be added to the function, then add it:
+
+      ```dart
+      %language=2.9
+      class C {
+        m({int a, int b}) {}
+      }
+
+      void f(C c) {
+        c.m(a: 1);
+      }
+      ```
+  UNDEFINED_OPERATOR:
+    template: "The operator '{0}' isn't defined for the type '{1}'."
+    tip: "Try defining the operator '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the operator
+      1: the name of the enclosing type where the operator is being looked for
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a user-definable operator is
+      invoked on an object for which the operator isn't defined.
+
+      #### Examples
+
+      The following code produces this diagnostic because the class `C` doesn't
+      define the operator `+`:
+
+      ```dart
+      class C {}
+
+      C f(C c) => c [!+!] 2;
+      ```
+
+      #### Common fixes
+
+      If the operator should be defined for the class, then define it:
+
+      ```dart
+      class C {
+        C operator +(int i) => this;
+      }
+
+      C f(C c) => c + 2;
+      ```
+  UNDEFINED_PREFIXED_NAME:
+    template: "The name '{0}' is being referenced through the prefix '{1}', but it isn't defined in any of the libraries imported using that prefix."
+    tip: "Try correcting the prefix or importing the library that defines '{0}'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a prefixed identifier is found
+      where the prefix is valid, but the identifier isn't declared in any of the
+      libraries imported using that prefix.
+
+      #### Examples
+
+      The following code produces this diagnostic because `dart:core` doesn't
+      define anything named `a`:
+
+      ```dart
+      import 'dart:core' as p;
+
+      void f() {
+        p.[!a!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the library in which the name is declared isn't imported yet, add an
+      import for the library.
+
+      If the name is wrong, then change it to one of the names that's declared in
+      the imported libraries.
+  UNDEFINED_SETTER:
+    template: "The setter '{0}' isn't defined for the type '{1}'."
+    tip: "Try importing the library that defines '{0}', correcting the name to the name of an existing setter, or defining a setter or field named '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the setter
+      1: the name of the enclosing type where the setter is being looked for
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it encounters an identifier that
+      appears to be the name of a setter but either isn't defined or isn't
+      visible in the scope in which the identifier is being referenced.
+
+      #### Examples
+
+      The following code produces this diagnostic because there isn't a setter
+      named `z`:
+
+      ```dart
+      class C {
+        int x = 0;
+        void m(int y) {
+          this.[!z!] = y;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the identifier isn't defined, then either define it or replace it with
+      the name of a setter that is defined. The example above can be corrected by
+      fixing the spelling of the setter:
+
+      ```dart
+      class C {
+        int x = 0;
+        void m(int y) {
+          this.x = y;
+        }
+      }
+      ```
+  UNDEFINED_SETTER_ON_FUNCTION_TYPE:
+    sharedName: UNDEFINED_SETTER
+    template: "The setter '{0}' isn't defined for the '{1}' function type."
+    tip: "Try wrapping the function type alias in parentheses in order to access '{0}' as an extension getter on 'Type'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the setter
+      1: the name of the function type alias
+  UNDEFINED_SUPER_GETTER:
+    sharedName: UNDEFINED_SUPER_MEMBER
+    template: "The getter '{0}' isn't defined in a superclass of '{1}'."
+    tip: "Try correcting the name to the name of an existing getter, or defining a getter or field named '{0}' in a superclass."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the getter
+      1: the name of the enclosing type where the getter is being looked for
+  UNDEFINED_SUPER_METHOD:
+    sharedName: UNDEFINED_SUPER_MEMBER
+    template: "The method '{0}' isn't defined in a superclass of '{1}'."
+    tip: "Try correcting the name to the name of an existing method, or defining a method named '{0}' in a superclass."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method that is undefined
+      1: the resolved type name that the method lookup is happening on
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an inherited member (method,
+      getter, setter, or operator) is referenced using `super`, but there’s no
+      member with that name in the superclass chain.
+
+      #### Examples
+
+      The following code produces this diagnostic because `Object` doesn't define
+      a method named `n`:
+
+      ```dart
+      class C {
+        void m() {
+          super.[!n!]();
+        }
+      }
+      ```
+
+      The following code produces this diagnostic because `Object` doesn't define
+      a getter named `g`:
+
+      ```dart
+      class C {
+        void m() {
+          super.[!g!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the inherited member you intend to invoke has a different name, then
+      make the name of the invoked member match the inherited member.
+
+      If the member you intend to invoke is defined in the same class, then
+      remove the `super.`.
+
+      If the member isn’t defined, then either add the member to one of the
+      superclasses or remove the invocation.
+  UNDEFINED_SUPER_OPERATOR:
+    sharedName: UNDEFINED_SUPER_MEMBER
+    template: "The operator '{0}' isn't defined in a superclass of '{1}'."
+    tip: "Try defining the operator '{0}' in a superclass."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the operator
+      1: the name of the enclosing type where the operator is being looked for
+  UNDEFINED_SUPER_SETTER:
+    sharedName: UNDEFINED_SUPER_MEMBER
+    template: "The setter '{0}' isn't defined in a superclass of '{1}'."
+    tip: "Try correcting the name to the name of an existing setter, or defining a setter or field named '{0}' in a superclass."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the setter
+      1: the name of the enclosing type where the setter is being looked for
+  UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER:
+    template: Static members from supertypes must be qualified by the name of the defining type.
+    tip: "Try adding '{0}.' before the name."
+    hasPublishedDocs: true
+    comment: |-
+      This is a specialization of [INSTANCE_ACCESS_TO_STATIC_MEMBER] that is used
+      when we are able to find the name defined in a supertype. It exists to
+      provide a more informative error message.
+
+      Parameters:
+      0: the name of the defining type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when code in one class references a
+      static member in a superclass without prefixing the member's name with the
+      name of the superclass. Static members can only be referenced without a
+      prefix in the class in which they're declared.
+
+      #### Example
+
+      The following code produces this diagnostic because the static field `x` is
+      referenced in the getter `g` without prefixing it with the name of the
+      defining class:
+
+      ```dart
+      class A {
+        static int x = 3;
+      }
+
+      class B extends A {
+        int get g => [!x!];
+      }
+      ```
+
+      #### Common fixes
+
+      Prefix the name of the static member with the name of the declaring class:
+
+      ```dart
+      class A {
+        static int x = 3;
+      }
+
+      class B extends A {
+        int get g => A.x;
+      }
+      ```
+  UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE:
+    template: Static members from the extended type or one of its superclasses must be qualified by the name of the defining type.
+    tip: "Try adding '{0}.' before the name."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the defining type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an undefined name is found, and
+      the name is the same as a static member of the extended type or one of its
+      superclasses.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` is a static member
+      of the extended type `C`:
+
+      ```dart
+      class C {
+        static void m() {}
+      }
+
+      extension E on C {
+        void f() {
+          [!m!]();
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If you're trying to reference a static member that's declared outside the
+      extension, then add the name of the class or extension before the reference
+      to the member:
+
+      ```dart
+      class C {
+        static void m() {}
+      }
+
+      extension E on C {
+        void f() {
+          C.m();
+        }
+      }
+      ```
+
+      If you're referencing a member that isn't declared yet, add a declaration:
+
+      ```dart
+      class C {
+        static void m() {}
+      }
+
+      extension E on C {
+        void f() {
+          m();
+        }
+
+        void m() {}
+      }
+      ```
+  URI_DOES_NOT_EXIST:
+    template: "Target of URI doesn't exist: '{0}'."
+    tip: Try creating the file referenced by the URI, or Try using a URI for a file that does exist.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the URI pointing to a non-existent file
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import, export, or part
+      directive is found where the URI refers to a file that doesn't exist.
+
+      #### Examples
+
+      If the file `lib.dart` doesn't exist, the following code produces this
+      diagnostic:
+
+      ```dart
+      import [!'lib.dart'!];
+      ```
+
+      #### Common fixes
+
+      If the URI was mistyped or invalid, then correct the URI.
+
+      If the URI is correct, then create the file.
+  URI_HAS_NOT_BEEN_GENERATED:
+    template: "Target of URI hasn't been generated: '{0}'."
+    tip: Try running the generator that will generate the file referenced by the URI.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the URI pointing to a non-existent file
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import, export, or part
+      directive is found where the URI refers to a file that doesn't exist and
+      the name of the file ends with a pattern that's commonly produced by code
+      generators, such as one of the following:
+      - `.g.dart`
+      - `.pb.dart`
+      - `.pbenum.dart`
+      - `.pbserver.dart`
+      - `.pbjson.dart`
+      - `.template.dart`
+
+      #### Examples
+
+      If the file `lib.g.dart` doesn't exist, the following code produces this
+      diagnostic:
+
+      ```dart
+      import [!'lib.g.dart'!];
+      ```
+
+      #### Common fixes
+
+      If the file is a generated file, then run the generator that generates the
+      file.
+
+      If the file isn't a generated file, then check the spelling of the URI or
+      create the file.
+  URI_WITH_INTERPOLATION:
+    template: "URIs can't use string interpolation."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the string literal in an
+      `import`, `export`, or `part` directive contains an interpolation. The
+      resolution of the URIs in directives must happen before the declarations
+      are compiled, so expressions can’t be  evaluated  while determining the
+      values of the URIs.
+
+      #### Example
+
+      The following code produces this diagnostic because the string in the
+      `import` directive contains an interpolation:
+
+      ```dart
+      import [!'dart:$m'!];
+
+      const m = 'math';
+      ```
+
+      #### Common fixes
+
+      Remove the interpolation from the URI:
+
+      ```dart
+      import 'dart:math';
+
+      var zero = min(0, 0);
+      ```
+  USE_OF_VOID_RESULT:
+    template: "This expression has a type of 'void' so its value can't be used."
+    tip: "Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an expression whose
+      type is `void`, and the expression is used in a place where a value is
+      expected, such as before a member access or on the right-hand side of an
+      assignment.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` doesn't produce an
+      object on which `toString` can be invoked:
+
+      ```dart
+      void f() {}
+
+      void g() {
+        [!f()!].toString();
+      }
+      ```
+
+      #### Common fixes
+
+      Either rewrite the code so that the expression has a value or rewrite the
+      code so that it doesn't depend on the value.
+  VARIABLE_TYPE_MISMATCH:
+    template: "A value of type '{0}' can't be assigned to a const variable of type '{1}'."
+    tip: "Try using a subtype, or removing the 'const' keyword"
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the object being assigned.
+      1: the type of the variable being assigned to
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the evaluation of a constant
+      expression would result in a `CastException`.
+
+      #### Examples
+
+      The following code produces this diagnostic because the value of `x` is an
+      `int`, which can't be assigned to `y` because an `int` isn't a `String`:
+
+      ```dart
+      %language=2.9
+      const Object x = 0;
+      const String y = [!x!];
+      ```
+
+      #### Common fixes
+
+      If the declaration of the constant is correct, then change the value being
+      assigned to be of the correct type:
+
+      ```dart
+      %language=2.9
+      const Object x = 0;
+      const String y = '$x';
+      ```
+
+      If the assigned value is correct, then change the declaration to have the
+      correct type:
+
+      ```dart
+      %language=2.9
+      const Object x = 0;
+      const int y = x;
+      ```
+  WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+    template: "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position in '{3}'."
+    tip: "Try using 'in' type parameters in 'in' positions and 'out' type parameters in 'out' positions in the superinterface."
+    comment: |-
+      Let `C` be a generic class that declares a formal type parameter `X`, and
+      assume that `T` is a direct superinterface of `C`.
+
+      It is a compile-time error if `X` is explicitly defined as a covariant or
+      'in' type parameter and `X` occurs in a non-covariant position in `T`.
+      It is a compile-time error if `X` is explicitly defined as a contravariant
+      or 'out' type parameter and `X` occurs in a non-contravariant position in
+      `T`.
+
+      Parameters:
+      0: the name of the type parameter
+      1: the variance modifier defined for {0}
+      2: the variance position of the type parameter {0} in the
+         superinterface {3}
+      3: the name of the superinterface
+  WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR:
+    template: "Operator '{0}' should declare exactly {1} parameters, but {2} found."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the declared operator
+      1: the number of parameters expected
+      2: the number of parameters found in the operator declaration
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a declaration of an operator has
+      the wrong number of parameters.
+
+      #### Examples
+
+      The following code produces this diagnostic because the operator `+` must
+      have a single parameter corresponding to the right operand:
+
+      ```dart
+      class C {
+        int operator [!+!](a, b) => 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Add or remove parameters to match the required number:
+
+      ```dart
+      class C {
+        int operator +(a) => 0;
+      }
+      ```
+      TODO(brianwilkerson) It would be good to add a link to the spec or some
+       other documentation that lists the number of parameters for each operator,
+       but I don't know what to link to.
+  WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
+    sharedName: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
+    template: "Operator '-' should declare 0 or 1 parameter, but {0} found."
+    hasPublishedDocs: true
+    comment: |-
+      7.1.1 Operators: It is a compile time error if the arity of the
+      user-declared operator - is not 0 or 1.
+
+      Parameters:
+      0: the number of parameters found in the operator declaration
+  WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER:
+    template: Setters must declare exactly one required positional parameter.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a setter is found that doesn't
+      declare exactly one required positional parameter.
+
+      #### Examples
+
+      The following code produces this diagnostic because the setter `s` declares
+      two required parameters:
+
+      ```dart
+      %language=2.9
+      class C {
+        set [!s!](int x, int y) {}
+      }
+      ```
+
+      The following code produces this diagnostic because the setter `s` declares
+      one optional parameter:
+
+      ```dart
+      %language=2.9
+      class C {
+        set [!s!]([int x]) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Change the declaration so that there's exactly one required positional
+      parameter:
+
+      ```dart
+      %language=2.9
+      class C {
+        set s(int x) {}
+      }
+      ```
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS:
+    template: "The type '{0}' is declared with {1} type parameters, but {2} type arguments were given."
+    tip: Try adjusting the number of type arguments to match the number of type parameters.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type being referenced (<i>G</i>)
+      1: the number of type parameters that were declared
+      2: the number of type arguments provided
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a type that has type parameters
+      is used and type arguments are provided, but the number of type arguments
+      isn't the same as the number of type parameters.
+
+      The analyzer also produces this diagnostic when a constructor is invoked
+      and the number of type arguments doesn't match the number of type
+      parameters declared for the class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `C` has one type
+      parameter but two type arguments are provided when it is used as a type
+      annotation:
+
+      ```dart
+      class C<E> {}
+
+      void f([!C<int, int>!] x) {}
+      ```
+
+      The following code produces this diagnostic because `C` declares one type
+      parameter, but two type arguments are provided when creating an instance:
+
+      ```dart
+      class C<E> {}
+
+      var c = [!C<int, int>!]();
+      ```
+
+      #### Common fixes
+
+      Add or remove type arguments, as necessary, to match the number of type
+      parameters defined for the type:
+
+      ```dart
+      class C<E> {}
+
+      void f(C<int> x) {}
+      ```
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR:
+    template: "The constructor '{0}.{1}' doesn't have type parameters."
+    tip: Try moving type arguments to after the type name.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class being instantiated
+      1: the name of the constructor being invoked
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when type arguments are provided
+      after the name of a named constructor. Constructors can't declare type
+      parameters, so invocations can only provide the type arguments associated
+      with the class, and those type arguments are required to follow the name of
+      the class rather than the name of the constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the type parameters
+      (`<String>`) follow the name of the constructor rather than the name of the
+      class:
+
+      ```dart
+      class C<T> {
+        C.named();
+      }
+      C f() => C.named[!<String>!]();
+      ```
+
+      #### Common fixes
+
+      If the type arguments are for the class' type parameters, then move the
+      type arguments to follow the class name:
+
+      ```dart
+      class C<T> {
+        C.named();
+      }
+      C f() => C<String>.named();
+      ```
+
+      If the type arguments aren't for the class' type parameters, then remove
+      them:
+
+      ```dart
+      class C<T> {
+        C.named();
+      }
+      C f() => C.named();
+      ```
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
+    template: "The extension '{0}' is declared with {1} type parameters, but {2} type arguments were given."
+    tip: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the extension being referenced
+      1: the number of type parameters that were declared
+      2: the number of type arguments provided
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension that has type
+      parameters is used and type arguments are provided, but the number of type
+      arguments isn't the same as the number of type parameters.
+
+      #### Example
+
+      The following code produces this diagnostic because the extension `E` is
+      declared to have a single type parameter (`T`), but the extension override
+      has two type arguments:
+
+      ```dart
+      extension E<T> on List<T> {
+        int get len => length;
+      }
+
+      void f(List<int> p) {
+        E[!<int, String>!](p).len;
+      }
+      ```
+
+      #### Common fixes
+
+      Change the type arguments so that there are the same number of type
+      arguments as there are type parameters:
+
+      ```dart
+      extension E<T> on List<T> {
+        int get len => length;
+      }
+
+      void f(List<int> p) {
+        E<int>(p).len;
+      }
+      ```
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION:
+    sharedName: WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION
+    template: "This function is declared with {0} type parameters, but {1} type arguments were given."
+    tip: Try adjusting the number of type arguments to match the number of type parameters.
+    comment: |-
+      Parameters:
+      0: the number of type parameters that were declared
+      1: the number of type arguments provided
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
+    template: "The function '{0}' is declared with {1} type parameters, but {2} type arguments were given."
+    tip: Try adjusting the number of type arguments to match the number of type parameters.
+    comment: |-
+      Parameters:
+      0: the name of the function being referenced
+      1: the number of type parameters that were declared
+      2: the number of type arguments provided
+  WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD:
+    template: "The method '{0}' is declared with {1} type parameters, but {2} type arguments are given."
+    tip: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the method being referenced (<i>G</i>)
+      1: the number of type parameters that were declared
+      2: the number of type arguments provided
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function is invoked
+      with a different number of type arguments than the number of type
+      parameters specified in its declaration. There must either be no type
+      arguments or the number of arguments must match the number of parameters.
+
+      #### Example
+
+      The following code produces this diagnostic because the invocation of the
+      method `m` has two type arguments, but the declaration of `m` only has one
+      type parameter:
+
+      ```dart
+      class C {
+        int m<A>(A a) => 0;
+      }
+
+      int f(C c) => c.m[!<int, int>!](2);
+      ```
+
+      #### Common fixes
+
+      If the type arguments are necessary, then make them match the number of
+      type parameters by either adding or removing type arguments:
+
+      ```dart
+      class C {
+        int m<A>(A a) => 0;
+      }
+
+      int f(C c) => c.m<int>(2);
+      ```
+
+      If the type arguments aren't necessary, then remove them:
+
+      ```dart
+      class C {
+        int m<A>(A a) => 0;
+      }
+
+      int f(C c) => c.m(2);
+      ```
+  WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+    template: "'{0}' can't be used contravariantly or invariantly in '{1}'."
+    tip: Try not using class type parameters in types of formal parameters of function types, nor in explicitly contravariant or invariant superinterfaces.
+    comment: |-
+      Let `C` be a generic class that declares a formal type parameter `X`, and
+      assume that `T` is a direct superinterface of `C`. It is a compile-time
+      error if `X` occurs contravariantly or invariantly in `T`.
+  WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
+    template: "The '{0}' type parameter '{1}' can't be used in an '{2}' position."
+    tip: "Try removing the type parameter or change the explicit variance modifier declaration for the type parameter to another one of 'in', 'out', or 'inout'."
+    comment: |-
+      Let `C` be a generic class that declares a formal type parameter `X`.
+
+      If `X` is explicitly contravariant then it is a compile-time error for
+      `X` to occur in a non-contravariant position in a member signature in the
+      body of `C`, except when `X` is in a contravariant position in the type
+      annotation of a covariant formal parameter.
+
+      If `X` is explicitly covariant then it is a compile-time error for
+      `X` to occur in a non-covariant position in a member signature in the
+      body of `C`, except when `X` is in a covariant position in the type
+      annotation of a covariant formal parameter.
+
+      Parameters:
+      0: the variance modifier defined for {0}
+      1: the name of the type parameter
+      2: the variance position that the type parameter {1} is in
+  YIELD_EACH_IN_NON_GENERATOR:
+    sharedName: YIELD_IN_NON_GENERATOR
+    template: "Yield-each statements must be in a generator function (one marked with either 'async*' or 'sync*')."
+    tip: "Try adding 'async*' or 'sync*' to the enclosing function."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `yield` or `yield*` statement
+      appears in a function whose body isn't marked with one of the `async*` or
+      `sync*` modifiers.
+
+      #### Example
+
+      The following code produces this diagnostic because `yield` is being used
+      in a function whose body doesn't have a modifier:
+
+      ```dart
+      Iterable<int> get digits {
+        yield* [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+      }
+      ```
+
+      The following code produces this diagnostic because `yield*` is being used
+      in a function whose body has the `async` modifier rather than the `async*`
+      modifier:
+
+      ```dart
+      Stream<int> get digits async {
+        yield* [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+      }
+      ```
+
+      #### Common fixes
+
+      Add a modifier, or change the existing modifier to be either `async*` or
+      `sync*`:
+
+      ```dart
+      Iterable<int> get digits sync* {
+        yield* [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+      }
+      ```
+  YIELD_IN_NON_GENERATOR:
+    template: "Yield statements must be in a generator function (one marked with either 'async*' or 'sync*')."
+    tip: "Try adding 'async*' or 'sync*' to the enclosing function."
+    hasPublishedDocs: true
+    comment: |-
+      ?? Yield: It is a compile-time error if a yield statement appears in a
+      function that is not a generator function.
+
+      No parameters.
+  YIELD_OF_INVALID_TYPE:
+    template: "The type '{0}' implied by the 'yield' expression must be assignable to '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the type of the expression after `yield`
+      1: the return type of the function containing the `yield`
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type of object produced by a
+      `yield` expression doesn't match the type of objects that are to be
+      returned from the `Iterable` or `Stream` types that are returned from a
+      generator (a function or method marked with either `sync*` or `async*`).
+
+      #### Example
+
+      The following code produces this diagnostic because the getter `zero` is
+      declared to return an `Iterable` that returns integers, but the `yield` is
+      returning a string from the iterable:
+
+      ```dart
+      Iterable<int> get zero sync* {
+        yield [!'0'!];
+      }
+      ```
+
+      #### Common fixes
+
+      If the return type of the function is correct, then fix the expression
+      following the keyword `yield` to return the correct type:
+
+      ```dart
+      Iterable<int> get zero sync* {
+        yield 0;
+      }
+      ```
+
+      If the expression following the `yield` is correct, then change the return
+      type of the function to allow it:
+
+      ```dart
+      Iterable<String> get zero sync* {
+        yield '0';
+      }
+      ```
+FfiCode:
+  ANNOTATION_ON_POINTER_FIELD:
+    template: "Fields in a struct class whose type is 'Pointer' should not have any annotations."
+    tip: Try removing the annotation.
+    comment: No parameters.
+  ARGUMENT_MUST_BE_A_CONSTANT:
+    template: "Argument '{0}' must be a constant."
+    tip: Try replacing the value with a literal or const.
+    comment: |-
+      Parameters:
+      0: the name of the argument
+  CREATION_OF_STRUCT_OR_UNION:
+    template: "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't be instantiated by a generative constructor."
+    tip: "Try allocating it via allocation, or load from a 'Pointer'."
+    comment: No parameters.
+  EMPTY_STRUCT:
+    template: "Struct '{0}' is empty. Empty structs are undefined behavior."
+    tip: "Try adding a field to '{0}' or use a different Struct."
+    comment: |-
+      Parameters:
+      0: the name of the struct class
+  EXTRA_ANNOTATION_ON_STRUCT_FIELD:
+    template: Fields in a struct class must have exactly one annotation indicating the native type.
+    tip: Try removing the extra annotation.
+    comment: No parameters.
+  EXTRA_SIZE_ANNOTATION_CARRAY:
+    template: "'Array's must have exactly one 'Array' annotation."
+    tip: Try removing the extra annotation.
+    comment: No parameters.
+  FFI_NATIVE_ONLY_STATIC:
+    template: FfiNative annotations can only be used on static functions.
+    tip: Change the method to static.
+    comment: No parameters.
+  FIELD_INITIALIZER_IN_STRUCT:
+    template: "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers."
+    tip: Try removing the field initializer and marking the field as external.
+    comment: No parameters.
+  FIELD_IN_STRUCT_WITH_INITIALIZER:
+    template: "Fields in subclasses of 'Struct' and 'Union' can't have initializers."
+    tip: Try removing the initializer and marking the field as external.
+    comment: No parameters.
+  FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
+    template: "Fields of 'Struct' and 'Union' subclasses must be marked external."
+    tip: "Try adding the 'external' modifier."
+    comment: No parameters.
+  GENERIC_STRUCT_SUBCLASS:
+    template: "The class '{0}' can't extend 'Struct' or 'Union' because it is generic."
+    tip: "Try removing the type parameters from '{0}'."
+    comment: |-
+      Parameters:
+      0: the name of the struct class
+  INVALID_EXCEPTION_VALUE:
+    template: "The method 'Pointer.fromFunction' must not have an exceptional return value (the second argument) when the return type of the function is either 'void', 'Handle' or 'Pointer'."
+    tip: Try removing the exceptional return value.
+    comment: No parameters.
+  INVALID_FIELD_TYPE_IN_STRUCT:
+    template: "Fields in struct classes can't have the type '{0}'. They can only be declared as 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'."
+    tip: "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'."
+    comment: |-
+      Parameters:
+      0: the type of the field
+  LEAF_CALL_MUST_NOT_RETURN_HANDLE:
+    template: FFI leaf call must not return a Handle.
+    tip: Try changing the return type to primitive or struct.
+    comment: No parameters.
+  LEAF_CALL_MUST_NOT_TAKE_HANDLE:
+    template: FFI leaf call must not take arguments of type Handle.
+    tip: Try changing the argument type to primitive or struct.
+    comment: No parameters.
+  MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
+    template: The annotation does not match the declared type of the field.
+    tip: Try using a different annotation or changing the declared type to match.
+    comment: No parameters.
+  MISSING_ANNOTATION_ON_STRUCT_FIELD:
+    template: "Fields in a struct class must either have the type 'Pointer' or an annotation indicating the native type."
+    tip: Try adding an annotation.
+    comment: No parameters.
+  MISSING_EXCEPTION_VALUE:
+    template: "The method 'Pointer.fromFunction' must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle' or 'Pointer'."
+    tip: Try adding an exceptional return value.
+    comment: No parameters.
+  MISSING_FIELD_TYPE_IN_STRUCT:
+    template: "Fields in struct classes must have an explicitly declared type of 'int', 'double' or 'Pointer'."
+    tip: "Try using 'int', 'double' or 'Pointer'."
+    comment: |-
+      Parameters:
+      0: the type of the field
+  MISSING_SIZE_ANNOTATION_CARRAY:
+    template: "'Array's must have exactly one 'Array' annotation."
+    tip: "Try adding a 'Array' annotation."
+    comment: No parameters.
+  MUST_BE_A_NATIVE_FUNCTION_TYPE:
+    template: "The type '{0}' given to '{1}' must be a valid 'dart:ffi' native function type."
+    tip: "Try changing the type to only use members for 'dart:ffi'."
+    comment: |-
+      Parameters:
+      0: the type that should be a valid dart:ffi native type.
+      1: the name of the function whose invocation depends on this relationship
+  MUST_BE_A_SUBTYPE:
+    template: "The type '{0}' must be a subtype of '{1}' for '{2}'."
+    tip: Try changing one or both of the type arguments.
+    comment: |-
+      Parameters:
+      0: the type that should be a subtype
+      1: the supertype that the subtype is compared to
+      2: the name of the function whose invocation depends on this relationship
+  NON_CONSTANT_TYPE_ARGUMENT:
+    template: "The type arguments to '{0}' must be compile time constants but type parameters are not constants."
+    tip: Try changing the type argument to be a constant type.
+    comment: |-
+      Parameters:
+      0: the name of the function, method, or constructor having type arguments
+  NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
+    template: "The type argument for the pointer '{0}' must be a 'NativeFunction' in order to use 'asFunction'."
+    tip: "Try changing the type argument to be a 'NativeFunction'."
+    comment: |-
+      Parameters:
+      0: the type that should be a valid dart:ffi native type.
+  NON_POSITIVE_ARRAY_DIMENSION:
+    template: Array dimensions must be positive numbers.
+    tip: Try changing the input to a positive number.
+    comment: No parameters.
+  NON_SIZED_TYPE_ARGUMENT:
+    template: "Type arguments to '{0}' can't have the type '{1}'. They can only be declared as native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct' or 'Union'."
+    tip: "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct' or 'Union'."
+    comment: |-
+      Parameters:
+      0: the type of the field
+  PACKED_ANNOTATION:
+    template: "Structs must have at most one 'Packed' annotation."
+    tip: "Try removing extra 'Packed' annotations."
+    comment: No parameters.
+  PACKED_ANNOTATION_ALIGNMENT:
+    template: Only packing to 1, 2, 4, 8, and 16 bytes is supported.
+    tip: "Try changing the 'Packed' annotation alignment to 1, 2, 4, 8, or 16."
+    comment: No parameters.
+  PACKED_NESTING_NON_PACKED:
+    template: "Nesting the non-packed or less tightly packed struct '{0}' in a packed struct '{1}' is not supported."
+    tip: Try packing the nested struct or packing the nested struct more tightly.
+    comment: |-
+      Parameters:
+      0: the name of the outer struct
+      1: the name of the struct being nested
+  SIZE_ANNOTATION_DIMENSIONS:
+    template: "'Array's must have an 'Array' annotation that matches the dimensions."
+    tip: "Try adjusting the arguments in the 'Array' annotation."
+    comment: No parameters.
+  SUBTYPE_OF_FFI_CLASS_IN_EXTENDS:
+    sharedName: SUBTYPE_OF_FFI_CLASS
+    template: "The class '{0}' can't extend '{1}'."
+    tip: "Try extending 'Struct' or 'Union'."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+  SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS:
+    sharedName: SUBTYPE_OF_FFI_CLASS
+    template: "The class '{0}' can't implement '{1}'."
+    tip: "Try extending 'Struct' or 'Union'."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+  SUBTYPE_OF_FFI_CLASS_IN_WITH:
+    sharedName: SUBTYPE_OF_FFI_CLASS
+    template: "The class '{0}' can't mix in '{1}'."
+    tip: "Try extending 'Struct' or 'Union'."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+  SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
+    sharedName: SUBTYPE_OF_STRUCT_CLASS
+    template: "The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct' or 'Union'."
+    tip: "Try extending 'Struct' or 'Union' directly."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+  SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
+    sharedName: SUBTYPE_OF_STRUCT_CLASS
+    template: "The class '{0}' can't implement '{1}' because '{1}' is a subtype of 'Struct' or 'Union'."
+    tip: "Try extending 'Struct' or 'Union' directly."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+  SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
+    sharedName: SUBTYPE_OF_STRUCT_CLASS
+    template: "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct' or 'Union'."
+    tip: "Try extending 'Struct' or 'Union' directly."
+    comment: |-
+      Parameters:
+      0: the name of the subclass
+      1: the name of the class being extended, implemented, or mixed in
+HintCode:
+  ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
+    template: "The argument type '{0}' can't be assigned to the parameter type '{1} Function(Object)' or '{1} Function(Object, StackTrace)'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the actual argument type
+      1: the name of the expected function return type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an invocation of
+      `Future.catchError` has an argument that is a function whose parameters
+      aren't compatible with the arguments that will be passed to the function
+      when it's invoked. The static type of the first argument to `catchError`
+      is just `Function`, even though the function that is passed in is expected
+      to have either a single parameter of type `Object` or two parameters of
+      type `Object` and `StackTrace`.
+
+      #### Example
+
+      The following code produces this diagnostic because the closure being
+      passed to `catchError` doesn't take any parameters, but the function is
+      required to take at least one parameter:
+
+      ```dart
+      void f(Future<int> f) {
+        f.catchError([!() => 0!]);
+      }
+      ```
+
+      The following code produces this diagnostic because the closure being
+      passed to `catchError` takes three parameters, but it can't have more than
+      two required parameters:
+
+      ```dart
+      void f(Future<int> f) {
+        f.catchError([!(one, two, three) => 0!]);
+      }
+      ```
+
+      The following code produces this diagnostic because even though the closure
+      being passed to `catchError` takes one parameter, the closure doesn't have
+      a type that is compatible with `Object`:
+
+      ```dart
+      void f(Future<int> f) {
+        f.catchError([!(String error) => 0!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Change the function being passed to `catchError` so that it has either one
+      or two required parameters, and the parameters have the required types:
+
+      ```dart
+      void f(Future<int> f) {
+        f.catchError((Object error) => 0);
+      }
+      ```
+  ASSIGNMENT_OF_DO_NOT_STORE:
+    template: "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or top-level variable."
+    tip: Try removing the assignment.
+    comment: Users should not assign values marked `@doNotStore`.
+  CAN_BE_NULL_AFTER_NULL_AWARE:
+    template: "The receiver uses '?.', so its value can be null."
+    tip: "Replace the '.' with a '?.' in the invocation."
+    comment: |-
+      When the target expression uses '?.' operator, it can be `null`, so all the
+      subsequent invocations should also use '?.' operator.
+  DEAD_CODE:
+    template: Dead code.
+    tip: Try removing the code, or fixing the code before it so that it can be reached.
+    hasPublishedDocs: true
+    comment: |-
+      Dead code is code that is never reached, this can happen for instance if a
+      statement follows a return statement.
+
+      No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when code is found that won't be
+      executed because execution will never reach the code.
+
+      #### Examples
+
+      The following code produces this diagnostic because the invocation of
+      `print` occurs after the function has returned:
+
+      ```dart
+      void f() {
+        return;
+        [!print('here');!]
+      }
+      ```
+
+      #### Common fixes
+
+      If the code isn't needed, then remove it:
+
+      ```dart
+      void f() {
+        return;
+      }
+      ```
+
+      If the code needs to be executed, then either move the code to a place
+      where it will be executed:
+
+      ```dart
+      void f() {
+        print('here');
+        return;
+      }
+      ```
+
+      Or, rewrite the code before it, so that it can be reached:
+
+      ```dart
+      void f({bool skipPrinting = true}) {
+        if (skipPrinting) {
+          return;
+        }
+        print('here');
+      }
+      ```
+  DEAD_CODE_CATCH_FOLLOWING_CATCH:
+    template: "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' are never reached."
+    tip: Try reordering the catch clauses so that they can be reached, or removing the unreachable catch clauses.
+    hasPublishedDocs: true
+    comment: |-
+      Dead code is code that is never reached. This case covers cases where the
+      user has catch clauses after `catch (e)` or `on Object catch (e)`.
+
+      No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `catch` clause is found that
+      can't be executed because it’s after a `catch` clause of the form
+      `catch (e)` or `on Object catch (e)`. The first `catch` clause that matches
+      the thrown object is selected, and both of those forms will match any
+      object, so no `catch` clauses that follow them will be selected.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      void f() {
+        try {
+        } catch (e) {
+        } [!on String {
+        }!]
+      }
+      ```
+
+      #### Common fixes
+
+      If the clause should be selectable, then move the clause before the general
+      clause:
+
+      ```dart
+      void f() {
+        try {
+        } on String {
+        } catch (e) {
+        }
+      }
+      ```
+
+      If the clause doesn't need to be selectable, then remove it:
+
+      ```dart
+      void f() {
+        try {
+        } catch (e) {
+        }
+      }
+      ```
+  DEAD_CODE_ON_CATCH_SUBTYPE:
+    template: "Dead code: This on-catch block won’t be executed because '{0}' is a subtype of '{1}' and hence will have been caught already."
+    tip: Try reordering the catch clauses so that this block can be reached, or removing the unreachable catch clause.
+    hasPublishedDocs: true
+    comment: |-
+      Dead code is code that is never reached. This case covers cases where the
+      user has an on-catch clause such as `on A catch (e)`, where a supertype of
+      `A` was already caught.
+
+      Parameters:
+      0: name of the subtype
+      1: name of the supertype
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `catch` clause is found that
+      can't be executed because it is after a `catch` clause that catches either
+      the same type or a supertype of the clause's type. The first `catch` clause
+      that matches the thrown object is selected, and the earlier clause always
+      matches anything matchable by the highlighted clause, so the highlighted
+      clause will never be selected.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      void f() {
+        try {
+        } on num {
+        } [!on int {
+        }!]
+      }
+      ```
+
+      #### Common fixes
+
+      If the clause should be selectable, then move the clause before the general
+      clause:
+
+      ```dart
+      void f() {
+        try {
+        } on int {
+        } on num {
+        }
+      }
+      ```
+
+      If the clause doesn't need to be selectable, then remove it:
+
+      ```dart
+      void f() {
+        try {
+        } on num {
+        }
+      }
+      ```
+  DEPRECATED_FUNCTION_CLASS_DECLARATION:
+    template: "Declaring a class named 'Function' is deprecated."
+    tip: Try renaming the class.
+    comment: Users should not create a class named `Function` anymore.
+  DEPRECATED_MEMBER_USE:
+    template: "'{0}' is deprecated and shouldn't be used."
+    tip: Try replacing the use of the deprecated member with the replacement.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a deprecated library or class
+      member is used in a different package.
+
+      #### Examples
+
+      If the method `m` in the class `C` is annotated with `@deprecated`, then
+      the following code produces this diagnostic:
+
+      ```dart
+      void f(C c) {
+        c.[!m!]();
+      }
+      ```
+
+      #### Common fixes
+
+      The documentation for declarations that are annotated with `@deprecated`
+      should indicate what code to use in place of the deprecated code.
+  DEPRECATED_MEMBER_USE_WITH_MESSAGE:
+    sharedName: DEPRECATED_MEMBER_USE
+    template: "'{0}' is deprecated and shouldn't be used. {1}."
+    tip: Try replacing the use of the deprecated member with the replacement.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+      1: message details
+  DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE:
+    template: "'{0}' is deprecated and shouldn't be used."
+    tip: Try replacing the use of the deprecated member with the replacement.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a deprecated library member or
+      class member is used in the same package in which it's declared.
+
+      #### Examples
+
+      The following code produces this diagnostic because `x` is deprecated:
+
+      ```dart
+      @deprecated
+      var x = 0;
+      var y = [!x!];
+      ```
+
+      #### Common fixes
+
+      The fix depends on what's been deprecated and what the replacement is. The
+      documentation for deprecated declarations should indicate what code to use
+      in place of the deprecated code.
+  DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE:
+    sharedName: DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE
+    template: "'{0}' is deprecated and shouldn't be used. {1}."
+    tip: Try replacing the use of the deprecated member with the replacement.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the member
+      1: message details
+  DEPRECATED_MIXIN_FUNCTION:
+    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
+    template: "Mixing in 'Function' is deprecated."
+    tip: "Try removing 'Function' from the 'with' clause."
+    hasPublishedDocs: true
+    comment: No parameters.
+  DEPRECATED_IMPLEMENTS_FUNCTION:
+    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
+    template: "Implementing 'Function' has no effect."
+    tip: "Try removing 'Function' from the 'implements' clause."
+    hasPublishedDocs: true
+    comment: No parameters.
+  DEPRECATED_EXTENDS_FUNCTION:
+    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
+    template: "Extending 'Function' is deprecated."
+    tip: "Try removing 'Function' from the 'extends' clause."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the class `Function` is used in
+      either the `extends`, `implements`, or `with` clause of a class or mixin.
+      Using the class `Function` in this way has no semantic value, so it's
+      effectively dead code.
+
+      #### Example
+
+      The following code produces this diagnostic because `Function` is used as
+      the superclass of `F`:
+
+      ```dart
+      class F extends [!Function!] {}
+      ```
+
+      #### Common fixes
+
+      Remove the class `Function` from whichever clause it's in, and remove the
+      whole clause if `Function` is the only type in the clause:
+
+      ```dart
+      class F {}
+      ```
+  DIVISION_OPTIMIZATION:
+    template: The operator x ~/ y is more efficient than (x / y).toInt().
+    tip: "Try re-writing the expression to use the '~/' operator."
+    comment: Hint to use the ~/ operator.
+  DUPLICATE_HIDDEN_NAME:
+    template: Duplicate hidden name.
+    tip: Try removing the repeated name from the list of hidden members.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name occurs multiple times in
+      a `hide` clause. Repeating the name is unnecessary.
+
+      #### Example
+
+      The following code produces this diagnostic because the name `min` is
+      hidden more than once:
+
+      ```dart
+      import 'dart:math' hide min, [!min!];
+
+      var x = pi;
+      ```
+
+      #### Common fixes
+
+      If the name was mistyped in one or more places, then correct the mistyped
+      names:
+
+      ```dart
+      import 'dart:math' hide max, min;
+
+      var x = pi;
+      ```
+
+      If the name wasn't mistyped, then remove the unnecessary name from the
+      list:
+
+      ```dart
+      import 'dart:math' hide min;
+
+      var x = pi;
+      ```
+  DUPLICATE_IGNORE:
+    template: "The diagnostic '{0}' doesn't need to be ignored here because it's already being ignored."
+    tip: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the diagnostic being ignored
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a diagnostic name appears in an
+      `ignore` comment, but the diagnostic is already being ignored, either
+      because it's already included in the same `ignore` comment or because it
+      appears in an `ignore-in-file` comment.
+
+      #### Example
+
+      The following code produces this diagnostic because the diagnostic named
+      `unused_local_variable` is already being ignored for the whole file so it
+      doesn't need to be ignored on a specific line:
+
+      ```dart
+      // ignore_for_file: unused_local_variable
+      void f() {
+        // ignore: [!unused_local_variable!]
+        var x = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because the diagnostic named
+      `unused_local_variable` is being ignored twice on the same line:
+
+      ```dart
+      void f() {
+        // ignore: unused_local_variable, [!unused_local_variable!]
+        var x = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the ignore comment, or remove the unnecessary diagnostic name if the
+      ignore comment is ignoring more than one diagnostic:
+
+      ```dart
+      // ignore_for_file: unused_local_variable
+      void f() {
+        var x = 0;
+      }
+      ```
+  DUPLICATE_IMPORT:
+    template: Duplicate import.
+    tip: Try removing all but one import of the library.
+    hasPublishedDocs: true
+    comment: |-
+      Duplicate imports.
+
+      No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import directive is found
+      that is the same as an import before it in the file. The second import
+      doesn’t add value and should be removed.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      import 'package:meta/meta.dart';
+      import [!'package:meta/meta.dart'!];
+
+      @sealed class C {}
+      ```
+
+      #### Common fixes
+
+      Remove the unnecessary import:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @sealed class C {}
+      ```
+  DUPLICATE_SHOWN_NAME:
+    template: Duplicate shown name.
+    tip: Try removing the repeated name from the list of shown members.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a name occurs multiple times in
+      a `show` clause. Repeating the name is unnecessary.
+
+      #### Example
+
+      The following code produces this diagnostic because the name `min` is shown
+      more than once:
+
+      ```dart
+      import 'dart:math' show min, [!min!];
+
+      var x = min(2, min(0, 1));
+      ```
+
+      #### Common fixes
+
+      If the name was mistyped in one or more places, then correct the mistyped
+      names:
+
+      ```dart
+      import 'dart:math' show max, min;
+
+      var x = max(2, min(0, 1));
+      ```
+
+      If the name wasn't mistyped, then remove the unnecessary name from the
+      list:
+
+      ```dart
+      import 'dart:math' show min;
+
+      var x = min(2, min(0, 1));
+      ```
+  EQUAL_ELEMENTS_IN_SET:
+    template: "Two elements in a set literal shouldn't be equal."
+    tip: Change or remove the duplicate element.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an element in a non-constant set
+      is the same as a previous element in the same set. If two elements are the
+      same, then the second value is ignored, which makes having both elements
+      pointless and likely signals a bug.
+
+      #### Example
+
+      The following code produces this diagnostic because the element `1` appears
+      twice:
+
+      ```dart
+      const a = 1;
+      const b = 1;
+      var s = <int>{a, [!b!]};
+      ```
+
+      #### Common fixes
+
+      If both elements should be included in the set, then change one of the
+      elements:
+
+      ```dart
+      const a = 1;
+      const b = 2;
+      var s = <int>{a, b};
+      ```
+
+      If only one of the elements is needed, then remove the one that isn't
+      needed:
+
+      ```dart
+      const a = 1;
+      var s = <int>{a};
+      ```
+
+      Note that literal sets preserve the order of their elements, so the choice
+      of which element to remove might affect the order in which elements are
+      returned by an iterator.
+  EQUAL_KEYS_IN_MAP:
+    template: "Two keys in a map literal shouldn't be equal."
+    tip: Change or remove the duplicate key.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a key in a non-constant map is
+      the same as a previous key in the same map. If two keys are the same, then
+      the second value overwrites the first value, which makes having both pairs
+      pointless and likely signals a bug.
+
+      #### Example
+
+      The following code produces this diagnostic because the keys `a` and `b`
+      have the same value:
+
+      ```dart
+      const a = 1;
+      const b = 1;
+      var m = <int, String>{a: 'a', [!b!]: 'b'};
+      ```
+
+      #### Common fixes
+
+      If both entries should be included in the map, then change one of the keys:
+
+      ```dart
+      const a = 1;
+      const b = 2;
+      var m = <int, String>{a: 'a', b: 'b'};
+      ```
+
+      If only one of the entries is needed, then remove the one that isn't
+      needed:
+
+      ```dart
+      const a = 1;
+      var m = <int, String>{a: 'a'};
+      ```
+
+      Note that literal maps preserve the order of their entries, so the choice
+      of which entry to remove might affect the order in which the keys and
+      values are returned by an iterator.
+  FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE:
+    template: "A file in the 'lib' directory shouldn't import a file outside the 'lib' directory."
+    tip: "Try removing the import, or moving the imported file inside the 'lib' directory."
+    comment: |-
+      It is a bad practice for a source file in a package "lib" directory
+      hierarchy to traverse outside that directory hierarchy. For example, a
+      source file in the "lib" directory should not contain a directive such as
+      `import '../web/some.dart'` which references a file outside the lib
+      directory.
+  FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE:
+    template: "A file outside the 'lib' directory shouldn't reference a file inside the 'lib' directory using a relative path."
+    tip: "Try using a package: URI instead."
+    comment: |-
+      It is a bad practice for a source file ouside a package "lib" directory
+      hierarchy to traverse into that directory hierarchy. For example, a source
+      file in the "web" directory should not contain a directive such as
+      `import '../lib/some.dart'` which references a file inside the lib
+      directory.
+  IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
+    template: "The imported library defines a top-level function named 'loadLibrary' that is hidden by deferring this library."
+    tip: Try changing the import to not be deferred, or rename the function in the imported library.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library that declares a
+      function named `loadLibrary` is imported using a deferred import. A
+      deferred import introduces an implicit function named `loadLibrary`. This
+      function is used to load the contents of the deferred library, and the
+      implicit function hides the explicit declaration in the deferred library.
+
+      For more information, see the language tour's coverage of
+      [deferred loading](https://dart.dev/guides/language/language-tour#lazily-loading-a-library).
+
+      #### Example
+
+      Given a file (`a.dart`) that defines a function named `loadLibrary`:
+
+      ```dart
+      %uri="lib/a.dart"
+      void loadLibrary(Library library) {}
+
+      class Library {}
+      ```
+
+      The following code produces this diagnostic because the implicit
+      declaration of `a.loadLibrary` is hiding the explicit declaration of
+      `loadLibrary` in `a.dart`:
+
+      ```dart
+      [!import 'a.dart' deferred as a;!]
+
+      void f() {
+        a.Library();
+      }
+      ```
+
+      #### Common fixes
+
+      If the imported library isn't required to be deferred, then remove the
+      keyword `deferred`:
+
+      ```dart
+      import 'a.dart' as a;
+
+      void f() {
+        a.Library();
+      }
+      ```
+
+      If the imported library is required to be deferred and you need to
+      reference the imported function, then rename the function in the imported
+      library:
+
+      ```dart
+      void populateLibrary(Library library) {}
+
+      class Library {}
+      ```
+
+      If the imported library is required to be deferred and you don't need to
+      reference the imported function, then add a `hide` clause:
+
+      ```dart
+      import 'a.dart' deferred as a hide loadLibrary;
+
+      void f() {
+        a.Library();
+      }
+      ```
+
+      If type arguments shouldn't be required for the class, then mark the class
+      with the `@optionalTypeArgs` annotation (from `package:meta`):
+  IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
+    template: "The library '{0}' is legacy, and should not be imported into a null safe library."
+    tip: Try migrating the imported library.
+    comment: "https://github.com/dart-lang/sdk/issues/44063"
+  INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
+    template: "The type argument(s) of '{0}' can't be inferred."
+    tip: "Use explicit type argument(s) for '{0}'."
+    comment: |-
+      When "strict-inference" is enabled, collection literal types must be
+      inferred via the context type, or have type arguments.
+  INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
+    template: "The type argument(s) of the function '{0}' can't be inferred."
+    tip: "Use explicit type argument(s) for '{0}'."
+    comment: |-
+      When "strict-inference" is enabled, types in function invocations must be
+      inferred via the context type, or have type arguments.
+  INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
+    template: "The return type of '{0}' cannot be inferred."
+    tip: "Declare the return type of '{0}'."
+    comment: |-
+      When "strict-inference" is enabled, recursive local functions, top-level
+      functions, methods, and function-typed function parameters must all
+      specify a return type. See the strict-inference resource:
+
+      https://github.com/dart-lang/language/blob/master/resources/type-system/strict-inference.md
+  INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
+    template: "The type argument(s) of the generic function type '{0}' can't be inferred."
+    tip: "Use explicit type argument(s) for '{0}'."
+    comment: |-
+      When "strict-inference" is enabled, types in function invocations must be
+      inferred via the context type, or have type arguments.
+  INFERENCE_FAILURE_ON_INSTANCE_CREATION:
+    template: "The type argument(s) of the constructor '{0}' can't be inferred."
+    tip: "Use explicit type argument(s) for '{0}'."
+    comment: |-
+      When "strict-inference" is enabled, types in instance creation
+      (constructor calls) must be inferred via the context type, or have type
+      arguments.
+  INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
+    template: "The type of {0} can't be inferred without either a type or initializer."
+    tip: Try specifying the type of the variable.
+    comment: |-
+      When "strict-inference" in enabled, uninitialized variables must be
+      declared with a specific type.
+  INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
+    template: "The type of {0} can't be inferred; a type must be explicitly provided."
+    tip: Try specifying the type of the parameter.
+    comment: |-
+      When "strict-inference" in enabled, function parameters must be
+      declared with a specific type, or inherit a type.
+  INVALID_ANNOTATION_TARGET:
+    template: "The annotation '{0}' can only be used on {1}"
+    comment: |-
+      Parameters:
+      0: the name of the annotation
+      1: the list of valid targets
+  INVALID_EXPORT_OF_INTERNAL_ELEMENT:
+    template: "The member '{0}' can't be exported as a part of a package's public API."
+    tip: "Try using a hide clause to hide '{0}'."
+    comment: |-
+      This hint is generated anywhere where an element annotated with `@internal`
+      is exported as a part of a package's public API.
+
+      Parameters:
+      0: the name of the element
+  INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
+    template: "The member '{0}' can't be exported as a part of a package's public API, but is indirectly exported as part of the signature of '{1}'."
+    tip: "Try using a hide clause to hide '{0}'."
+    comment: |-
+      This hint is generated anywhere where an element annotated with `@internal`
+      is exported indirectly as a part of a package's public API.
+
+      Parameters:
+      0: the name of the element
+  INVALID_FACTORY_ANNOTATION:
+    template: Only methods can be annotated as factories.
+    comment: |-
+      This hint is generated anywhere a @factory annotation is associated with
+      anything other than a method.
+  INVALID_FACTORY_METHOD_DECL:
+    template: "Factory method '{0}' must have a return type."
+    comment: |-
+      This hint is generated anywhere a @factory annotation is associated with
+      a method that does not declare a return type.
+  INVALID_FACTORY_METHOD_IMPL:
+    template: "Factory method '{0}' doesn't return a newly allocated object."
+    comment: |-
+      This hint is generated anywhere a @factory annotation is associated with
+      a non-abstract method that can return anything other than a newly allocated
+      object.
+
+      Parameters:
+      0: the name of the method
+  INVALID_IMMUTABLE_ANNOTATION:
+    template: Only classes can be annotated as being immutable.
+    comment: |-
+      This hint is generated anywhere an @immutable annotation is associated with
+      anything other than a class.
+  INVALID_INTERNAL_ANNOTATION:
+    template: "Only public elements in a package's private API can be annotated as being internal."
+    comment: |-
+      This hint is generated anywhere a @internal annotation is associated with
+      an element found in a package's public API.
+  INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The language version override can't specify a version greater than the latest known language version: {0}.{1}"
+    tip: Try removing the language version override.
+  INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override number must begin with '@dart'"
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: The language version override must be before any declaration or directive.
+    tip: Try moving the language version override to the top of the file.
+  INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override comment must be specified with the word 'dart' in all lower case"
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override comment must be specified with a version number, like '2.0', after the '=' character."
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override number can't be prefixed with a letter"
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override comment can't be followed by any non-whitespace characters"
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: The Dart language version override comment must be specified with exactly two slashes.
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
+    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
+    template: "The Dart language version override comment must be specified with an '=' character"
+    tip: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
+    comment: |-
+      Invalid Dart language version comments don't follow the specification [1].
+      If a comment begins with "@dart" or "dart" (letters in any case),
+      followed by optional whitespace, followed by optional non-alphanumeric,
+      non-whitespace characters, followed by optional whitespace, followed by
+      an optional alphabetical character, followed by a digit, then the
+      comment is considered to be an attempt at a language version override
+      comment. If this attempted language version override comment is not a
+      valid language version override comment, it is reported.
+
+      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+  INVALID_LITERAL_ANNOTATION:
+    template: Only const constructors can have the `@literal` annotation.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the `@literal` annotation is
+      applied to anything other than a const constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because the constructor isn't
+      a `const` constructor:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        [!@literal!]
+        C();
+      }
+      ```
+
+      The following code produces this diagnostic because `x` isn't a
+      constructor:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@literal!]
+      var x;
+      ```
+
+      #### Common fixes
+
+      If the annotation is on a constructor and the constructor should always be
+      invoked with `const`, when possible, then mark the constructor with the
+      `const` keyword:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @literal
+        const C();
+      }
+      ```
+
+      If the constructor can't be marked as `const`, then remove the annotation.
+
+      If the annotation is on anything other than a constructor, then remove the
+      annotation:
+
+      ```dart
+      var x;
+      ```
+  INVALID_NON_VIRTUAL_ANNOTATION:
+    template: "The member '{0}' can't be '@nonVirtual' because it isn't a concrete instance member."
+    tip: Try removing @nonVirtual.
+    comment: |-
+      This hint is generated anywhere where `@nonVirtual` annotates something
+      other than a non-abstract instance member in a class or mixin.
+
+      Parameters:
+      0: the name of the member
+  INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
+    template: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
+    comment: |-
+      This hint is generated anywhere where an instance member annotated with
+      `@nonVirtual` is overridden in a subclass.
+
+      Parameters:
+      0: the name of the member
+      1: the name of the defining class
+  INVALID_REQUIRED_NAMED_PARAM:
+    template: "The type parameter '{0}' is annotated with @required but only named parameters without a default value can be annotated with it."
+    tip: Remove @required.
+    comment: |-
+      This hint is generated anywhere where `@required` annotates a named
+      parameter with a default value.
+
+      Parameters:
+      0: the name of the member
+  INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM:
+    template: "Incorrect use of the annotation @required on the optional positional parameter '{0}'. Optional positional parameters cannot be required."
+    tip: Remove @required.
+    comment: |-
+      This hint is generated anywhere where `@required` annotates an optional
+      positional parameter.
+
+      Parameters:
+      0: the name of the member
+  INVALID_REQUIRED_POSITIONAL_PARAM:
+    template: "Redundant use of the annotation @required on the required positional parameter '{0}'."
+    tip: Remove @required.
+    comment: |-
+      This hint is generated anywhere where `@required` annotates a non optional
+      positional parameter.
+
+      Parameters:
+      0: the name of the member
+  RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
+    sharedName: INVALID_RETURN_TYPE_FOR_CATCH_ERROR
+    template: "The return type '{0}' isn't assignable to '{1}', as required by 'Future.catchError'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type of the function
+      1: the expected return type as defined by the type of the Future
+  RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR:
+    sharedName: INVALID_RETURN_TYPE_FOR_CATCH_ERROR
+    template: "A value of type '{0}' can't be returned by the 'onError' handler because it must be assignable to '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the return type as declared in the return statement
+      1: the expected return type as defined by the type of the Future
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an invocation of
+      `Future.catchError` has an argument whose return type isn't compatible with
+      the type returned by the instance of `Future`. At runtime, the method
+      `catchError` attempts to return the value from the callback as the result
+      of the future, which results in another exception being thrown.
+
+      #### Example
+
+      The following code produces this diagnostic because `future` is declared to
+      return an `int` while `callback` is declared to return a `String`, and
+      `String` isn't a subtype of `int`:
+
+      ```dart
+      void f(Future<int> future, String Function(dynamic, StackTrace) callback) {
+        future.catchError([!callback!]);
+      }
+      ```
+
+      The following code produces this diagnostic because the closure being
+      passed to `catchError` returns an `int` while `future` is declared to
+      return a `String`:
+
+      ```dart
+      void f(Future<String> future) {
+        future.catchError((error, stackTrace) => [!3!]);
+      }
+      ```
+
+      #### Common fixes
+
+      If the instance of `Future` is declared correctly, then change the callback
+      to match:
+
+      ```dart
+      void f(Future<int> future, int Function(dynamic, StackTrace) callback) {
+        future.catchError(callback);
+      }
+      ```
+
+      If the declaration of the instance of `Future` is wrong, then change it to
+      match the callback:
+
+      ```dart
+      void f(Future<String> future, String Function(dynamic, StackTrace) callback) {
+        future.catchError(callback);
+      }
+      ```
+  INVALID_SEALED_ANNOTATION:
+    template: "The member '{0}' is annotated with '@sealed' but only classes can be annotated with it."
+    tip: Remove @sealed.
+    comment: |-
+      This hint is generated anywhere where `@sealed` annotates something other
+      than a class.
+
+      Parameters:
+      0: the name of the member
+  INVALID_USE_OF_INTERNAL_MEMBER:
+    template: "The member '{0}' can only be used within its package."
+    comment: |-
+      This hint is generated anywhere where a member annotated with `@internal`
+      is used outside of the package in which it is declared.
+
+      Parameters:
+      0: the name of the member
+  INVALID_USE_OF_PROTECTED_MEMBER:
+    template: "The member '{0}' can only be used within instance members of subclasses of '{1}'."
+    comment: |-
+      This hint is generated anywhere where a member annotated with `@protected`
+      is used outside of an instance member of a subclass.
+
+      Parameters:
+      0: the name of the member
+      1: the name of the defining class
+  INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
+    template: "The member '{0}' can only be used for overriding."
+    comment: |-
+      Parameters:
+      0: the name of the member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an instance member that is
+      annotated with `visibleForOverriding` is referenced outside the library in
+      which it's declared for any reason other than to override it.
+
+      #### Example
+
+      Given a file named `a.dart` containing the following declaration:
+
+      ```dart
+      %uri="lib/a.dart"
+      import 'package:meta/meta.dart';
+
+      class A {
+        @visibleForOverriding
+        void a() {}
+      }
+      ```
+
+      The following code produces this diagnostic because the method `m` is being
+      invoked even though the only reason it's public is to allow it to be
+      overridden:
+
+      ```dart
+      import 'a.dart';
+
+      class B extends A {
+        void b() {
+          [!a!]();
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the invalid use of the member.
+  INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
+    template: "The member '{0}' can only be used within '{1}' or a template library."
+    comment: |-
+      This hint is generated anywhere where a member annotated with
+      `@visibleForTemplate` is used outside of a "template" Dart file.
+
+      Parameters:
+      0: the name of the member
+      1: the name of the defining class
+  INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
+    template: "The member '{0}' can only be used within '{1}' or a test."
+    comment: |-
+      This hint is generated anywhere where a member annotated with
+      `@visibleForTesting` is used outside the defining library, or a test.
+
+      Parameters:
+      0: the name of the member
+      1: the name of the defining class
+  INVALID_VISIBILITY_ANNOTATION:
+    template: "The member '{0}' is annotated with '{1}', but this annotation is only meaningful on declarations of public members."
+    hasPublishedDocs: true
+    comment: |-
+      This hint is generated anywhere where a private declaration is annotated
+      with `@visibleForTemplate` or `@visibleForTesting`.
+
+      Parameters:
+      0: the name of the member
+      1: the name of the annotation
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when either the `@visibleForTemplate`
+      or `@visibleForTesting` annotation is applied to a non-public declaration.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@visibleForTesting!]
+      void _someFunction() {}
+
+      void f() => _someFunction();
+      ```
+
+      #### Common fixes
+
+      If the declaration doesn't need to be used by test code, then remove the
+      annotation:
+
+      ```dart
+      void _someFunction() {}
+
+      void f() => _someFunction();
+      ```
+
+      If it does, then make it public:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @visibleForTesting
+      void someFunction() {}
+
+      void f() => someFunction();
+      ```
+  INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
+    template: "The declaration '{0}' is annotated with 'visibleForOverriding'. Because '{0}' isn't an interface member that could be overridden, the annotation is meaningless."
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when anything other than a public
+      instance member of a class is annotated with `visibleForOverriding`.
+      Because only public instance members can be overridden outside the defining
+      library, there's no value to annotating any other declarations.
+
+      #### Example
+
+      The following code produces this diagnostic because the annotation is on a
+      class, and classes can't be overridden:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@visibleForOverriding!]
+      class C {}
+      ```
+
+      #### Common fixes
+
+      Remove the annotation:
+
+      ```dart
+      class C {}
+      ```
+  MISSING_JS_LIB_ANNOTATION:
+    template: The @JS() annotation can only be used if it is also declared on the library directive.
+    tip: Try adding the annotation to the library directive.
+    comment: |-
+      Generate a hint for an element that is annotated with `@JS(...)` whose
+      library declaration is not similarly annotated.
+  MISSING_REQUIRED_PARAM:
+    template: "The parameter '{0}' is required."
+    hasPublishedDocs: true
+    comment: |-
+      Generate a hint for a constructor, function or method invocation where a
+      required parameter is missing.
+
+      Parameters:
+      0: the name of the parameter
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function with a
+      named parameter that is annotated as being required is invoked without
+      providing a value for the parameter.
+
+      #### Examples
+
+      The following code produces this diagnostic because the named parameter `x`
+      is required:
+
+      ```dart
+      %language=2.9
+      import 'package:meta/meta.dart';
+
+      void f({@required int x}) {}
+
+      void g() {
+        [!f!]();
+      }
+      ```
+
+      #### Common fixes
+
+      Provide the required value:
+
+      ```dart
+      %language=2.9
+      import 'package:meta/meta.dart';
+
+      void f({@required int x}) {}
+
+      void g() {
+        f(x: 2);
+      }
+      ```
+  MISSING_REQUIRED_PARAM_WITH_DETAILS:
+    sharedName: MISSING_REQUIRED_PARAM
+    template: "The parameter '{0}' is required. {1}."
+    hasPublishedDocs: true
+    comment: |-
+      Generate a hint for a constructor, function or method invocation where a
+      required parameter is missing.
+
+      Parameters:
+      0: the name of the parameter
+      1: message details
+  MISSING_RETURN:
+    template: "This function has a return type of '{0}', but doesn't end with a return statement."
+    tip: "Try adding a return statement, or changing the return type to 'void'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the declared return type
+    documentation: |-
+      #### Description
+
+      Any function or method that doesn't end with either an explicit return or a
+      throw implicitly returns `null`. This is rarely the desired behavior. The
+      analyzer produces this diagnostic when it finds an implicit return.
+
+      #### Examples
+
+      The following code produces this diagnostic because `f` doesn't end with a
+      return:
+
+      ```dart
+      %language=2.9
+      int [!f!](int x) {
+        if (x < 0) {
+          return 0;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Add a `return` statement that makes the return value explicit, even if
+      `null` is the appropriate value.
+  MIXIN_ON_SEALED_CLASS:
+    template: "The class '{0}' shouldn't be used as a mixin constraint because it is sealed, and any class mixing in this mixin must have '{0}' as a superclass."
+    tip: Try composing with this class, or refer to its documentation for more information.
+    hasPublishedDocs: true
+    comment: |-
+      This hint is generated anywhere where a `@sealed` class is used as a
+      a superclass constraint of a mixin.
+
+      Parameters:
+      0: the name of the sealed class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the superclass constraint of a
+      mixin is a class from a different package that was marked as `@sealed`.
+      Classes that are sealed can't be extended, implemented, mixed in, or used
+      as a superclass constraint.
+
+      #### Examples
+
+      If the package `p` defines a sealed class:
+
+      ```dart
+      %uri="package:p/p.dart"
+      import 'package:meta/meta.dart';
+
+      @sealed
+      class C {}
+      ```
+
+      Then, the following code, when in a package other than `p`, produces this
+      diagnostic:
+
+      ```dart
+      import 'package:p/p.dart';
+
+      [!mixin M on C {}!]
+      ```
+
+      #### Common fixes
+
+      If the classes that use the mixin don't need to be subclasses of the sealed
+      class, then consider adding a field and delegating to the wrapped instance
+      of the sealed class.
+  MUST_BE_IMMUTABLE:
+    template: "This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: {0}"
+    hasPublishedDocs: true
+    comment: |-
+      Generate a hint for classes that inherit from classes annotated with
+      `@immutable` but that are not immutable.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an immutable class defines one
+      or more instance fields that aren't final. A class is immutable if it's
+      marked as being immutable using the annotation `@immutable` or if it's a
+      subclass of an immutable class.
+
+      #### Examples
+
+      The following code produces this diagnostic because the field `x` isn't
+      final:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @immutable
+      class [!C!] {
+        int x;
+
+        C(this.x);
+      }
+      ```
+
+      #### Common fixes
+
+      If instances of the class should be immutable, then add the keyword `final`
+      to all non-final field declarations:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @immutable
+      class C {
+        final int x;
+
+        C(this.x);
+      }
+      ```
+
+      If the instances of the class should be mutable, then remove the
+      annotation, or choose a different superclass if the annotation is
+      inherited:
+
+      ```dart
+      class C {
+        int x;
+
+        C(this.x);
+      }
+      ```
+  MUST_CALL_SUPER:
+    template: "This method overrides a method annotated as '@mustCallSuper' in '{0}', but doesn't invoke the overridden method."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the class declaring the overridden method
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method that overrides a method
+      that is annotated as `@mustCallSuper` doesn't invoke the overridden method
+      as required.
+
+      #### Examples
+
+      The following code produces this diagnostic because the method `m` in `B`
+      doesn't invoke the overridden method `m` in `A`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class A {
+        @mustCallSuper
+        m() {}
+      }
+
+      class B extends A {
+        @override
+        [!m!]() {}
+      }
+      ```
+
+      #### Common fixes
+
+      Add an invocation of the overridden method in the overriding method:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class A {
+        @mustCallSuper
+        m() {}
+      }
+
+      class B extends A {
+        @override
+        m() {
+          super.m();
+        }
+      }
+      ```
+  NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
+    sharedName: NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR
+    template: "This instance creation must be 'const', because the {0} constructor is marked as '@literal'."
+    tip: "Try replacing the 'new' keyword with 'const'."
+    hasPublishedDocs: true
+    comment: |-
+      Generate a hint for non-const instance creation (with the `new` keyword)
+      using a constructor annotated with `@literal`.
+
+      Parameters:
+      0: the name of the class defining the annotated constructor
+  NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR:
+    template: "This instance creation must be 'const', because the {0} constructor is marked as '@literal'."
+    tip: "Try adding a 'const' keyword."
+    hasPublishedDocs: true
+    comment: |-
+      Generate a hint for non-const instance creation using a constructor
+      annotated with `@literal`.
+
+      Parameters:
+      0: the name of the class defining the annotated constructor
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor that has the
+      `@literal` annotation is invoked without using the `const` keyword, but all
+      of the arguments to the constructor are constants. The annotation indicates
+      that the constructor should be used to create a constant value whenever
+      possible.
+
+      #### Examples
+
+      The following code produces this diagnostic:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @literal
+        const C();
+      }
+
+      C f() => [!C()!];
+      ```
+
+      #### Common fixes
+
+      Add the keyword `const` before the constructor invocation:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @literal
+        const C();
+      }
+
+      void f() => const C();
+      ```
+  NULLABLE_TYPE_IN_CATCH_CLAUSE:
+    template: "A potentially nullable type can't be used in an 'on' clause because it isn't valid to throw a nullable expression."
+    tip: Try using a non-nullable type.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the type following `on` in a
+      `catch` clause is a nullable type. It isn't valid to specify a nullable
+      type because it isn't possible to catch `null` (because it's a runtime
+      error to throw `null`).
+
+      #### Example
+
+      The following code produces this diagnostic because the exception type is
+      specified to allow `null` when `null` can't be thrown:
+
+      ```dart
+      void f() {
+        try {
+          // ...
+        } on [!FormatException?!] {
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the question mark from the type:
+
+      ```dart
+      void f() {
+        try {
+          // ...
+        } on FormatException {
+        }
+      }
+      ```
+  NULL_ARGUMENT_TO_NON_NULL_TYPE:
+    template: "'{0}' shouldn't be called with a null argument for the non-nullable type argument '{1}'."
+    tip: Try adding a non-null argument.
+    comment: |-
+      Parameters:
+      0: the name of the method being invoked
+      1: the type argument associated with the method
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when `null` is passed to either the
+      constructor `Future.value` or the method `Completer.complete` when the type
+      argument used to create the instance was non-nullable. Even though the type
+      system can't express this restriction, passing in a `null` results in a
+      runtime exception.
+
+      #### Example
+
+      The following code produces this diagnostic because `null` is being passed
+      to the constructor `Future.value` even though the type argument is the
+      non-nullable type `String`:
+
+      ```dart
+      Future<String> f() {
+        return Future.value([!null!]);
+      }
+      ```
+
+      #### Common fixes
+
+      Pass in a non-null value:
+
+      ```dart
+      Future<String> f() {
+        return Future.value('');
+      }
+      ```
+  NULL_AWARE_BEFORE_OPERATOR:
+    template: "The left operand uses '?.', so its value can be null."
+    comment: |-
+      When the left operand of a binary expression uses '?.' operator, it can be
+      `null`.
+  NULL_AWARE_IN_CONDITION:
+    template: "The value of the '?.' operator can be 'null', which isn't appropriate in a condition."
+    tip: "Try replacing the '?.' with a '.', testing the left-hand side for null if necessary."
+    comment: |-
+      A condition in a control flow statement could evaluate to `null` because it
+      uses the null-aware '?.' operator.
+  NULL_AWARE_IN_LOGICAL_OPERATOR:
+    template: "The value of the '?.' operator can be 'null', which isn't appropriate as an operand of a logical operator."
+    comment: |-
+      A condition in operands of a logical operator could evaluate to `null`
+      because it uses the null-aware '?.' operator.
+  NULL_CHECK_ALWAYS_FAILS:
+    template: "This null-check will always throw an exception because the expression will always evaluate to 'null'."
+    comment: |-
+      This hint indicates that a null literal is null-checked with `!`, but null
+      is never not null.
+  OVERRIDE_ON_NON_OVERRIDING_FIELD:
+    sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
+    template: "The field doesn't override an inherited getter or setter."
+    tip: Try updating this class to match the superclass, or removing the override annotation.
+    hasPublishedDocs: true
+    comment: |-
+      A field with the override annotation does not override a getter or setter.
+
+      No parameters.
+  OVERRIDE_ON_NON_OVERRIDING_GETTER:
+    sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
+    template: "The getter doesn't override an inherited getter."
+    tip: Try updating this class to match the superclass, or removing the override annotation.
+    hasPublishedDocs: true
+    comment: |-
+      A getter with the override annotation does not override an existing getter.
+
+      No parameters.
+  OVERRIDE_ON_NON_OVERRIDING_METHOD:
+    sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
+    template: "The method doesn't override an inherited method."
+    tip: Try updating this class to match the superclass, or removing the override annotation.
+    hasPublishedDocs: true
+    comment: |-
+      A method with the override annotation does not override an existing method.
+
+      No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class member is annotated with
+      the `@override` annotation, but the member isn’t declared in any of the
+      supertypes of the class.
+
+      #### Examples
+
+      The following code produces this diagnostic because `m` isn't declared in
+      any of the supertypes of `C`:
+
+      ```dart
+      class C {
+        @override
+        String [!m!]() => '';
+      }
+      ```
+
+      #### Common fixes
+
+      If the member is intended to override a member with a different name, then
+      update the member to have the same name:
+
+      ```dart
+      class C {
+        @override
+        String toString() => '';
+      }
+      ```
+
+      If the member is intended to override a member that was removed from the
+      superclass, then consider removing the member from the subclass.
+
+      If the member can't be removed, then remove the annotation.
+  OVERRIDE_ON_NON_OVERRIDING_SETTER:
+    sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
+    template: "The setter doesn't override an inherited setter."
+    tip: Try updating this class to match the superclass, or removing the override annotation.
+    hasPublishedDocs: true
+    comment: |-
+      A setter with the override annotation does not override an existing setter.
+
+      No parameters.
+  PACKAGE_IMPORT_CONTAINS_DOT_DOT:
+    template: "A package import shouldn't contain '..'."
+    comment: |-
+      It is a bad practice for a package import to reference anything outside the
+      given package, or more generally, it is bad practice for a package import
+      to contain a "..". For example, a source file should not contain a
+      directive such as `import 'package:foo/../some.dart'`.
+  RECEIVER_OF_TYPE_NEVER:
+    template: "The receiver is of type 'Never', and will never complete with a value."
+    tip: Try checking for throw expressions or type errors in the receiver
+    comment: |-
+      It is not an error to call or tear-off a method, setter, or getter, or to
+      read or write a field, on a receiver of static type `Never`.
+      Implementations that provide feedback about dead or unreachable code are
+      encouraged to indicate that any arguments to the invocation are
+      unreachable.
+
+      It is not an error to apply an expression of type `Never` in the function
+      position of a function call. Implementations that provide feedback about
+      dead or unreachable code are encouraged to indicate that any arguments to
+      the call are unreachable.
+
+      Parameters: none
+  RETURN_OF_DO_NOT_STORE:
+    template: "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless '{1}' is also annotated."
+    tip: "Annotate '{1}' with 'doNotStore'."
+    comment: |-
+      Users should not return values marked `@doNotStore` from functions,
+      methods or getters not marked `@doNotStore`.
+  SDK_VERSION_ASYNC_EXPORTED_FROM_CORE:
+    template: "The class '{0}' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions."
+    tip: "Try either importing 'dart:async' or updating the SDK constraints."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when either the class `Future` or
+      `Stream` is referenced in a library that doesn't import `dart:async` in
+      code that has an SDK constraint whose lower bound is less than 2.1.0. In
+      earlier versions, these classes weren't defined in `dart:core`, so the
+      import was necessary.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.1.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.0.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      void f([!Future!] f) {}
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the classes to be referenced:
+
+      ```yaml
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then import the
+      `dart:async` library.
+
+      ```dart
+      import 'dart:async';
+
+      void f(Future f) {}
+      ```
+  SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT:
+    template: "The use of an as expression in a constant expression wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an `as` expression inside a
+      [constant context][] is found in code that has an SDK constraint whose
+      lower bound is less than 2.3.2. Using an `as` expression in a
+      [constant context][] wasn't supported in earlier versions, so this code
+      won't be able to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.3.2:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces
+      this diagnostic:
+
+      ```dart
+      const num n = 3;
+      const int i = [!n as int!];
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the expression to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.3.2 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then either rewrite the
+      code to not use an `as` expression, or change the code so that the `as`
+      expression isn't in a [constant context][]:
+
+      ```dart
+      num x = 3;
+      int y = x as int;
+      ```
+  SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT:
+    template: "The use of the operator '{0}' for 'bool' operands in a constant context wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when any use of the `&`, `|`, or `^`
+      operators on the class `bool` inside a [constant context][] is found in
+      code that has an SDK constraint whose lower bound is less than 2.3.2. Using
+      these operators in a [constant context][] wasn't supported in earlier
+      versions, so this code won't be able to run against earlier versions of the
+      SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.3.2:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      const bool a = true;
+      const bool b = false;
+      const bool c = a [!&!] b;
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the operators to be used:
+
+      ```yaml
+      environment:
+       sdk: '>=2.3.2 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then either rewrite the
+      code to not use these operators, or change the code so that the expression
+      isn't in a [constant context][]:
+
+      ```dart
+      const bool a = true;
+      const bool b = false;
+      bool c = a & b;
+      ```
+  SDK_VERSION_CONSTRUCTOR_TEAROFFS:
+    template: "Tearing off a constructor requires the 'constructor-tearoffs' language feature."
+    tip: "Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'."
+    comment: |-
+      No parameters.
+
+      There is also a [ParserError.EXPERIMENT_NOT_ENABLED] code which catches
+      some cases of constructor tearoff features (like `List<int>.filled;`).
+      Other constructor tearoff cases are not realized until resolution
+      (like `List.filled;`).
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor tear-off is found
+      in code that has an SDK constraint whose lower bound is less than 2.15.
+      Constructor tear-offs weren't supported in earlier versions, so this code
+      won't be able to run against earlier versions of the SDK.
+
+      #### Example
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.15:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.9.0 <2.15.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      %language=2.14
+      var setConstructor = [!Set.identity!];
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the operator to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.15.0 <2.16.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not use constructor tear-offs:
+
+      ```dart
+      %language=2.14
+      var setConstructor = () => Set.identity();
+      ```
+  SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT:
+    template: "Using the operator '==' for non-primitive types wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the operator `==` is used on a
+      non-primitive type inside a [constant context][] is found in code that has
+      an SDK constraint whose lower bound is less than 2.3.2. Using this operator
+      in a [constant context][] wasn't supported in earlier versions, so this
+      code won't be able to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.3.2:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      %language=2.9
+      class C {}
+      const C a = null;
+      const C b = null;
+      const bool same = a [!==!] b;
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the operator to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.3.2 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then either rewrite the
+      code to not use the `==` operator, or change the code so that the
+      expression isn't in a [constant context][]:
+
+      ```dart
+      %language=2.9
+      class C {}
+      const C a = null;
+      const C b = null;
+      bool same = a == b;
+      ```
+  SDK_VERSION_EXTENSION_METHODS:
+    template: "Extension methods weren't supported until version 2.6.0, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an extension declaration or an
+      extension override is found in code that has an SDK constraint whose lower
+      bound is less than 2.6.0. Using extensions wasn't supported in earlier
+      versions, so this code won't be able to run against earlier versions of the
+      SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.6.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+       sdk: '>=2.4.0 <2.7.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces
+      this diagnostic:
+
+      ```dart
+      [!extension!] E on String {
+        void sayHello() {
+          print('Hello $this');
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the syntax to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.6.0 <2.7.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not make use of extensions. The most common way to do this is to rewrite
+      the members of the extension as top-level functions (or methods) that take
+      the value that would have been bound to `this` as a parameter:
+
+      ```dart
+      void sayHello(String s) {
+        print('Hello $s');
+      }
+      ```
+  SDK_VERSION_GT_GT_GT_OPERATOR:
+    template: "The operator '>>>' wasn't supported until version 2.14.0, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the operator `>>>` is used in
+      code that has an SDK constraint whose lower bound is less than 2.14.0. This
+      operator wasn't supported in earlier versions, so this code won't be able
+      to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.14.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+       sdk: '>=2.0.0 <2.15.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      int x = 3 [!>>>!] 4;
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the operator to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.14.0 <2.15.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not use the `>>>` operator:
+
+      ```dart
+      int x = logicalShiftRight(3, 4);
+
+      int logicalShiftRight(int leftOperand, int rightOperand) {
+        int divisor = 1 << rightOperand;
+        if (divisor == 0) {
+          return 0;
+        }
+        return leftOperand ~/ divisor;
+      }
+      ```
+  SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT:
+    template: "The use of an is expression in a constant context wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an `is` expression inside a
+      [constant context][] is found in code that has an SDK constraint whose
+      lower bound is less than 2.3.2. Using an `is` expression in a
+      [constant context][] wasn't supported in earlier versions, so this code
+      won't be able to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.3.2:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces
+      this diagnostic:
+
+      ```dart
+      const Object x = 4;
+      const y = [!x is int!] ? 0 : 1;
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the expression to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.3.2 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then either rewrite the
+      code to not use the `is` operator, or, if that isn't possible, change the
+      code so that the `is` expression isn't in a
+      [constant context][]:
+
+      ```dart
+      const Object x = 4;
+      var y = x is int ? 0 : 1;
+      ```
+  SDK_VERSION_NEVER:
+    template: "The type 'Never' wasn't supported until version 2.12.0, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a reference to the class `Never`
+      is found in code that has an SDK constraint whose lower bound is less than
+      2.12.0. This class wasn't defined in earlier versions, so this code won't
+      be able to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.12.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.5.0 <2.6.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      %language=2.9
+      [!Never!] n;
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the type to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.12.0 <2.13.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not reference this class:
+
+      ```dart
+      dynamic x;
+      ```
+  SDK_VERSION_SET_LITERAL:
+    template: "Set literals weren't supported until version 2.2, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a set literal is found in code
+      that has an SDK constraint whose lower bound is less than 2.2.0. Set
+      literals weren't supported in earlier versions, so this code won't be able
+      to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.2.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.1.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces this
+      diagnostic:
+
+      ```dart
+      var s = [!<int>{}!];
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the syntax to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.2.0 <2.4.0'
+      ```
+
+      If you do need to support older versions of the SDK, then replace the set
+      literal with code that creates the set without the use of a literal:
+
+      ```dart
+      var s = new Set<int>();
+      ```
+  SDK_VERSION_UI_AS_CODE:
+    template: "The for, if, and spread elements weren't supported until version 2.3.0, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a for, if, or spread element is
+      found in code that has an SDK constraint whose lower bound is less than
+      2.3.0. Using a for, if, or spread element wasn't supported in earlier
+      versions, so this code won't be able to run against earlier versions of the
+      SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.3.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.2.0 <2.4.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces
+      this diagnostic:
+
+      ```dart
+      var digits = [[!for (int i = 0; i < 10; i++) i!]];
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the syntax to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.3.0 <2.4.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not make use of those elements:
+
+      ```dart
+      var digits = _initializeDigits();
+
+      List<int> _initializeDigits() {
+        var digits = <int>[];
+        for (int i = 0; i < 10; i++) {
+          digits.add(i);
+        }
+        return digits;
+      }
+      ```
+  SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT:
+    template: "The if and spread elements weren't supported in constant expressions until version 2.5.0, but this code is required to be able to run on earlier versions."
+    tip: Try updating the SDK constraints.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an if or spread element inside
+      a [constant context][] is found in code that has an SDK constraint whose
+      lower bound is less than 2.5.0. Using an if or spread element inside a
+      [constant context][] wasn't supported in earlier versions, so this code
+      won't be able to run against earlier versions of the SDK.
+
+      #### Examples
+
+      Here's an example of a pubspec that defines an SDK constraint with a lower
+      bound of less than 2.5.0:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      environment:
+        sdk: '>=2.4.0 <2.6.0'
+      ```
+
+      In the package that has that pubspec, code like the following produces
+      this diagnostic:
+
+      ```dart
+      const a = [1, 2];
+      const b = [[!...a!]];
+      ```
+
+      #### Common fixes
+
+      If you don't need to support older versions of the SDK, then you can
+      increase the SDK constraint to allow the syntax to be used:
+
+      ```yaml
+      environment:
+        sdk: '>=2.5.0 <2.6.0'
+      ```
+
+      If you need to support older versions of the SDK, then rewrite the code to
+      not make use of those elements:
+
+      ```dart
+      const a = [1, 2];
+      const b = [1, 2];
+      ```
+
+      If that isn't possible, change the code so that the element isn't in a
+      [constant context][]:
+
+      ```dart
+      const a = [1, 2];
+      var b = [...a];
+      ```
+  STRICT_RAW_TYPE:
+    template: "The generic type '{0}' should have explicit type arguments but doesn't."
+    tip: "Use explicit type arguments for '{0}'."
+    comment: |-
+      When "strict-raw-types" is enabled, "raw types" must have type arguments.
+
+      A "raw type" is a type name that does not use inference to fill in missing
+      type arguments; instead, each type argument is instantiated to its bound.
+  SUBTYPE_OF_SEALED_CLASS:
+    template: "The class '{0}' shouldn't be extended, mixed in, or implemented because it's sealed."
+    tip: "Try composing instead of inheriting, or refer to the documentation of '{0}' for more information."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the sealed class
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a sealed class (one that either
+      has the `@sealed` annotation or inherits or mixes in a sealed class) is
+      referenced in either the `extends`, `implements`, or `with` clause of a
+      class or mixin declaration if the declaration isn't in the same package as
+      the sealed class.
+
+      #### Example
+
+      Given a library in a package other than the package being analyzed that
+      contains the following:
+
+      ```dart
+      %uri="package:a/a.dart"
+      import 'package:meta/meta.dart';
+
+      class A {}
+
+      @sealed
+      class B {}
+      ```
+
+      The following code produces this diagnostic because `C`, which isn't in the
+      same package as `B`, is extending the sealed class `B`:
+
+      ```dart
+      import 'package:a/a.dart';
+
+      [!class C extends B {}!]
+      ```
+
+      #### Common fixes
+
+      If the class doesn't need to be a subtype of the sealed class, then change
+      the declaration so that it isn't:
+
+      ```dart
+      import 'package:a/a.dart';
+
+      class B extends A {}
+      ```
+
+      If the class needs to be a subtype of the sealed class, then either change
+      the sealed class so that it's no longer sealed or move the subclass into
+      the same package as the sealed class.
+  TYPE_CHECK_IS_NOT_NULL:
+    sharedName: TYPE_CHECK_WITH_NULL
+    template: "Tests for non-null should be done with '!= null'."
+    tip: "Try replacing the 'is! Null' check with '!= null'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's a type check (using the
+      `as` operator) where the type is `Null`. There's only one value whose type
+      is `Null`, so the code is both more readable and more performant when it
+      tests for `null` explicitly.
+
+      #### Example
+
+      The following code produces this diagnostic because the code is testing to
+      see whether the value of `s` is `null` by using a type check:
+
+      ```dart
+      void f(String? s) {
+        if ([!s is Null!]) {
+          return;
+        }
+        print(s);
+      }
+      ```
+
+      The following code produces this diagnostic because the code is testing to
+      see whether the value of `s` is something other than `null` by using a type
+      check:
+
+      ```dart
+      void f(String? s) {
+        if ([!s is! Null!]) {
+          print(s);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the type check with the equivalent comparison with `null`:
+
+      ```dart
+      void f(String? s) {
+        if (s == null) {
+          return;
+        }
+        print(s);
+      }
+      ```
+  TYPE_CHECK_IS_NULL:
+    sharedName: TYPE_CHECK_WITH_NULL
+    template: "Tests for null should be done with '== null'."
+    tip: "Try replacing the 'is Null' check with '== null'."
+    hasPublishedDocs: true
+    comment: No parameters.
+  UNDEFINED_HIDDEN_NAME:
+    template: "The library '{0}' doesn't export a member with the hidden name '{1}'."
+    tip: Try removing the name from the list of hidden members.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the library being imported
+      1: the name in the hide clause that isn't defined in the library
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a hide combinator includes a
+      name that isn't defined by the library being imported.
+
+      #### Examples
+
+      The following code produces this diagnostic because `dart:math` doesn't
+      define the name `String`:
+
+      ```dart
+      import 'dart:math' hide [!String!], max;
+
+      var x = min(0, 1);
+      ```
+
+      #### Common fixes
+
+      If a different name should be hidden, then correct the name. Otherwise,
+      remove the name from the list:
+
+      ```dart
+      import 'dart:math' hide max;
+
+      var x = min(0, 1);
+      ```
+  UNDEFINED_REFERENCED_PARAMETER:
+    template: "The parameter '{0}' is not defined by '{1}'."
+    comment: |-
+      Parameters:
+      0: the name of the undefined parameter
+      1: the name of the targeted member
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an annotation of the form
+      `@UnusedResult.unless(parameterDefined: parameterName)` specifies a
+      parameter name that isn't defined by the annotated function.
+
+      #### Example
+
+      The following code produces this diagnostic because the function `f`
+      doesn't have a parameter named `b`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @UseResult.unless(parameterDefined: [!'b'!])
+      int f([int? a]) => a ?? 0;
+      ```
+
+      #### Common fixes
+
+      Change the argument named `parameterDefined` to match the name of one of
+      the parameters to the function:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @UseResult.unless(parameterDefined: 'a')
+      int f([int? a]) => a ?? 0;
+      ```
+  UNDEFINED_SHOWN_NAME:
+    template: "The library '{0}' doesn't export a member with the shown name '{1}'."
+    tip: Try removing the name from the list of shown members.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the library being imported
+      1: the name in the show clause that isn't defined in the library
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a show combinator includes a
+      name that isn't defined by the library being imported.
+
+      #### Examples
+
+      The following code produces this diagnostic because `dart:math` doesn't
+      define the name `String`:
+
+      ```dart
+      import 'dart:math' show min, [!String!];
+
+      var x = min(0, 1);
+      ```
+
+      #### Common fixes
+
+      If a different name should be shown, then correct the name. Otherwise,
+      remove the name from the list:
+
+      ```dart
+      import 'dart:math' show min;
+
+      var x = min(0, 1);
+      ```
+  UNIGNORABLE_IGNORE:
+    template: "The diagnostic '{0}' can't be ignored."
+    tip: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
+    comment: |-
+      Parameters:
+      0: the name of the non-diagnostic being ignored
+  UNNECESSARY_CAST:
+    template: Unnecessary cast.
+    tip: Try removing the cast.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value being cast is already
+      known to be of the type that it's being cast to.
+
+      #### Examples
+
+      The following code produces this diagnostic because `n` is already known to
+      be an `int` as a result of the `is` test:
+
+      ```dart
+      void f(num n) {
+        if (n is int) {
+          ([!n as int!]).isEven;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the unnecessary cast:
+
+      ```dart
+      void f(num n) {
+        if (n is int) {
+          n.isEven;
+        }
+      }
+      ```
+  UNNECESSARY_IGNORE:
+    template: "The diagnostic '{0}' isn't produced at this location so it doesn't need to be ignored."
+    tip: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
+    comment: |-
+      Parameters:
+      0: the name of the diagnostic being ignored
+  UNNECESSARY_IMPORT:
+    template: "The import of '{0}' is unnecessary because all of the used elements are also provided by the import of '{1}'."
+    tip: Try removing the import directive.
+    comment: |-
+      Parameters:
+      0: the uri that is not necessary
+      1: the uri that makes it unnecessary
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import isn't needed because
+      all of the names that are imported and referenced within the importing
+      library are also visible through another import.
+
+      #### Example
+
+      Given a file named `a.dart` that contains the following:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {}
+      ```
+
+      And, given a file named `b.dart` that contains the following:
+
+      ```dart
+      %uri="lib/b.dart"
+      export 'a.dart';
+
+      class B {}
+      ```
+
+      The following code produces this diagnostic because the class `A`, which is
+      imported from `a.dart`, is also imported from `b.dart`. Removing the import
+      of `a.dart` leaves the semantics unchanged:
+
+      ```dart
+      import [!'a.dart'!];
+      import 'b.dart';
+
+      void f(A a, B b) {}
+      ```
+
+      #### Common fixes
+
+      If the import isn't needed, then remove it.
+
+      If some of the names imported by this import are intended to be used but
+      aren't yet, and if those names aren't imported by other imports, then add
+      the missing references to those names.
+  UNNECESSARY_NO_SUCH_METHOD:
+    template: "Unnecessary 'noSuchMethod' declaration."
+    tip: "Try removing the declaration of 'noSuchMethod'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's a declaration of
+      `noSuchMethod`, the only thing the declaration does is invoke the
+      overridden declaration, and the overridden declaration isn't the
+      declaration in `Object`.
+
+      Overriding the implementation of `Object`'s `noSuchMethod` (no matter what
+      the implementation does) signals to the analyzer that it shouldn't flag any
+      inherited abstract methods that aren't implemented in that class. This
+      works even if the overriding implementation is inherited from a superclass,
+      so there's no value to declare it again in a subclass.
+
+      #### Example
+
+      The following code produces this diagnostic because the declaration of
+      `noSuchMethod` in `A` makes the declaration of `noSuchMethod` in `B`
+      unnecessary:
+
+      ```dart
+      class A {
+        @override
+        dynamic noSuchMethod(x) => super.noSuchMethod(x);
+      }
+      class B extends A {
+        @override
+        dynamic [!noSuchMethod!](y) {
+          return super.noSuchMethod(y);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the unnecessary declaration:
+
+      ```dart
+      class A {
+        @override
+        dynamic noSuchMethod(x) => super.noSuchMethod(x);
+      }
+      class B extends A {}
+      ```
+  UNNECESSARY_NULL_COMPARISON_FALSE:
+    sharedName: UNNECESSARY_NULL_COMPARISON
+    template: "The operand can't be null, so the condition is always false."
+    tip: Try removing the condition, an enclosing condition, or the whole conditional statement.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when it finds an equality comparison
+      (either `==` or `!=`) with one operand of `null` and the other operand
+      can't be `null`. Such comparisons are always either `true` or `false`, so
+      they serve no purpose.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` can never be
+      `null`, so the comparison always evaluates to `true`:
+
+      ```dart
+      void f(int x) {
+        if (x [!!= null!]) {
+          print(x);
+        }
+      }
+      ```
+
+      The following code produces this diagnostic because `x` can never be
+      `null`, so the comparison always evaluates to `false`:
+
+      ```dart
+      void f(int x) {
+        if (x [!== null!]) {
+          throw ArgumentError("x can't be null");
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the other operand should be able to be `null`, then change the type of
+      the operand:
+
+      ```dart
+      void f(int? x) {
+        if (x != null) {
+          print(x);
+        }
+      }
+      ```
+
+      If the other operand really can't be `null`, then remove the condition:
+
+      ```dart
+      void f(int x) {
+        print(x);
+      }
+      ```
+  UNNECESSARY_NULL_COMPARISON_TRUE:
+    sharedName: UNNECESSARY_NULL_COMPARISON
+    template: "The operand can't be null, so the condition is always true."
+    tip: Remove the condition.
+    hasPublishedDocs: true
+    comment: No parameters.
+  UNNECESSARY_QUESTION_MARK:
+    template: "The '?' is unnecessary because '{0}' is nullable without it."
+    comment: |-
+      Parameters:
+      0: the name of the type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when either the type `dynamic` or the
+      type `Null` is followed by a question mark. Both of these types are
+      inherently nullable so the question mark doesn't change the semantics.
+
+      #### Example
+
+      The following code produces this diagnostic because the question mark
+      following `dynamic` isn't necessary:
+
+      ```dart
+      dynamic[!?!] x;
+      ```
+
+      #### Common fixes
+
+      Remove the unneeded question mark:
+
+      ```dart
+      dynamic x;
+      ```
+  UNNECESSARY_TYPE_CHECK_FALSE:
+    sharedName: UNNECESSARY_TYPE_CHECK
+    template: "Unnecessary type check; the result is always 'false'."
+    tip: Try correcting the type check, or removing the type check.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of a type check (using
+      either `is` or `is!`) is known at compile time.
+
+      #### Example
+
+      The following code produces this diagnostic because the test `a is Object?`
+      is always `true`:
+
+      ```dart
+      bool f<T>(T a) => [!a is Object?!];
+      ```
+
+      #### Common fixes
+
+      If the type check doesn't check what you intended to check, then change the
+      test:
+
+      ```dart
+      bool f<T>(T a) => a is Object;
+      ```
+
+      If the type check does check what you intended to check, then replace the
+      type check with its known value or completely remove it:
+
+      ```dart
+      bool f<T>(T a) => true;
+      ```
+  UNNECESSARY_TYPE_CHECK_TRUE:
+    sharedName: UNNECESSARY_TYPE_CHECK
+    template: "Unnecessary type check; the result is always 'true'."
+    tip: Try correcting the type check, or removing the type check.
+    hasPublishedDocs: true
+    comment: No parameters.
+  UNUSED_CATCH_CLAUSE:
+    template: "The exception variable '{0}' isn't used, so the 'catch' clause can be removed."
+    tip: Try removing the catch clause.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the exception variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `catch` clause is found, and
+      neither the exception parameter nor the optional stack trace parameter are
+      used in the `catch` block.
+
+      #### Examples
+
+      The following code produces this diagnostic because `e` isn't referenced:
+
+      ```dart
+      void f() {
+        try {
+          int.parse(';');
+        } on FormatException catch ([!e!]) {
+          // ignored
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the unused `catch` clause:
+
+      ```dart
+      void f() {
+        try {
+          int.parse(';');
+        } on FormatException {
+          // ignored
+        }
+      }
+      ```
+  UNUSED_CATCH_STACK:
+    template: "The stack trace variable '{0}' isn't used and can be removed."
+    tip: Try removing the stack trace variable, or using it.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the stack trace variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the stack trace parameter in a
+      `catch` clause isn't referenced within the body of the `catch` block.
+
+      #### Examples
+
+      The following code produces this diagnostic because `stackTrace` isn't
+      referenced:
+
+      ```dart
+      void f() {
+        try {
+          // ...
+        } catch (exception, [!stackTrace!]) {
+          // ...
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If you need to reference the stack trace parameter, then add a reference to
+      it. Otherwise, remove it:
+
+      ```dart
+      void f() {
+        try {
+          // ...
+        } catch (exception) {
+          // ...
+        }
+      }
+      ```
+  UNUSED_ELEMENT:
+    template: "The declaration '{0}' isn't referenced."
+    tip: "Try removing the declaration of '{0}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name that is declared but not referenced
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a private declaration isn't
+      referenced in the library that contains the declaration. The following
+      kinds of declarations are analyzed:
+      - Private top-level declarations, such as classes, enums, mixins, typedefs,
+        top-level variables, and top-level functions
+      - Private static and instance methods
+      - Optional parameters of private functions for which a value is never
+        passed, even when the parameter doesn't have a private name
+
+      #### Examples
+
+      Assuming that no code in the library references `_C`, the following code
+      produces this diagnostic:
+
+      ```dart
+      class [!_C!] {}
+      ```
+
+      Assuming that no code in the library passes a value for `y` in any
+      invocation of `_m`, the following code produces this diagnostic:
+
+      ```dart
+      %language=2.9
+      class C {
+        void _m(int x, [int [!y!]]) {}
+
+        void n() => _m(0);
+      }
+      ```
+
+      #### Common fixes
+
+      If the declaration isn't needed, then remove it:
+
+      ```dart
+      class C {
+        void _m(int x) {}
+
+        void n() => _m(0);
+      }
+      ```
+
+      If the declaration is intended to be used, then add the code to use it.
+  UNUSED_ELEMENT_PARAMETER:
+    sharedName: UNUSED_ELEMENT
+    template: "A value for optional parameter '{0}' isn't ever given."
+    tip: Try removing the unused parameter.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the parameter that is declared but not used
+  UNUSED_FIELD:
+    template: "The value of the field '{0}' isn't used."
+    tip: Try removing the field, or using it.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the unused field
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a private field is declared but
+      never read, even if it's written in one or more places.
+
+      #### Examples
+
+      The following code produces this diagnostic because the field
+      `_originalValue` isn't read anywhere in the library:
+
+      ```dart
+      class C {
+        final String [!_originalValue!];
+        final String _currentValue;
+
+        C(this._originalValue) : _currentValue = _originalValue;
+
+        String get value => _currentValue;
+      }
+      ```
+
+      It might appear that the field `_originalValue` is being read in the
+      initializer (`_currentValue = _originalValue`), but that is actually a
+      reference to the parameter of the same name, not a reference to the field.
+
+      #### Common fixes
+
+      If the field isn't needed, then remove it.
+
+      If the field was intended to be used, then add the missing code.
+  UNUSED_IMPORT:
+    template: "Unused import: '{0}'."
+    tip: Try removing the import directive.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the content of the unused import's uri
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an import isn't needed because
+      none of the names that are imported are referenced within the importing
+      library.
+
+      #### Examples
+
+      The following code produces this diagnostic because nothing defined in
+      `dart:async` is referenced in the library:
+
+      ```dart
+      import [!'dart:async'!];
+
+      void main() {}
+      ```
+
+      #### Common fixes
+
+      If the import isn't needed, then remove it.
+
+      If some of the imported names are intended to be used, then add the missing
+      code.
+  UNUSED_LABEL:
+    template: "The label '{0}' isn't used."
+    tip: "Try removing the label, or using it in either a 'break' or 'continue' statement."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the label that isn't used
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a label that isn't used is
+      found.
+
+      #### Examples
+
+      The following code produces this diagnostic because the label `loop` isn't
+      referenced anywhere in the method:
+
+      ```dart
+      void f(int limit) {
+        [!loop:!] for (int i = 0; i < limit; i++) {
+          print(i);
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the label isn't needed, then remove it:
+
+      ```dart
+      void f(int limit) {
+        for (int i = 0; i < limit; i++) {
+          print(i);
+        }
+      }
+      ```
+
+      If the label is needed, then use it:
+
+      ```dart
+      void f(int limit) {
+        loop: for (int i = 0; i < limit; i++) {
+          print(i);
+          break loop;
+        }
+      }
+      ```
+      TODO(brianwilkerson) Highlight the identifier without the colon.
+  UNUSED_LOCAL_VARIABLE:
+    template: "The value of the local variable '{0}' isn't used."
+    tip: Try removing the variable or using it.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the unused variable
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a local variable is declared but
+      never read, even if it's written in one or more places.
+
+      #### Examples
+
+      The following code produces this diagnostic because the value of `count` is
+      never read:
+
+      ```dart
+      void main() {
+        int [!count!] = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If the variable isn't needed, then remove it.
+
+      If the variable was intended to be used, then add the missing code.
+  UNUSED_RESULT:
+    template: "The value of '{0}' should be used."
+    tip: Try using the result by invoking a member, passing it to a function, or returning it from this function.
+    comment: |-
+      Parameters:
+      0: the name of the annotated method, property or function
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a function annotated with
+      `useResult` is invoked, and the value returned by that function isn't used.
+      The value is considered to be used if a member of the value is invoked, if
+      the value is passed to another function, or if the value is assigned to a
+      variable or field.
+
+      #### Example
+
+      The following code produces this diagnostic because the invocation of
+      `c.a()` isn't used, even though the method `a` is annotated with
+      `useResult`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @useResult
+        int a() => 0;
+
+        int b() => 0;
+      }
+
+      void f(C c) {
+        c.[!a!]();
+      }
+      ```
+
+      #### Common fixes
+
+      If you intended to invoke the annotated function, then use the value that
+      was returned:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @useResult
+        int a() => 0;
+
+        int b() => 0;
+      }
+
+      void f(C c) {
+        print(c.a());
+      }
+      ```
+
+      If you intended to invoke a different function, then correct the name of
+      the function being invoked:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class C {
+        @useResult
+        int a() => 0;
+
+        int b() => 0;
+      }
+
+      void f(C c) {
+        c.b();
+      }
+      ```
+  UNUSED_RESULT_WITH_MESSAGE:
+    sharedName: UNUSED_RESULT
+    template: "'{0}' should be used. {1}."
+    tip: Try using the result by invoking a member, passing it to a function, or returning it from this function.
+    comment: |-
+      The result of invoking a method, property, or function annotated with
+      `@useResult` must be used (assigned, passed to a function as an argument,
+      or returned by a function).
+
+      Parameters:
+      0: the name of the annotated method, property or function
+      1: message details
+  UNUSED_SHOWN_NAME:
+    template: "The name {0} is shown, but isn’t used."
+    tip: Try removing the name from the list of shown members.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name that is shown but not used
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a show combinator includes a
+      name that isn't used within the library. Because it isn't referenced, the
+      name can be removed.
+
+      #### Examples
+
+      The following code produces this diagnostic because the function `max`
+      isn't used:
+
+      ```dart
+      import 'dart:math' show min, [!max!];
+
+      var x = min(0, 1);
+      ```
+
+      #### Common fixes
+
+      Either use the name or remove it:
+
+      ```dart
+      import 'dart:math' show min;
+
+      var x = min(0, 1);
+      ```
+  USE_OF_NATIVE_EXTENSION:
+    template: Dart native extensions are deprecated and aren’t available in Dart 2.15.
+    tip: "Try using dart:ffi for C interop."
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library is imported using the
+      `dart-ext` scheme.
+
+      #### Example
+
+      The following code produces this diagnostic because the native library `x`
+      is being imported using a scheme of `dart-ext`:
+
+      ```dart
+      [!import 'dart-ext:x';!]
+      int f() native 'string';
+      ```
+
+      #### Common fixes
+
+      Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
+      native library.
+LanguageCode:
+  IMPLICIT_DYNAMIC_FIELD:
+    template: "Missing field type for '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_FUNCTION:
+    template: "Missing type arguments for generic function '{0}<{1}>'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_INVOKE:
+    template: "Missing type arguments for calling generic function type '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_LIST_LITERAL:
+    template: Missing type argument for list literal.
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_MAP_LITERAL:
+    template: Missing type arguments for map literal.
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_METHOD:
+    template: "Missing type arguments for generic method '{0}<{1}>'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_PARAMETER:
+    template: "Missing parameter type for '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_RETURN:
+    template: "Missing return type for '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_TYPE:
+    template: "Missing type arguments for generic type '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+  IMPLICIT_DYNAMIC_VARIABLE:
+    template: "Missing variable type for '{0}'."
+    tip: Try adding an explicit type, or remove implicit-dynamic from your analysis options file.
+ManifestWarningCode:
+  CAMERA_PERMISSIONS_INCOMPATIBLE:
+    template: Camera permissions make app incompatible for Chrome OS, consider adding optional features "android.hardware.camera" and "android.hardware.camera.autofocus".
+    tip: "Try adding `<uses-feature android:name=\"android.hardware.camera\"  android:required=\"false\">` `<uses-feature android:name=\"android.hardware.camera.autofocus\"  android:required=\"false\">`."
+    comment: |-
+      A code indicating that the camera permissions is not supported on Chrome
+      OS.
+  NON_RESIZABLE_ACTIVITY:
+    template: The `<activity>` element should be allowed to be resized to allow users to take advantage of the multi-window environment on Chrome OS
+    tip: Consider declaring the corresponding activity element with `resizableActivity="true"` attribute.
+    comment: A code indicating that the activity is set to be non resizable.
+  NO_TOUCHSCREEN_FEATURE:
+    template: "The default \"android.hardware.touchscreen\" needs to be optional for Chrome OS. "
+    tip: "Consider adding <uses-feature android:name=\"android.hardware.touchscreen\" android:required=\"false\" /> to the manifest."
+    comment: |-
+      A code indicating that the touchscreen feature is not specified in the
+      manifest.
+  PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
+    template: "Permission makes app incompatible for Chrome OS, consider adding optional {0} feature tag, "
+    tip: " Try adding `<uses-feature android:name=\"{0}\"  android:required=\"false\">`."
+    comment: |-
+      A code indicating that a specified permission is not supported on Chrome
+      OS.
+  SETTING_ORIENTATION_ON_ACTIVITY:
+    template: The `<activity>` element should not be locked to any orientation so that users can take advantage of the multi-window environments and larger screens on Chrome OS
+    tip: Consider declaring the corresponding activity element with `screenOrientation="unspecified"` or `"fullSensor"` attribute.
+    comment: A code indicating that the activity is locked to an orientation.
+  UNSUPPORTED_CHROME_OS_FEATURE:
+    template: "The feature {0} is not supported on Chrome OS, consider making it optional."
+    tip: "Try changing to `android:required=\"false\"` for this feature."
+    comment: A code indicating that a specified feature is not supported on Chrome OS.
+  UNSUPPORTED_CHROME_OS_HARDWARE:
+    template: "The feature {0} is not supported on Chrome OS, consider making it optional."
+    tip: "Try adding `android:required=\"false\"` for this feature."
+    comment: |-
+      A code indicating that a specified hardware feature is not supported on
+      Chrome OS.
+ParserErrorCode:
+  ABSTRACT_CLASS_MEMBER:
+    copyFromCfe: true
+  ABSTRACT_ENUM:
+    template: "Enums can't be declared to be 'abstract'."
+    tip: "Try removing the keyword 'abstract'."
+  ABSTRACT_EXTERNAL_FIELD:
+    copyFromCfe: true
+  ABSTRACT_LATE_FIELD:
+    copyFromCfe: true
+  ABSTRACT_STATIC_FIELD:
+    copyFromCfe: true
+  ABSTRACT_STATIC_METHOD:
+    template: "Static methods can't be declared to be 'abstract'."
+    tip: "Try removing the keyword 'abstract'."
+  ABSTRACT_TOP_LEVEL_FUNCTION:
+    template: "Top-level functions can't be declared to be 'abstract'."
+    tip: "Try removing the keyword 'abstract'."
+  ABSTRACT_TOP_LEVEL_VARIABLE:
+    template: "Top-level variables can't be declared to be 'abstract'."
+    tip: "Try removing the keyword 'abstract'."
+  ABSTRACT_TYPEDEF:
+    template: "Typedefs can't be declared to be 'abstract'."
+    tip: "Try removing the keyword 'abstract'."
+  ANNOTATION_ON_TYPE_ARGUMENT:
+    copyFromCfe: true
+  ANNOTATION_WITH_TYPE_ARGUMENTS:
+    copyFromCfe: true
+  ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED:
+    copyFromCfe: true
+  ASYNC_KEYWORD_USED_AS_IDENTIFIER:
+    template: "The keywords 'await' and 'yield' can't be used as identifiers in an asynchronous or generator function."
+    comment: |-
+      16.32 Identifier Reference: It is a compile-time error if any of the
+      identifiers async, await, or yield is used as an identifier in a function
+      body marked with either async, async, or sync.
+  BINARY_OPERATOR_WRITTEN_OUT:
+    copyFromCfe: true
+  BREAK_OUTSIDE_OF_LOOP:
+    copyFromCfe: true
+  CATCH_SYNTAX:
+    copyFromCfe: true
+  CATCH_SYNTAX_EXTRA_PARAMETERS:
+    copyFromCfe: true
+  CLASS_IN_CLASS:
+    copyFromCfe: true
+  COLON_IN_PLACE_OF_IN:
+    copyFromCfe: true
+  CONFLICTING_MODIFIERS:
+    copyFromCfe: true
+  CONSTRUCTOR_WITH_RETURN_TYPE:
+    copyFromCfe: true
+  CONSTRUCTOR_WITH_TYPE_ARGUMENTS:
+    copyFromCfe: true
+  CONST_AND_FINAL:
+    copyFromCfe: true
+  CONST_CLASS:
+    copyFromCfe: true
+  CONST_CONSTRUCTOR_WITH_BODY:
+    template: "Const constructors can't have a body."
+    tip: "Try removing either the 'const' keyword or the body."
+  CONST_ENUM:
+    template: "Enums can't be declared to be 'const'."
+    tip: "Try removing the 'const' keyword."
+  CONST_FACTORY:
+    copyFromCfe: true
+  CONST_METHOD:
+    copyFromCfe: true
+  CONST_TYPEDEF:
+    template: "Type aliases can't be declared to be 'const'."
+    tip: "Try removing the 'const' keyword."
+  CONTINUE_OUTSIDE_OF_LOOP:
+    copyFromCfe: true
+  CONTINUE_WITHOUT_LABEL_IN_CASE:
+    copyFromCfe: true
+  COVARIANT_AND_STATIC:
+    copyFromCfe: true
+  COVARIANT_CONSTRUCTOR:
+    template: "A constructor can't be declared to be 'covariant'."
+    tip: "Try removing the keyword 'covariant'."
+  COVARIANT_MEMBER:
+    copyFromCfe: true
+  COVARIANT_TOP_LEVEL_DECLARATION:
+    template: "Top-level declarations can't be declared to be covariant."
+    tip: "Try removing the keyword 'covariant'."
+  DEFAULT_VALUE_IN_FUNCTION_TYPE:
+    template: "Parameters in a function type can't have default values."
+    tip: Try removing the default value.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a function type associated with
+      a parameter includes optional parameters that have a default value. This
+      isn't allowed because the default values of parameters aren't part of the
+      function's type, and therefore including them doesn't provide any value.
+
+      #### Example
+
+      The following code produces this diagnostic because the parameter `p` has a
+      default value even though it's part of the type of the parameter `g`:
+
+      ```dart
+      void f(void Function([int p [!=!] 0]) g) {
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the default value from the function-type's parameter:
+
+      ```dart
+      void f(void Function([int p]) g) {
+      }
+      ```
+  DEFERRED_AFTER_PREFIX:
+    copyFromCfe: true
+  DIRECTIVE_AFTER_DECLARATION:
+    copyFromCfe: true
+  DUPLICATED_MODIFIER:
+    copyFromCfe: true
+    comment: |-
+      Parameters:
+      0: the modifier that was duplicated
+  DUPLICATE_DEFERRED:
+    copyFromCfe: true
+  DUPLICATE_LABEL_IN_SWITCH_STATEMENT:
+    copyFromCfe: true
+    comment: |-
+      Parameters:
+      0: the label that was duplicated
+  DUPLICATE_PREFIX:
+    copyFromCfe: true
+  EMPTY_ENUM_BODY:
+    template: An enum must declare at least one constant name.
+    tip: Try declaring a constant.
+  ENUM_IN_CLASS:
+    copyFromCfe: true
+  EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
+    copyFromCfe: true
+  EXPECTED_BODY:
+    copyFromCfe: true
+  EXPECTED_CASE_OR_DEFAULT:
+    template: "Expected 'case' or 'default'."
+    tip: Try placing this code inside a case clause.
+  EXPECTED_CLASS_MEMBER:
+    template: Expected a class member.
+    tip: Try placing this code inside a class member.
+  EXPECTED_ELSE_OR_COMMA:
+    copyFromCfe: true
+  EXPECTED_EXECUTABLE:
+    template: Expected a method, getter, setter or operator declaration.
+    tip: This appears to be incomplete code. Try removing it or completing it.
+  EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD:
+    copyFromCfe: true
+  EXPECTED_INSTEAD:
+    copyFromCfe: true
+  EXPECTED_LIST_OR_MAP_LITERAL:
+    template: Expected a list or map literal.
+    tip: Try inserting a list or map literal, or remove the type arguments.
+  EXPECTED_STRING_LITERAL:
+    template: Expected a string literal.
+  EXPECTED_TOKEN:
+    template: "Expected to find '{0}'."
+    comment: |-
+      Parameters:
+      0: the token that was expected but not found
+  EXPECTED_TYPE_NAME:
+    template: Expected a type name.
+  EXPERIMENT_NOT_ENABLED:
+    copyFromCfe: true
+  EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+    copyFromCfe: true
+  EXTENSION_DECLARES_ABSTRACT_MEMBER:
+    copyFromCfe: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an abstract declaration is
+      declared in an extension. Extensions can declare only concrete members.
+
+      #### Examples
+
+      The following code produces this diagnostic because the method `a` doesn't
+      have a body:
+
+      ```dart
+      extension E on String {
+        int [!a!]();
+      }
+      ```
+
+      #### Common fixes
+
+      Either provide an implementation for the member or remove it.
+  EXTENSION_DECLARES_CONSTRUCTOR:
+    copyFromCfe: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor declaration is
+      found in an extension. It isn't valid to define a constructor because
+      extensions aren't classes, and it isn't possible to create an instance of
+      an extension.
+
+      #### Examples
+
+      The following code produces this diagnostic because there is a constructor
+      declaration in `E`:
+
+      ```dart
+      extension E on String {
+        [!E!]() : super();
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the constructor or replace it with a static method.
+  EXTENSION_DECLARES_INSTANCE_FIELD:
+    copyFromCfe: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an instance field declaration is
+      found in an extension. It isn't valid to define an instance field because
+      extensions can only add behavior, not state.
+
+      #### Examples
+
+      The following code produces this diagnostic because `s` is an instance
+      field:
+
+      ```dart
+      %language=2.9
+      extension E on String {
+        String [!s!];
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the field, make it a static field, or convert it to be a getter,
+      setter, or method.
+  EXTERNAL_CLASS:
+    copyFromCfe: true
+  EXTERNAL_CONSTRUCTOR_WITH_BODY:
+    copyFromCfe: true
+  EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER:
+    copyFromCfe: true
+  EXTERNAL_ENUM:
+    copyFromCfe: true
+  EXTERNAL_FACTORY_REDIRECTION:
+    copyFromCfe: true
+  EXTERNAL_FACTORY_WITH_BODY:
+    copyFromCfe: true
+  EXTERNAL_FIELD:
+    copyFromCfe: true
+  EXTERNAL_GETTER_WITH_BODY:
+    template: "External getters can't have a body."
+    tip: "Try removing the body of the getter, or removing the keyword 'external'."
+  EXTERNAL_LATE_FIELD:
+    copyFromCfe: true
+  EXTERNAL_METHOD_WITH_BODY:
+    copyFromCfe: true
+  EXTERNAL_OPERATOR_WITH_BODY:
+    template: "External operators can't have a body."
+    tip: "Try removing the body of the operator, or removing the keyword 'external'."
+  EXTERNAL_SETTER_WITH_BODY:
+    template: "External setters can't have a body."
+    tip: "Try removing the body of the setter, or removing the keyword 'external'."
+  EXTERNAL_TYPEDEF:
+    copyFromCfe: true
+  EXTRANEOUS_MODIFIER:
+    copyFromCfe: true
+  FACTORY_TOP_LEVEL_DECLARATION:
+    copyFromCfe: true
+  FACTORY_WITHOUT_BODY:
+    template: "A non-redirecting 'factory' constructor must have a body."
+    tip: Try adding a body to the constructor.
+  FACTORY_WITH_INITIALIZERS:
+    template: "A 'factory' constructor can't have initializers."
+    tip: "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers."
+  FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS:
+    copyFromCfe: true
+  FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
+    copyFromCfe: true
+  FINAL_AND_COVARIANT:
+    copyFromCfe: true
+  FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER:
+    copyFromCfe: true
+  FINAL_AND_VAR:
+    copyFromCfe: true
+  FINAL_CLASS:
+    template: "Classes can't be declared to be 'final'."
+    tip: "Try removing the keyword 'final'."
+  FINAL_CONSTRUCTOR:
+    template: "A constructor can't be declared to be 'final'."
+    tip: "Try removing the keyword 'final'."
+  FINAL_ENUM:
+    template: "Enums can't be declared to be 'final'."
+    tip: "Try removing the keyword 'final'."
+  FINAL_METHOD:
+    template: "Getters, setters and methods can't be declared to be 'final'."
+    tip: "Try removing the keyword 'final'."
+  FINAL_TYPEDEF:
+    template: "Typedefs can't be declared to be 'final'."
+    tip: "Try removing the keyword 'final'."
+  FUNCTION_TYPED_PARAMETER_VAR:
+    template: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
+    tip: Try replacing the keyword with a return type.
+  GETTER_CONSTRUCTOR:
+    copyFromCfe: true
+  GETTER_IN_FUNCTION:
+    template: "Getters can't be defined within methods or functions."
+    tip: Try moving the getter outside the method or function, or converting the getter to a function.
+  GETTER_WITH_PARAMETERS:
+    template: Getters must be declared without a parameter list.
+    tip: "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter."
+  ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE:
+    copyFromCfe: true
+  IMPLEMENTS_BEFORE_EXTENDS:
+    copyFromCfe: true
+  IMPLEMENTS_BEFORE_ON:
+    copyFromCfe: true
+  IMPLEMENTS_BEFORE_WITH:
+    copyFromCfe: true
+  IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+    copyFromCfe: true
+  INITIALIZED_VARIABLE_IN_FOR_EACH:
+    copyFromCfe: true
+  INVALID_AWAIT_IN_FOR:
+    copyFromCfe: true
+  INVALID_CODE_POINT:
+    template: "The escape sequence '{0}' isn't a valid code point."
+    comment: |-
+      Parameters:
+      0: the invalid escape sequence
+  INVALID_COMMENT_REFERENCE:
+    template: "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else."
+  INVALID_CONSTRUCTOR_NAME:
+    copyFromCfe: true
+  INVALID_GENERIC_FUNCTION_TYPE:
+    template: Invalid generic function type.
+    tip: "Try using a generic function type (returnType 'Function(' parameters ')')."
+  INVALID_HEX_ESCAPE:
+    copyFromCfe: true
+  INVALID_INITIALIZER:
+    copyFromCfe: true
+  INVALID_LITERAL_IN_CONFIGURATION:
+    template: "The literal in a configuration can't contain interpolation."
+    tip: Try removing the interpolation expressions.
+  INVALID_OPERATOR:
+    copyFromCfe: true
+    comment: |-
+      Parameters:
+      0: the operator that is invalid
+  INVALID_OPERATOR_FOR_SUPER:
+    template: "The operator '{0}' can't be used with 'super'."
+    comment: |-
+      Parameters:
+      0: the operator being applied to 'super'
+
+      Only generated by the old parser.
+      Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
+  INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER:
+    copyFromCfe: true
+  INVALID_STAR_AFTER_ASYNC:
+    template: "The modifier 'async*' isn't allowed for an expression function body."
+    tip: Try converting the body to a block.
+  INVALID_SUPER_IN_INITIALIZER:
+    copyFromCfe: true
+  INVALID_SYNC:
+    template: "The modifier 'sync' isn't allowed for an expression function body."
+    tip: Try converting the body to a block.
+  INVALID_THIS_IN_INITIALIZER:
+    copyFromCfe: true
+  INVALID_UNICODE_ESCAPE:
+    copyFromCfe: true
+  INVALID_USE_OF_COVARIANT_IN_EXTENSION:
+    copyFromCfe: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a member declared inside an
+      extension uses the keyword `covariant` in the declaration of a parameter.
+      Extensions aren't classes and don't have subclasses, so the keyword serves
+      no purpose.
+
+      #### Examples
+
+      The following code produces this diagnostic because `i` is marked as being
+      covariant:
+
+      ```dart
+      extension E on String {
+        void a([!covariant!] int i) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the `covariant` keyword:
+
+      ```dart
+      extension E on String {
+        void a(int i) {}
+      }
+      ```
+  LIBRARY_DIRECTIVE_NOT_FIRST:
+    copyFromCfe: true
+  LITERAL_WITH_CLASS:
+    copyFromCfe: true
+  LITERAL_WITH_CLASS_AND_NEW:
+    copyFromCfe: true
+  LITERAL_WITH_NEW:
+    copyFromCfe: true
+  LOCAL_FUNCTION_DECLARATION_MODIFIER:
+    template: "Local function declarations can't specify any modifiers."
+    tip: Try removing the modifier.
+  MEMBER_WITH_CLASS_NAME:
+    copyFromCfe: true
+  MISSING_ASSIGNABLE_SELECTOR:
+    copyFromCfe: true
+  MISSING_ASSIGNMENT_IN_INITIALIZER:
+    copyFromCfe: true
+  MISSING_CATCH_OR_FINALLY:
+    copyFromCfe: true
+  MISSING_CLOSING_PARENTHESIS:
+    template: The closing parenthesis is missing.
+    tip: Try adding the closing parenthesis.
+  MISSING_CONST_FINAL_VAR_OR_TYPE:
+    copyFromCfe: true
+  MISSING_ENUM_BODY:
+    template: An enum definition must have a body with at least one constant name.
+    tip: Try adding a body and defining at least one constant.
+  MISSING_EXPRESSION_IN_INITIALIZER:
+    template: Expected an expression after the assignment operator.
+    tip: Try adding the value to be assigned, or remove the assignment operator.
+  MISSING_EXPRESSION_IN_THROW:
+    copyFromCfe: true
+  MISSING_FUNCTION_BODY:
+    template: A function body must be provided.
+    tip: Try adding a function body.
+  MISSING_FUNCTION_KEYWORD:
+    template: "Function types must have the keyword 'Function' before the parameter list."
+    tip: "Try adding the keyword 'Function'."
+  MISSING_FUNCTION_PARAMETERS:
+    template: Functions must have an explicit list of parameters.
+    tip: Try adding a parameter list.
+  MISSING_GET:
+    template: "Getters must have the keyword 'get' before the getter name."
+    tip: "Try adding the keyword 'get'."
+  MISSING_IDENTIFIER:
+    template: Expected an identifier.
+  MISSING_INITIALIZER:
+    copyFromCfe: true
+  MISSING_KEYWORD_OPERATOR:
+    copyFromCfe: true
+  MISSING_METHOD_PARAMETERS:
+    template: Methods must have an explicit list of parameters.
+    tip: Try adding a parameter list.
+  MISSING_NAME_FOR_NAMED_PARAMETER:
+    template: Named parameters in a function type must have a name
+    tip: Try providing a name for the parameter or removing the curly braces.
+  MISSING_NAME_IN_LIBRARY_DIRECTIVE:
+    template: Library directives must include a library name.
+    tip: "Try adding a library name after the keyword 'library', or remove the library directive if the library doesn't have any parts."
+  MISSING_NAME_IN_PART_OF_DIRECTIVE:
+    template: Part-of directives must include a library name.
+    tip: "Try adding a library name after the 'of'."
+  MISSING_PREFIX_IN_DEFERRED_IMPORT:
+    copyFromCfe: true
+  MISSING_STAR_AFTER_SYNC:
+    template: "The modifier 'sync' must be followed by a star ('*')."
+    tip: Try removing the modifier, or add a star.
+  MISSING_STATEMENT:
+    copyFromCfe: true
+  MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
+    template: "There is no '{0}' to close the parameter group."
+    tip: "Try inserting a '{0}' at the end of the group."
+    comment: |-
+      Parameters:
+      0: the terminator that is missing
+  MISSING_TYPEDEF_PARAMETERS:
+    template: Typedefs must have an explicit list of parameters.
+    tip: Try adding a parameter list.
+  MISSING_VARIABLE_IN_FOR_EACH:
+    template: "A loop variable must be declared in a for-each loop before the 'in', but none was found."
+    tip: Try declaring a loop variable.
+  MIXED_PARAMETER_GROUPS:
+    template: "Can't have both positional and named parameters in a single parameter list."
+    tip: Try choosing a single style of optional parameters.
+  MIXIN_DECLARES_CONSTRUCTOR:
+    copyFromCfe: true
+  MODIFIER_OUT_OF_ORDER:
+    copyFromCfe: true
+  MULTIPLE_EXTENDS_CLAUSES:
+    copyFromCfe: true
+  MULTIPLE_IMPLEMENTS_CLAUSES:
+    template: Each class or mixin definition can have at most one implements clause.
+    tip: Try combining all of the implements clauses into a single clause.
+  MULTIPLE_LIBRARY_DIRECTIVES:
+    copyFromCfe: true
+  MULTIPLE_NAMED_PARAMETER_GROUPS:
+    template: "Can't have multiple groups of named parameters in a single parameter list."
+    tip: Try combining all of the groups into a single group.
+  MULTIPLE_ON_CLAUSES:
+    copyFromCfe: true
+  MULTIPLE_PART_OF_DIRECTIVES:
+    copyFromCfe: true
+  MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
+    template: "Can't have multiple groups of positional parameters in a single parameter list."
+    tip: Try combining all of the groups into a single group.
+  MULTIPLE_VARIABLES_IN_FOR_EACH:
+    template: "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found."
+    tip: Try moving all but one of the declarations inside the loop body.
+    comment: |-
+      Parameters:
+      0: the number of variables being declared
+  MULTIPLE_VARIANCE_MODIFIERS:
+    copyFromCfe: true
+  MULTIPLE_WITH_CLAUSES:
+    copyFromCfe: true
+  NAMED_FUNCTION_EXPRESSION:
+    template: "Function expressions can't be named."
+    tip: Try removing the name, or moving the function expression to a function declaration statement.
+  NAMED_FUNCTION_TYPE:
+    template: "Function types can't be named."
+    tip: "Try replacing the name with the keyword 'Function'."
+  NAMED_PARAMETER_OUTSIDE_GROUP:
+    template: "Named parameters must be enclosed in curly braces ('{' and '}')."
+    tip: Try surrounding the named parameters in curly braces.
+  NATIVE_CLAUSE_IN_NON_SDK_CODE:
+    template: Native clause can only be used in the SDK and code that is loaded through native extensions.
+    tip: Try removing the native clause.
+  NATIVE_CLAUSE_SHOULD_BE_ANNOTATION:
+    copyFromCfe: true
+  NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
+    template: Native functions can only be declared in the SDK and code that is loaded through native extensions.
+    tip: "Try removing the word 'native'."
+  NON_CONSTRUCTOR_FACTORY:
+    template: Only a constructor can be declared to be a factory.
+    tip: "Try removing the keyword 'factory'."
+  NON_IDENTIFIER_LIBRARY_NAME:
+    template: The name of a library must be an identifier.
+    tip: Try using an identifier as the name of the library.
+  NON_PART_OF_DIRECTIVE_IN_PART:
+    template: The part-of directive must be the only directive in a part.
+    tip: Try removing the other directives, or moving them to the library for which this is a part.
+  NON_STRING_LITERAL_AS_URI:
+    template: The URI must be a string literal.
+    tip: Try enclosing the URI in either single or double quotes.
+  NON_USER_DEFINABLE_OPERATOR:
+    template: "The operator '{0}' isn't user definable."
+    comment: |-
+      Parameters:
+      0: the operator that the user is trying to define
+  NORMAL_BEFORE_OPTIONAL_PARAMETERS:
+    template: Normal parameters must occur before optional parameters.
+    tip: Try moving all of the normal parameters before the optional parameters.
+  NULL_AWARE_CASCADE_OUT_OF_ORDER:
+    copyFromCfe: true
+  POSITIONAL_AFTER_NAMED_ARGUMENT:
+    template: Positional arguments must occur before named arguments.
+    tip: Try moving all of the positional arguments before the named arguments.
+  POSITIONAL_PARAMETER_OUTSIDE_GROUP:
+    template: "Positional parameters must be enclosed in square brackets ('[' and ']')."
+    tip: Try surrounding the positional parameters in square brackets.
+  PREFIX_AFTER_COMBINATOR:
+    copyFromCfe: true
+  REDIRECTING_CONSTRUCTOR_WITH_BODY:
+    copyFromCfe: true
+  REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR:
+    copyFromCfe: true
+  SETTER_CONSTRUCTOR:
+    copyFromCfe: true
+  SETTER_IN_FUNCTION:
+    template: "Setters can't be defined within methods or functions."
+    tip: Try moving the setter outside the method or function.
+  STACK_OVERFLOW:
+    copyFromCfe: true
+  STATIC_CONSTRUCTOR:
+    copyFromCfe: true
+  STATIC_GETTER_WITHOUT_BODY:
+    template: "A 'static' getter must have a body."
+    tip: "Try adding a body to the getter, or removing the keyword 'static'."
+  STATIC_OPERATOR:
+    copyFromCfe: true
+  STATIC_SETTER_WITHOUT_BODY:
+    template: "A 'static' setter must have a body."
+    tip: "Try adding a body to the setter, or removing the keyword 'static'."
+  STATIC_TOP_LEVEL_DECLARATION:
+    template: "Top-level declarations can't be declared to be static."
+    tip: "Try removing the keyword 'static'."
+  SWITCH_HAS_CASE_AFTER_DEFAULT_CASE:
+    copyFromCfe: true
+  SWITCH_HAS_MULTIPLE_DEFAULT_CASES:
+    copyFromCfe: true
+  TOP_LEVEL_OPERATOR:
+    copyFromCfe: true
+  TYPEDEF_IN_CLASS:
+    copyFromCfe: true
+  TYPE_ARGUMENTS_ON_TYPE_VARIABLE:
+    copyFromCfe: true
+  TYPE_BEFORE_FACTORY:
+    copyFromCfe: true
+  TYPE_PARAMETER_ON_CONSTRUCTOR:
+    copyFromCfe: true
+  TYPE_PARAMETER_ON_OPERATOR:
+    template: "Types parameters aren't allowed when defining an operator."
+    tip: Try removing the type parameters.
+    comment: |-
+      7.1.1 Operators: Type parameters are not syntactically supported on an
+      operator.
+  UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
+    template: "There is no '{0}' to open a parameter group."
+    tip: "Try inserting the '{0}' at the appropriate location."
+    comment: |-
+      Parameters:
+      0: the starting character that was missing
+  UNEXPECTED_TOKEN:
+    template: "Unexpected text '{0}'."
+    tip: Try removing the text.
+    comment: |-
+      Parameters:
+      0: the unexpected text that was found
+  VAR_AND_TYPE:
+    copyFromCfe: true
+  VAR_AS_TYPE_NAME:
+    copyFromCfe: true
+  VAR_CLASS:
+    template: "Classes can't be declared to be 'var'."
+    tip: "Try removing the keyword 'var'."
+  VAR_ENUM:
+    template: "Enums can't be declared to be 'var'."
+    tip: "Try removing the keyword 'var'."
+  VAR_RETURN_TYPE:
+    copyFromCfe: true
+  VAR_TYPEDEF:
+    template: "Typedefs can't be declared to be 'var'."
+    tip: "Try removing the keyword 'var', or replacing it with the name of the return type."
+  VOID_WITH_TYPE_ARGUMENTS:
+    copyFromCfe: true
+  WITH_BEFORE_EXTENDS:
+    copyFromCfe: true
+  WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
+    template: "The default value of a positional parameter should be preceded by '='."
+    tip: "Try replacing the ':' with '='."
+  WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
+    template: "Expected '{0}' to close parameter group."
+    tip: "Try replacing '{0}' with '{1}'."
+    comment: |-
+      Parameters:
+      0: the terminator that was expected
+      1: the terminator that was found
+PubspecWarningCode:
+  ASSET_DIRECTORY_DOES_NOT_EXIST:
+    template: "The asset directory '{0}' doesn't exist."
+    tip: Try creating the directory or fixing the path to the directory.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the path to the asset directory as given in the file.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an asset list contains a value
+      referencing a directory that doesn't exist.
+
+      #### Example
+
+      Assuming that the directory `assets` doesn't exist, the following code
+      produces this diagnostic because it's listed as a directory containing
+      assets:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets:
+          - assets/
+      ```
+
+      #### Common fixes
+
+      If the path is correct, then create a directory at that path.
+
+      If the path isn't correct, then change the path to match the path of the
+      directory containing the assets.
+  ASSET_DOES_NOT_EXIST:
+    template: "The asset file '{0}' doesn't exist."
+    tip: Try creating the file or fixing the path to the file.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the path to the asset as given in the file.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an asset list contains a value
+      referencing a file that doesn't exist.
+
+      #### Example
+
+      Assuming that the file `doesNotExist.gif` doesn't exist, the following code
+      produces this diagnostic because it's listed as an asset:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets:
+          - doesNotExist.gif
+      ```
+
+      #### Common fixes
+
+      If the path is correct, then create a file at that path.
+
+      If the path isn't correct, then change the path to match the path of the
+      file containing the asset.
+  ASSET_FIELD_NOT_LIST:
+    template: "The value of the 'asset' field is expected to be a list of relative file paths."
+    tip: Try converting the value to be a list of relative file paths.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of the `asset` key
+      isn't a list.
+
+      #### Example
+
+      The following code produces this diagnostic because the value of the assets
+      key is a string when a list is expected:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets: assets/
+      ```
+
+      #### Common fixes
+
+      Change the value of the asset list so that it's a list:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets:
+          - assets/
+      ```
+  ASSET_NOT_STRING:
+    template: Assets are required to be file paths (strings).
+    tip: Try converting the value to be a string.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an asset list contains a value
+      that isn't a string.
+
+      #### Example
+
+      The following code produces this diagnostic because the asset list contains
+      a map:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets:
+          - image.gif: true
+      ```
+
+      #### Common fixes
+
+      Change the asset list so that it only contains valid POSIX-style file
+      paths:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        assets:
+          - image.gif
+      ```
+  DEPENDENCIES_FIELD_NOT_MAP:
+    template: "The value of the '{0}' field is expected to be a map."
+    tip: Try converting the value to be a map.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of either the
+      `dependencies` or `dev_dependencies` key isn't a map.
+
+      #### Example
+
+      The following code produces this diagnostic because the value of the
+      top-level `dependencies` key is a list:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        - meta
+      ```
+
+      #### Common fixes
+
+      Use a map as the value of the `dependencies` key:
+
+      ```yaml
+      %uri='pubspec.yaml'
+      name: example
+      dependencies:
+        meta: ^1.0.2
+      ```
+  DEPRECATED_FIELD:
+    template: "The '{0}' field is no longer used and can be removed."
+    tip: Try removing the field.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a key is used in a
+      `pubspec.yaml` file that was deprecated. Unused keys take up space and
+      might imply semantics that are no longer valid.
+
+      #### Example
+
+      The following code produces this diagnostic because the `author` key is no
+      longer being used:
+
+      ```dart
+      %uri="pubspec.yaml"
+      name: example
+      author: 'Dash'
+      ```
+
+      #### Common fixes
+
+      Remove the deprecated key:
+
+      ```dart
+      %uri="pubspec.yaml"
+      name: example
+      ```
+  FLUTTER_FIELD_NOT_MAP:
+    template: "The value of the 'flutter' field is expected to be a map."
+    tip: Try converting the value to be a map.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of the `flutter` key
+      isn't a map.
+
+      #### Example
+
+      The following code produces this diagnostic because the value of the
+      top-level `flutter` key is a string:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter: true
+      ```
+
+      #### Common fixes
+
+      If you need to specify Flutter-specific options, then change the value to
+      be a map:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      flutter:
+        uses-material-design: true
+      ```
+
+      If you don't need to specify Flutter-specific options, then remove the
+      `flutter` key:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      ```
+  INVALID_DEPENDENCY:
+    template: "Publishable packages can't have '{0}' dependencies."
+    tip: "Try adding a 'publish_to: none' entry to mark the package as not for publishing or remove the {0} dependency."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the kind of dependency.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a package under either
+      `dependencies` or `dev_dependencies` is not a pub, `git`, or `path` based
+      dependency.
+
+      See [Package dependencies](https://dart.dev/tools/pub/dependencies) for
+      more information about the kind of dependencies that are supported.
+
+      #### Example
+
+      The following code produces this diagnostic because the dependency on the
+      package `transmogrify` is not a pub, `git`, or `path` based dependency:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        transmogrify:
+          hosted:
+            name: transmogrify
+            url: http://your-package-server.com
+          version: ^1.4.0
+      ```
+
+      #### Common fixes
+
+      If you want to publish your package to `pub.dev`, then change the
+      dependencies to ones that are supported by `pub`.
+
+      If you don't want to publish your package to `pub.dev`, then add a
+      `publish_to: none` entry to mark the package as one that isn't intended to
+      be published:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      publish_to: none
+      dependencies:
+        transmogrify:
+          hosted:
+            name: transmogrify
+            url: http://your-package-server.com
+          version: ^1.4.0
+      ```
+  MISSING_NAME:
+    template: "The 'name' field is required but missing."
+    tip: "Try adding a field named 'name'."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's no top-level `name` key.
+      The `name` key provides the name of the package, which is required.
+
+      #### Example
+
+      The following code produces this diagnostic because the package doesn't
+      have a name:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      dependencies:
+        meta: ^1.0.2
+      ```
+
+      #### Common fixes
+
+      Add the top-level key `name` with a value that's the name of the package:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        meta: ^1.0.2
+      ```
+  NAME_NOT_STRING:
+    template: "The value of the 'name' field is required to be a string."
+    tip: Try converting the value to be a string.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the top-level `name` key has a
+      value that isn't a string.
+
+      #### Example
+
+      The following code produces this diagnostic because the value following the
+      `name` key is a list:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name:
+        - example
+      ```
+
+      #### Common fixes
+
+      Replace the value with a string:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      ```
+  PATH_DOES_NOT_EXIST:
+    template: "The path '{0}' doesn't exist."
+    tip: Try creating the referenced path or using a path that exists.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the path to the dependency as given in the file.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a dependency has a `path` key
+      referencing a directory that doesn't exist.
+
+      #### Example
+
+      Assuming that the directory `doesNotExist` doesn't exist, the following
+      code produces this diagnostic because it's listed as the path of a package:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        local_package:
+          path: doesNotExist
+      ```
+
+      #### Common fixes
+
+      If the path is correct, then create a directory at that path.
+
+      If the path isn't correct, then change the path to match the path to the
+      root of the package.
+  PATH_NOT_POSIX:
+    template: "The path '{0}' isn't a POSIX-style path."
+    tip: Try converting the value to a POSIX-style path.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the path as given in the file.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a dependency has a `path` key
+      whose value is a string, but isn't a POSIX-style path.
+
+      #### Example
+
+      The following code produces this diagnostic because the path following the
+      `path` key is a Windows path:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        local_package:
+          path: E:\local_package
+      ```
+
+      #### Common fixes
+
+      Convert the path to a POSIX path.
+  PATH_PUBSPEC_DOES_NOT_EXIST:
+    template: "The directory '{0}' doesn't contain a pubspec."
+    tip: Try creating a pubspec in the referenced directory or using a path that has a pubspec.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the path to the dependency as given in the file.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a dependency has a `path` key
+      that references a directory that doesn't contain a `pubspec.yaml` file.
+
+      #### Example
+
+      Assuming that the directory `local_package` doesn't contain a file named
+      `pubspec.yaml`, the following code produces this diagnostic because it's
+      listed as the path of a package:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: example
+      dependencies:
+        local_package:
+          path: local_package
+      ```
+
+      #### Common fixes
+
+      If the path is intended to be the root of a package, then add a
+      `pubspec.yaml` file in the directory:
+
+      ```yaml
+      %uri="pubspec.yaml"
+      name: local_package
+      ```
+
+      If the path is wrong, then replace it with a the correct path.
+  UNNECESSARY_DEV_DEPENDENCY:
+    template: "The dev dependency on {0} is unnecessary because there is also a normal dependency on that package."
+    tip: Try removing the dev dependency.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the package in the dev_dependency list.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when there's an entry under
+      `dev_dependencies` for a package that is also listed under `dependencies`.
+      The packages under `dependencies` are available to all of the code in the
+      package, so there's no need to also list them under `dev_dependencies`.
+
+      #### Example
+
+      The following code produces this diagnostic because the package `meta` is
+      listed under both `dependencies` and `dev_dependencies`:
+
+      ```yaml
+      %uri='pubspec.yaml'
+      name: example
+      dependencies:
+        meta: ^1.0.2
+      dev_dependencies:
+        meta: ^1.0.2
+      ```
+
+      #### Common fixes
+
+      Remove the entry under `dev_dependencies` (and the `dev_dependencies` key
+      if that's the only package listed there):
+
+      ```yaml
+      %uri='pubspec.yaml'
+      name: example
+      dependencies:
+        meta: ^1.0.2
+      ```
+StaticWarningCode:
+  DEAD_NULL_AWARE_EXPRESSION:
+    template: "The left operand can't be null, so the right operand is never executed."
+    tip: Try removing the operator and the right operand.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic in two cases.
+
+      The first is when the left operand of an `??` operator can't be `null`.
+      The right operand is only evaluated if the left operand has the value
+      `null`, and because the left operand can't be `null`, the right operand is
+      never evaluated.
+
+      The second is when the left-hand side of an assignment using the `??=`
+      operator can't be `null`. The right-hand side is only evaluated if the
+      left-hand side has the value `null`, and because the left-hand side can't
+      be `null`, the right-hand side is never evaluated.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` can't be `null`:
+
+      ```dart
+      int f(int x) {
+        return x ?? [!0!];
+      }
+      ```
+
+      The following code produces this diagnostic because `f` can't be `null`:
+
+      ```dart
+      class C {
+        int f = -1;
+
+        void m(int x) {
+          f ??= [!x!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If the diagnostic is reported for an `??` operator, then remove the `??`
+      operator and the right operand:
+
+      ```dart
+      int f(int x) {
+        return x;
+      }
+      ```
+
+      If the diagnostic is reported for an assignment, and the assignment isn't
+      needed, then remove the assignment:
+
+      ```dart
+      class C {
+        int f = -1;
+
+        void m(int x) {
+        }
+      }
+      ```
+
+      If the assignment is needed, but should be based on a different condition,
+      then rewrite the code to use `=` and the different condition:
+
+      ```dart
+      class C {
+        int f = -1;
+
+        void m(int x) {
+          if (f < 0) {
+            f = x;
+          }
+        }
+      }
+      ```
+  INVALID_NULL_AWARE_OPERATOR:
+    template: "The receiver can't be null, so the null-aware operator '{0}' is unnecessary."
+    tip: "Try replacing the operator '{0}' with '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the null-aware operator that is invalid
+      1: the non-null-aware operator that can replace the invalid operator
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a null-aware operator (`?.`,
+      `?..`, `?[`, `?..[`, or `...?`) is used on a receiver that's known to be
+      non-nullable.
+
+      #### Example
+
+      The following code produces this diagnostic because `s` can't be `null`:
+
+      ```dart
+      int? getLength(String s) {
+        return s[!?.!]length;
+      }
+      ```
+
+      The following code produces this diagnostic because `a` can't be `null`:
+
+      ```dart
+      var a = [];
+      var b = [[!...?!]a];
+      ```
+
+      The following code produces this diagnostic because `s?.length` can't
+      return `null`:
+
+      ```dart
+      void f(String? s) {
+        s?.length[!?.!]isEven;
+      }
+      ```
+
+      The reason `s?.length` can't return `null` is because the null-aware
+      operator following `s` short-circuits the evaluation of both `length` and
+      `isEven` if `s` is `null`. In other words, if `s` is `null`, then neither
+      `length` nor `isEven` will be invoked, and if `s` is non-`null`, then
+      `length` can't return a `null` value. Either way, `isEven` can't be invoked
+      on a `null` value, so the null-aware operator is not necessary. See
+      [Understanding null safety](/null-safety/understanding-null-safety#smarter-null-aware-methods)
+      for more details.
+
+      The following code produces this diagnostic because `s` can't be `null`.
+
+      ```dart
+      void f(Object? o) {
+        var s = o as String;
+        s[!?.!]length;
+      }
+      ```
+
+      The reason `s` can't be null, despite the fact that `o` can be `null`, is
+      because of the cast to `String`, which is a non-nullable type. If `o` ever
+      has the value `null`, the cast will fail and the invocation of `length`
+      will not happen.
+
+      #### Common fixes
+
+      Replace the null-aware operator with a non-null-aware equivalent; for
+      example, change `?.` to  `.`:
+
+      ```dart
+      int getLength(String s) {
+        return s.length;
+      }
+      ```
+
+      (Note that the return type was also changed to be non-nullable, which might
+      not be appropriate in some cases.)
+  INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
+    sharedName: INVALID_NULL_AWARE_OPERATOR
+    template: "The receiver can't be null because of short-circuiting, so the null-aware operator '{0}' can't be used."
+    tip: "Try replacing the operator '{0}' with '{1}'."
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the null-aware operator that is invalid
+      1: the non-null-aware operator that can replace the invalid operator
+  INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED:
+    template: "Parameters can't override default values, this method overrides '{0}.{1}' where '{2}' has a different value."
+    tip: Try using the same default value in both methods.
+    comment: |-
+      7.1 Instance Methods: It is a static warning if an instance method
+      <i>m1</i> overrides an instance member <i>m2</i>, the signature of
+      <i>m2</i> explicitly specifies a default value for a formal parameter
+      <i>p</i> and the signature of <i>m1</i> specifies a different default value
+      for <i>p</i>.
+  INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL:
+    template: "Parameters can't override default values, this method overrides '{0}.{1}' where this positional parameter has a different value."
+    tip: Try using the same default value in both methods.
+    comment: |-
+      7.1 Instance Methods: It is a static warning if an instance method
+      <i>m1</i> overrides an instance member <i>m2</i>, the signature of
+      <i>m2</i> explicitly specifies a default value for a formal parameter
+      <i>p</i> and the signature of <i>m1</i> specifies a different default value
+      for <i>p</i>.
+  MISSING_ENUM_CONSTANT_IN_SWITCH:
+    template: "Missing case clause for '{0}'."
+    tip: Try adding a case clause for the missing constant, or adding a default clause.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the constant that is missing
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a `switch` statement for an enum
+      doesn't include an option for one of the values in the enumeration.
+
+      Note that `null` is always a possible value for an enum and therefore also
+      must be handled.
+
+      #### Examples
+
+      The following code produces this diagnostic because the enum constant `e2`
+      isn't handled:
+
+      ```dart
+      enum E { e1, e2 }
+
+      void f(E e) {
+        [!switch (e)!] {
+          case E.e1:
+            break;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      If there's special handling for the missing values, then add a `case`
+      clause for each of the missing values:
+
+      ```dart
+      enum E { e1, e2 }
+
+      void f(E e) {
+        switch (e) {
+          case E.e1:
+            break;
+          case E.e2:
+            break;
+        }
+      }
+      ```
+
+      If the missing values should be handled the same way, then add a `default`
+      clause:
+
+      ```dart
+      enum E { e1, e2 }
+
+      void f(E e) {
+        switch (e) {
+          case E.e1:
+            break;
+          default:
+            break;
+        }
+      }
+      ```
+      TODO(brianwilkerson) This documentation will need to be updated when NNBD
+       ships.
+  UNNECESSARY_NON_NULL_ASSERTION:
+    template: "The '!' will have no effect because the receiver can't be null."
+    tip: "Try removing the '!' operator."
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the operand of the `!` operator
+      can't be `null`.
+
+      #### Example
+
+      The following code produces this diagnostic because `x` can't be `null`:
+
+      ```dart
+      int f(int x) {
+        return x[!!!];
+      }
+      ```
+
+      #### Common fixes
+
+      Remove the null check operator (`!`):
+
+      ```dart
+      int f(int x) {
+        return x;
+      }
+      ```
+
diff --git a/pkg/analyzer/test/generated/constant_test.dart b/pkg/analyzer/test/generated/constant_test.dart
index eaad3c1..8bbf1fa 100644
--- a/pkg/analyzer/test/generated/constant_test.dart
+++ b/pkg/analyzer/test/generated/constant_test.dart
@@ -27,8 +27,7 @@
       return;
     }
     expect(
-      typeArguments.map(
-          (arg) => arg.toTypeValue()!.getDisplayString(withNullability: true)),
+      typeArguments.map((arg) => arg.getDisplayString(withNullability: true)),
       equals(typeArgumentNames),
     );
   }
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index 9facdf6..9044238 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -166,6 +166,32 @@
     );
   }
 
+  test_identical_functionReference_implicitTypeArgs_differentTypes() async {
+    await resolveTestCode('''
+void foo<T>(T a) {}
+const void Function(int) f = foo;
+const void Function(String) g = foo;
+const c = identical(f, g);
+''');
+    expect(
+      _evaluateConstant('c'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_functionReference_implicitTypeArgs_sameTypes() async {
+    await resolveTestCode('''
+void foo<T>(T a) {}
+const void Function(int) f = foo;
+const void Function(int) g = foo;
+const c = identical(f, g);
+''');
+    expect(
+      _evaluateConstant('c'),
+      _boolValue(true),
+    );
+  }
+
   test_identical_functionReference_uninstantiated_sameElement() async {
     await resolveTestCode('''
 void foo<T>(T a) {}
@@ -394,6 +420,21 @@
     expect(result.toIntValue(), 0xFF);
   }
 
+  test_visitConditionalExpression_instantiatedFunctionType_variable() async {
+    await resolveTestCode('''
+void f<T>(T p, {T? q}) {}
+
+const void Function<T>(T p) g = f;
+
+const bool b = false;
+const void Function(int p) h = b ? g : g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function(int, {int? q})');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
   test_visitFunctionReference_explicitTypeArgs_complexExpression() async {
     await resolveTestCode('''
 const b = true;
@@ -516,6 +557,18 @@
     _assertTypeArguments(result, null);
   }
 
+  test_visitPrefixedIdentifier_genericFunction_instantiated() async {
+    await resolveTestCode('''
+import '' as self;
+void f<T>(T a) {}
+const void Function(int) g = self.f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
   test_visitSimpleIdentifier_className() async {
     await resolveTestCode('''
 const a = C;
@@ -525,6 +578,76 @@
     expect(result.type, typeProvider.typeType);
     assertType(result.toTypeValue(), 'C*');
   }
+
+  test_visitSimpleIdentifier_genericFunction_instantiated() async {
+    await resolveTestCode('''
+void f<T>(T a) {}
+const void Function(int) g = f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
+  test_visitSimpleIdentifier_genericVariable_instantiated() async {
+    await resolveTestCode('''
+void f<T>(T a) {}
+const g = f;
+const void Function(int) h = g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitSimpleIdentifier_instantiatedFunctionType_field() async {
+    await resolveTestCode('''
+void f<T>(T a, {T? b}) {}
+
+class C {
+  static const void Function<T>(T a) g = f;
+  static const void Function(int a) h = g;
+}
+''');
+    var result = _evaluateConstantLocal('h')!;
+    assertType(result.type, 'void Function(int, {int? b})');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
+
+  test_visitSimpleIdentifier_instantiatedFunctionType_parameter() async {
+    await resolveTestCode('''
+void f<T>(T a, {T? b}) {}
+
+class C {
+  const C(void Function<T>(T a) g) : h = g;
+  final void Function(int a) h;
+}
+
+const c = C(f);
+''');
+    var result = _evaluateConstant('c');
+    var field = result.fields!['h']!;
+    assertType(field.type, 'void Function(int, {int? b})');
+    assertElement(field.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(field, ['int']);
+  }
+
+  test_visitSimpleIdentifier_instantiatedFunctionType_variable() async {
+    await resolveTestCode('''
+void f<T>(T a, {T? b}) {}
+
+const void Function<T>(T a) g = f;
+
+const void Function(int a) h = g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function(int, {int? b})');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, ['int']);
+  }
 }
 
 @reflectiveTest
@@ -1515,6 +1638,31 @@
     expect(result.toBoolValue(), true);
   }
 
+  test_visitPrefixedIdentifier_function() async {
+    await resolveTestCode('''
+import '' as self;
+void f(int a) {}
+const g = self.f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
+  test_visitPrefixedIdentifier_genericVariable_uninstantiated() async {
+    await resolveTestCode('''
+import '' as self;
+void f<T>(T a) {}
+const g = f;
+const h = self.g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function<T>(T)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
   test_visitPropertyAccess_fromExtension() async {
     await resolveTestCode('''
 extension ExtObject on Object {
@@ -1543,6 +1691,29 @@
     expect(result.toTypeValue(), typeProvider.dynamicType);
   }
 
+  test_visitSimpleIdentifier_function() async {
+    await resolveTestCode('''
+void f(int a) {}
+const g = f;
+''');
+    var result = _evaluateConstant('g');
+    assertType(result.type, 'void Function(int)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
+  test_visitSimpleIdentifier_genericVariable_uninstantiated() async {
+    await resolveTestCode('''
+void f<T>(T a) {}
+const g = f;
+const h = g;
+''');
+    var result = _evaluateConstant('h');
+    assertType(result.type, 'void Function<T>(T)');
+    assertElement(result.toFunctionValue(), findElement.topFunction('f'));
+    _assertTypeArguments(result, null);
+  }
+
   test_visitSimpleIdentifier_inEnvironment() async {
     await resolveTestCode(r'''
 const a = b;
@@ -1620,8 +1791,7 @@
       return;
     }
     expect(
-      typeArguments.map(
-          (arg) => arg.toTypeValue()!.getDisplayString(withNullability: true)),
+      typeArguments.map((arg) => arg.getDisplayString(withNullability: true)),
       equals(typeArgumentNames),
     );
   }
diff --git a/pkg/analyzer/tool/messages/error_code_info.dart b/pkg/analyzer/tool/messages/error_code_info.dart
index 56a4947..4a94bf8 100644
--- a/pkg/analyzer/tool/messages/error_code_info.dart
+++ b/pkg/analyzer/tool/messages/error_code_info.dart
@@ -93,8 +93,9 @@
   }
 }
 
-/// In-memory representation of error code information obtained from a
-/// `messages.yaml` file.
+/// In-memory representation of error code information obtained from either a
+/// `messages.yaml` file.  Supports both the analyzer and front_end message file
+/// formats.
 class ErrorCodeInfo {
   /// Pattern used by the front end to identify placeholders in error message
   /// strings.  TODO(paulberry): share this regexp (and the code for interpreting
@@ -106,6 +107,20 @@
   /// error codes that corresponds to this error code, if any.
   final List<String> analyzerCode;
 
+  /// If present, a documentation comment that should be associated with the
+  /// error in code generated output.
+  final String? comment;
+
+  /// `true` if this error should be copied from an error in the CFE.  The
+  /// purpose of this field is so that the documentation for the error can exist
+  /// in the analyzer's messages.yaml file but the error text can come from the
+  /// CFE's messages.yaml file.  TODO(paulberry): add support for documentation
+  /// to the CFE's messages.yaml file so that this isn't necessary.
+  final bool copyFromCfe;
+
+  /// If present, user-facing documentation for the error.
+  final String? documentation;
+
   /// `true` if diagnostics with this code have documentation for them that has
   /// been published.
   final bool hasPublishedDocs;
@@ -114,8 +129,16 @@
   /// in the analyzer's `fastaAnalyzerErrorCodes` table.
   final int? index;
 
-  /// The template for the error message.
-  final String template;
+  /// Indicates whether this error is caused by an unresolved identifier.
+  final bool isUnresolvedIdentifier;
+
+  /// If present, indicates that this error code has a special name for
+  /// presentation to the user, that is potentially shared with other error
+  /// codes.
+  final String? sharedName;
+
+  /// The template for the error message, or `null` if [copyFromCfe] is `true`.
+  final String? template;
 
   /// If the error code has an associated tip/correction message, the template
   /// for it.
@@ -123,18 +146,40 @@
 
   ErrorCodeInfo(
       {this.analyzerCode = const [],
+      this.comment,
+      this.copyFromCfe = false,
+      this.documentation,
       this.hasPublishedDocs = false,
       this.index,
-      required this.template,
-      this.tip});
+      this.isUnresolvedIdentifier = false,
+      this.sharedName,
+      this.template,
+      this.tip}) {
+    if (copyFromCfe) {
+      if (template != null) {
+        throw "Error codes marked `copyFromCfe: true` can't have a template.";
+      }
+    } else {
+      if (template == null) {
+        throw 'Error codes must have a template unless they are marked '
+            '`copyFromCfe: true`.';
+      }
+    }
+  }
 
   /// Decodes an [ErrorCodeInfo] object from its YAML representation.
   ErrorCodeInfo.fromYaml(Map<Object?, Object?> yaml)
       : this(
             analyzerCode: _decodeAnalyzerCode(yaml['analyzerCode']),
+            comment: yaml['comment'] as String?,
+            copyFromCfe: yaml['copyFromCfe'] as bool? ?? false,
+            documentation: yaml['documentation'] as String?,
             hasPublishedDocs: yaml['hasPublishedDocs'] as bool? ?? false,
             index: yaml['index'] as int?,
-            template: yaml['template'] as String,
+            isUnresolvedIdentifier:
+                yaml['isUnresolvedIdentifier'] as bool? ?? false,
+            sharedName: yaml['sharedName'] as String?,
+            template: yaml['template'] as String?,
             tip: yaml['tip'] as String?);
 
   /// Generates a dart declaration for this error code, suitable for inclusion
@@ -145,7 +190,8 @@
     out.writeln('$className(');
     out.writeln("'$errorCode',");
     final placeholderToIndexMap = _computePlaceholderToIndexMap();
-    out.writeln(json.encode(_convertTemplate(placeholderToIndexMap, template)));
+    out.writeln(
+        json.encode(_convertTemplate(placeholderToIndexMap, template!)));
     final tip = this.tip;
     if (tip is String) {
       out.write(',correction: ');
@@ -158,6 +204,20 @@
     return out.toString();
   }
 
+  /// Encodes this object into a YAML representation.
+  Map<Object?, Object?> toYaml() => {
+        if (copyFromCfe) 'copyFromCfe': true,
+        if (sharedName != null) 'sharedName': sharedName,
+        if (analyzerCode.isNotEmpty)
+          'analyzerCode': _encodeAnalyzerCode(analyzerCode),
+        if (template != null) 'template': template,
+        if (tip != null) 'tip': tip,
+        if (isUnresolvedIdentifier) 'isUnresolvedIdentifier': true,
+        if (hasPublishedDocs) 'hasPublishedDocs': true,
+        if (comment != null) 'comment': comment,
+        if (documentation != null) 'documentation': documentation,
+      };
+
   /// Given a messages.yaml entry, come up with a mapping from placeholder
   /// patterns in its message and tip strings to their corresponding indices.
   Map<String, int> _computePlaceholderToIndexMap() {
@@ -197,4 +257,12 @@
       throw 'Unrecognized analyzer code: $value';
     }
   }
+
+  static Object _encodeAnalyzerCode(List<String> analyzerCode) {
+    if (analyzerCode.length == 1) {
+      return analyzerCode.single;
+    } else {
+      return analyzerCode;
+    }
+  }
 }
diff --git a/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
new file mode 100644
index 0000000..f0c3790
--- /dev/null
+++ b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
@@ -0,0 +1,275 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+// This script extracts data from the analyzer classes derived from `ErrorCode`
+// (as well as the comments next to their declarations) and produces a
+// `messages.yaml` file capturing the same information.  In the future, we will
+// generate the `ErrorCode` derived classes from this `messages.yaml` file.
+//
+// TODO(paulberry): once code generation is in place, remove this script.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/analysis/utilities.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/dart/error/todo_codes.dart';
+import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer_utilities/package_root.dart' as pkg_root;
+import 'package:path/path.dart';
+import 'package:yaml/yaml.dart';
+
+import 'error_code_info.dart';
+
+main() {
+  var errorDeclarations = _findErrorDeclarations();
+  var generatedAnalyzerCodes = _computeGeneratedAnalyzerCodes();
+  var errorCodesByClass = _findErrorCodesByClass();
+  _generateYaml(errorCodesByClass, errorDeclarations, generatedAnalyzerCodes);
+}
+
+/// The path to the `analyzer` package.
+final String _analyzerPkgPath =
+    normalize(join(pkg_root.packageRoot, 'analyzer'));
+
+/// The path to the `analyzer` package.
+final String _frontEndPkgPath =
+    normalize(join(pkg_root.packageRoot, 'front_end'));
+
+/// Computes the set of `ParserErrorCode`s that are generated based on
+/// `pkg/front_end/messages.yaml`.
+Set<String> _computeGeneratedAnalyzerCodes() {
+  Map<dynamic, dynamic> messagesYaml = loadYaml(
+      File(join(_frontEndPkgPath, 'messages.yaml')).readAsStringSync());
+  var messages = decodeCfeMessagesYaml(messagesYaml);
+  var tables = CfeToAnalyzerErrorCodeTables(messages);
+  return tables.infoToAnalyzerCode.values.toSet();
+}
+
+/// Encodes [yaml] into a string parseable as YAML.
+///
+/// YAML is complex and we are just trying to do a good enough job for a one
+/// shot generation of a `messages.yaml` file, so instead of trying to
+/// exhaustively implement the YAML standard, we have a heuristic
+/// implementation, and then we double check that we can parse the result and
+/// get back the original data structures.
+String _encodeYaml(Map<Object?, Object?> yaml) {
+  var out = StringBuffer();
+  void visit(Map<Object?, Object?> yaml, String prefix) {
+    for (var entry in yaml.entries) {
+      var keyPart = '$prefix${entry.key}:';
+      var value = entry.value;
+      if (value is Map<Object?, Object?>) {
+        out.writeln(keyPart);
+        visit(value, '$prefix  ');
+      } else if (value is String) {
+        if (value.contains('\n')) {
+          if (value.trim() != value) {
+            throw 'TODO(paulberry): handle a string with leading or trailing '
+                'whitespace';
+          }
+          out.writeln('$keyPart |-');
+          var indented = value.replaceAll(RegExp('\n(?!\n)'), '\n$prefix  ');
+          out.writeln('$prefix  $indented');
+        } else if (value.contains('{') ||
+            value.contains(':') ||
+            value.contains("'") ||
+            value.trim() != value) {
+          out.writeln('$keyPart ${json.encode(value)}');
+        } else {
+          out.writeln('$keyPart $value');
+        }
+      } else if (value is bool) {
+        out.writeln('$keyPart $value');
+      } else {
+        throw 'TODO(paulberry): encode ${value.runtimeType}';
+      }
+    }
+  }
+
+  visit(yaml, '');
+  var result = out.toString();
+
+  // Double check that the result parses correctly.
+  try {
+    var parsedYaml = loadYaml(result);
+    if (json.encode(yaml) != json.encode(parsedYaml)) {
+      throw 'YAML did match after parsing';
+    }
+  } on Object {
+    print('=== Error in yaml file ===');
+    print(result);
+    print('===');
+    rethrow;
+  }
+  return result;
+}
+
+/// Extract comments from the parsed AST of a field declaration, so that we can
+/// include them in the YAML output.
+_CommentInfo _extractCommentInfo(FieldDeclaration fieldDeclaration) {
+  var firstToken = fieldDeclaration.metadata.beginToken ??
+      fieldDeclaration.firstTokenAfterCommentAndMetadata;
+  var commentToken = firstToken.precedingComments;
+  StringBuffer? documentationComment;
+  StringBuffer? otherComment;
+  while (commentToken != null) {
+    var lexeme = commentToken.lexeme;
+    if (lexeme.startsWith('///')) {
+      (documentationComment ??= StringBuffer())
+          .writeln(lexeme.replaceFirst(RegExp('/// ?'), '').trimRight());
+    } else if (lexeme.startsWith('/**')) {
+      (documentationComment ??= StringBuffer()).writeln(lexeme
+          .substring(0, lexeme.length - 2)
+          .replaceFirst(RegExp('/\\*\\*\n?'), '')
+          .replaceAll(RegExp(' *\\* ?'), '')
+          .trimRight());
+    } else if (lexeme.startsWith('//')) {
+      (otherComment ??= StringBuffer())
+          .writeln(lexeme.replaceFirst(RegExp('// ?'), '').trimRight());
+    } else if (lexeme.startsWith('/*')) {
+      (otherComment ??= StringBuffer()).writeln(lexeme
+          .substring(0, lexeme.length - 2)
+          .replaceFirst(RegExp('/\\*(\n| )?'), '')
+          .replaceAll(RegExp(' *(\\*|//) ?'), '')
+          .trimRight());
+    } else {
+      throw 'Unexpected comment type: ${json.encode(lexeme)}';
+    }
+    commentToken = commentToken.next as CommentToken?;
+  }
+  return _CommentInfo(
+      documentationComment: documentationComment?.toString().trim(),
+      otherComment: otherComment?.toString().trim());
+}
+
+/// Computes a map from class name to a list of all the error codes defined by
+/// that class.  Uses the analyzer's global variable `errorCodeValues` to find
+/// all the error codes.
+Map<String, List<ErrorCode>> _findErrorCodesByClass() {
+  var errorCodesByClass = <String, List<ErrorCode>>{};
+  for (var errorCode in errorCodeValues) {
+    if (errorCode is ScannerErrorCode) {
+      continue; // Will deal with later
+    }
+    if (errorCode is TodoCode) {
+      continue; // It's not worth converting these to YAML.
+    }
+    var className = errorCode.runtimeType.toString();
+    (errorCodesByClass[className] ??= []).add(errorCode);
+  }
+  return errorCodesByClass;
+}
+
+/// Finds all the variable declaration ASTs in the analyzer that might represent
+/// error codes.  The result is a two-tiered map, indexed first by class name
+/// and then by error code name.
+Map<String, Map<String, VariableDeclaration>> _findErrorDeclarations() {
+  var filePaths = [
+    join(_analyzerPkgPath, 'lib', 'src', 'analysis_options', 'error',
+        'option_codes.dart'),
+    join(_analyzerPkgPath, 'lib', 'src', 'dart', 'error', 'ffi_code.dart'),
+    join(_analyzerPkgPath, 'lib', 'src', 'dart', 'error', 'hint_codes.dart'),
+    join(_analyzerPkgPath, 'lib', 'src', 'dart', 'error',
+        'syntactic_errors.dart'),
+    join(_analyzerPkgPath, 'lib', 'src', 'error', 'codes.dart'),
+    join(_analyzerPkgPath, 'lib', 'src', 'manifest',
+        'manifest_warning_code.dart'),
+    join(
+        _analyzerPkgPath, 'lib', 'src', 'pubspec', 'pubspec_warning_code.dart'),
+  ];
+  var result = <String, Map<String, VariableDeclaration>>{};
+  for (var filePath in filePaths) {
+    var unit = parseFile(
+            path: filePath, featureSet: FeatureSet.latestLanguageVersion())
+        .unit;
+    for (var declaration in unit.declarations) {
+      if (declaration is! ClassDeclaration) continue;
+      var className = declaration.name.name;
+      for (var member in declaration.members) {
+        if (member is! FieldDeclaration) continue;
+        for (var variable in member.fields.variables) {
+          (result[className] ??= {})[variable.name.name] = variable;
+        }
+      }
+    }
+  }
+  return result;
+}
+
+/// Combines the information in [errorCodesByClass] (obtained from
+/// [_findErrorCodesByClass]) and [errorDeclarations] (obtained from
+/// [_findErrorDeclarations]) into a YAML representation of the errors, and
+/// prints the resulting YAML.
+void _generateYaml(
+    Map<String, List<ErrorCode>> errorCodesByClass,
+    Map<String, Map<String, VariableDeclaration>> errorDeclarations,
+    Set<String> generatedAnalyzerCodes) {
+  var yaml = <String, Map<String, Object?>>{};
+  for (var entry in errorCodesByClass.entries) {
+    var yamlCodes = <String, Object?>{};
+    var className = entry.key;
+    yaml[className] = yamlCodes;
+    entry.value.sort((a, b) => a.name.compareTo(b.name));
+    for (var code in entry.value) {
+      var name = code.name;
+      var uniqueName = code.uniqueName;
+      if (!uniqueName.startsWith('$className.')) {
+        throw 'Unexpected unique name ${json.encode(uniqueName)}';
+      }
+      var uniqueNameSuffix = uniqueName.substring(className.length + 1);
+      if (uniqueNameSuffix.contains('.')) {
+        throw 'Unexpected unique name ${json.encode(uniqueName)}';
+      }
+      var classDeclaration = errorDeclarations[className];
+      if (classDeclaration == null) {
+        throw 'Could not find class declaration for $className';
+      }
+      var declaration = classDeclaration[uniqueNameSuffix];
+      if (declaration == null) {
+        throw 'Could not find declaration for $className.$uniqueNameSuffix';
+      }
+      var variableDeclarationList =
+          declaration.parent as VariableDeclarationList;
+      var fieldDeclaration = variableDeclarationList.parent as FieldDeclaration;
+      var commentInfo = _extractCommentInfo(fieldDeclaration);
+      var documentationComment = commentInfo.documentationComment;
+      var otherComment = commentInfo.otherComment;
+      ErrorCodeInfo errorCodeInfo;
+      if (className == 'ParserErrorCode' &&
+          generatedAnalyzerCodes.contains(name)) {
+        if (uniqueNameSuffix != name) {
+          throw "Auto-generated parser error codes can't be aliased";
+        }
+        errorCodeInfo = ErrorCodeInfo(
+            copyFromCfe: true,
+            comment: documentationComment,
+            documentation: otherComment);
+      } else {
+        errorCodeInfo = ErrorCodeInfo(
+            sharedName: uniqueNameSuffix == name ? null : name,
+            template: code.message,
+            tip: code.correction,
+            isUnresolvedIdentifier: code.isUnresolvedIdentifier,
+            hasPublishedDocs: code.hasPublishedDocs,
+            comment: documentationComment,
+            documentation: otherComment);
+      }
+      yamlCodes[uniqueNameSuffix] = errorCodeInfo.toYaml();
+    }
+  }
+  String encodedYaml = _encodeYaml(yaml);
+  print(encodedYaml);
+}
+
+class _CommentInfo {
+  final String? documentationComment;
+
+  final String? otherComment;
+
+  _CommentInfo({this.documentationComment, this.otherComment});
+}
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 3aa0e3e..7c44d8d 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -171,7 +171,7 @@
     }
 
     String messageFromEntryTemplate(ErrorCodeInfo entry) {
-      String template = entry.template;
+      String template = entry.template!;
       String message = template.replaceAll(RegExp(r'#\w+'), '');
       return message;
     }
@@ -247,7 +247,7 @@
           // TODO(paulberry): handle multiple analyzer codes
           if (entry.index == null && entry.analyzerCode.length == 1) {
             analyzerCode = entry.analyzerCode.single;
-            template = entry.template;
+            template = entry.template!;
           }
         }
         print('  ${fastaErrorCode.padRight(30)} --> $analyzerCode'
diff --git a/tools/VERSION b/tools/VERSION
index c71b57b..3eb35a7 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 171
+PRERELEASE 172
 PRERELEASE_PATCH 0
\ No newline at end of file