# 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.

# Run
#
#     dart run pkg/analyzer/tool/messages/generate.dart
#
# to regenerate messages after having edited this file.

# This file is organized as a two level map, where the outer key corresponds to
# the name of an analyzer error class (e.g. CompileTimeErrorCode), and the inner
# key corresponds to the name of a static variable in that class, describing a
# single diagnostic message. Ideally, each entry contains three parts:
#
# 1. A message template (problemMessage).
#
# 2. A suggestion for how to correct the problem (correctionMessage).
#
# 3. User-facing documentation for the problem (documentation).
#
# A message shouldn't indicate which kind of diagnostic it is, for example,
# warning or error. This is implied by the analyzer error class. For example,
# all entries in `StaticWarningCode` are warnings.
#
# See the file [lib/src/fasta/diagnostics.md] for more details on how to write
# good diagnostic messages.
#
# A message used for internal errors should have key that starts with
# "InternalProblem". This way, UX review can prioritize it accordingly.
#
# Eventually, we'd like to have all diagnostics in one shared location. However,
# for now, we have analyzer error codes and CFE error codes in separate files.
# See `pkg/front_end/messages.yaml` for the CFE error codes.
#
# ## Parameter Substitution in problemMessage and correctionMessage
#
# The fields `problemMessage` and `correctionMessage` are subject to parameter
# substitution. When the compiler reports a problem, it may also specify a list
# of values to be substituted into the message. Parameters are declared using
# placeholders of the form `{INTEGER}`, e.g. `{0}` is the zeroth parameter.

AnalysisOptionsErrorCode:
  INCLUDED_FILE_PARSE_ERROR:
    problemMessage: "{3} in {0}({1}..{2})"
    hasPublishedDocs: false
    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:
    problemMessage: "{0}"
    hasPublishedDocs: false
    comment: |-
      An error code indicating that there is a syntactic error in the file.

      Parameters:
      0: the error message from the parse error
AnalysisOptionsHintCode:
  DEPRECATED_LINT:
    problemMessage: "'{0}' is a deprecated lint rule and should not be used."
    correctionMessage: Try removing '{0}'.
    hasPublishedDocs: false
    comment: |-
      A hint code indicating reference to a deprecated lint.

      Parameters:
      0: the rule name
  DEPRECATED_LINT_WITH_REPLACEMENT:
    problemMessage: "'{0}' is deprecated and should be replaced by '{1}'."
    correctionMessage: "Try replacing '{0}' with '{1}'."
    hasPublishedDocs: false
    comment: |-
      A hint code indicating reference to a deprecated lint.

      Parameters:
      0: the deprecated lint name
      1: the replacing rule name
  DUPLICATE_RULE:
    problemMessage: "The rule {0} is already specified and doesn't need to be specified again."
    correctionMessage: "Try removing all but one specification of the rule."
    hasPublishedDocs: false
    comment: |-
      Duplicate rules.

      Parameters:
      0: the rule name
AnalysisOptionsWarningCode:
  ANALYSIS_OPTION_DEPRECATED:
    problemMessage: "The option '{0}' is no longer supported."
    hasPublishedDocs: false
    comment: |
      An error code indicating that the given option is deprecated.

      Parameters:
      0: the option name
  ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
    sharedName: ANALYSIS_OPTION_DEPRECATED
    problemMessage: "The option '{0}' is no longer supported."
    correctionMessage: "Try using the new '{1}' option."
    hasPublishedDocs: false
    comment: |-
      An error code indicating that the given option is deprecated.

      Parameters:
      0: the option name
      1: the replacement option name
  INCLUDED_FILE_WARNING:
    problemMessage: "Warning in the included options file {0}({1}..{2}): {3}"
    hasPublishedDocs: false
    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:
    problemMessage: "The include file '{0}' in '{1}' can't be found when analyzing '{2}'."
    hasPublishedDocs: false
    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
  INCOMPATIBLE_LINT:
    problemMessage: "The rule '{0}' is incompatible with the rule '{1}'."
    correctionMessage: "Try removing one of the incompatible rules."
    hasPublishedDocs: false
    comment: |-
      An error code indicating an incompatible rule.

      Parameters:
      0: the rule name
      1: the incompatible rule
  INVALID_OPTION:
    problemMessage: "Invalid option specified for '{0}': {1}"
    hasPublishedDocs: false
    comment: |-
      An error code indicating that a plugin is being configured with an invalid
      value for an option and a detail message is provided.

      Parameters:
      0: the option name
      1: the detail message
  INVALID_SECTION_FORMAT:
    problemMessage: "Invalid format for the '{0}' section."
    hasPublishedDocs: false
    comment: |-
      An error code indicating an invalid format for an options file section.

      Parameters:
      0: the section name
  MULTIPLE_PLUGINS:
    problemMessage: "Multiple plugins can't be enabled."
    correctionMessage: "Remove all plugins following the first, '{0}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating multiple plugins have been specified as enabled.

      Parameters:
      0: the name of the first plugin
  RECURSIVE_INCLUDE_FILE:
    problemMessage: "The include file '{0}' in '{1}' includes itself recursively."
    correctionMessage: "Try changing the chain of 'include's to not re-include this file."
    hasPublishedDocs: false
    comment: |-
      An error code indicating a specified include file includes itself recursively.

      Parameters:
      0: the URI of the file to be included
      1: the path of the file containing the include directive
  REMOVED_LINT:
    problemMessage: "'{0}' was removed in Dart '{1}'"
    correctionMessage: "Remove the reference to '{0}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating a removed lint rule.

      Parameters:
      0: the rule name
      1: the SDK version in which the lint was removed
  REPLACED_LINT:
    problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'."
    correctionMessage: "Replace '{0}' with '{1}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating a removed lint rule.

      Parameters:
      0: the rule name
      1: the SDK version in which the lint was removed
      2: the name of a replacing lint
  UNDEFINED_LINT:
    problemMessage: "'{0}' is not a recognized lint rule."
    correctionMessage: "Try using the name of a recognized lint rule."
    hasPublishedDocs: false
    comment: |-
      An error code indicating an undefined lint rule.

      Parameters:
      0: the rule name
  UNRECOGNIZED_ERROR_CODE:
    problemMessage: "'{0}' isn't a recognized error code."
    hasPublishedDocs: false
    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:
    problemMessage: "The option '{1}' isn't supported by '{0}'."
    hasPublishedDocs: false
    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:
    problemMessage: "The option '{1}' isn't supported by '{0}'. Try using the only supported option: '{2}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating that a YAML section is being configured with an
      unsupported option where there is just one legal value.

      Parameters:
      0: the section name
      1: the unsupported option key
      2: the legal value
  UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
    problemMessage: "The option '{1}' isn't supported by '{0}'."
    correctionMessage: "Try using one of the supported options: {2}."
    hasPublishedDocs: false
    comment: |-
      An error code indicating that a YAML section is being configured with an
      unsupported option and legal options are provided.

      Parameters:
      0: the section name
      1: the unsupported option key
      2: legal values
  UNSUPPORTED_VALUE:
    problemMessage: "The value '{1}' isn't supported by '{0}'."
    correctionMessage: "Try using one of the supported options: {2}."
    hasPublishedDocs: false
    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
    problemMessage: "Abstract fields can't have initializers."
    correctionMessage: "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.

      #### Examples

      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:
    problemMessage: "Abstract fields can't have initializers."
    correctionMessage: "Try removing the initializer or the 'abstract' keyword."
    hasPublishedDocs: true
    comment: No parameters.
  ABSTRACT_SUPER_MEMBER_REFERENCE:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: "The name '{0}' is defined in the libraries '{1}' and '{2}'."
    correctionMessage: 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 `a.dart` containing

      ```dart
      %uri="lib/a.dart"
      class C {}
      ```

      And a file `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_TWO:
    sharedName: AMBIGUOUS_EXTENSION_MEMBER_ACCESS
    problemMessage: "A member named '{0}' is defined in '{1}' and '{2}', and neither is more specific."
    correctionMessage: 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 names 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.

      #### Example

      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_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE:
    sharedName: AMBIGUOUS_EXTENSION_MEMBER_ACCESS
    problemMessage: "A member named '{0}' is defined in {1}, and none are more specific."
    correctionMessage: 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 names of the declaring extensions
  AMBIGUOUS_IMPORT:
    problemMessage: "The name '{0}' is defined in the libraries {1}."
    correctionMessage: "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 names of the libraries 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.

      #### Example

      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:
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "This literal must be either a map or a set, but the elements don't have enough information for type inference to work."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The argument type '{0}' can't be assigned to the parameter type '{1}'. {2}"
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the actual argument type
      1: the name of the expected type
      2: additional information, if any, when problem is associated with records
    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.

      #### Example

      The following code produces this diagnostic because a `num` can't be
      assigned to a `String`:

      ```dart
      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
      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
      String f(String x) => x;
      String g(num y) => f(y.toString());
      ```

      Another approach is to add explicit type tests and fallback code:

      ```dart
      String f(String x) => x;
      String g(Object 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:
    problemMessage: "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:
    problemMessage: "Constant variables can't be assigned a value after initialization."
    correctionMessage: "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:
    problemMessage: "'{0}' can't be used as a setter because it's final."
    correctionMessage: "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`.

      #### Example

      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:
    problemMessage: "The final variable '{0}' can only be set once."
    correctionMessage: "Try making '{0}' non-final."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a local variable that was
      declared to be final is assigned after it was initialized.

      #### Example

      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:
    problemMessage: "There isn't a setter named '{0}' in class '{1}'."
    correctionMessage: Try correcting the name to reference an existing setter, or declare the setter.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the reference
      1: the name of the class
    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.

      #### Example

      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:
    problemMessage: "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:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: "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:
    problemMessage: The async for-in loop can only be used in an async function.
    correctionMessage: 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);
        }
      }
      ```
  AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT:
    problemMessage: The augmentation has an 'extends' clause, but an augmentation target already includes an 'extends' clause and it isn't allowed to be repeated or changed.
    correctionMessage: Try removing the 'extends' clause, either here or in the augmentation target.
  AUGMENTATION_MODIFIER_EXTRA:
    problemMessage: The augmentation has the '{0}' modifier that the declaration doesn't have.
    correctionMessage: Try removing the '{0}' modifier, or adding it to the declaration.
    comment: |-
      Parameters:
      0: the lexeme of the modifier.
  AUGMENTATION_MODIFIER_MISSING:
    problemMessage: The augmentation is missing the '{0}' modifier that the declaration has.
    correctionMessage: Try adding the '{0}' modifier, or removing it from the declaration.
    comment: |-
      Parameters:
      0: the lexeme of the modifier.
  AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND:
    problemMessage: Can't augment a {0} with a {1}.
    correctionMessage: Try changing the augmentation to match the declaration kind.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the declaration kind.
      1: the name of the augmentation kind.
  AUGMENTATION_TYPE_PARAMETER_BOUND:
    problemMessage: The augmentation type parameter must have the same bound as the corresponding type parameter of the declaration.
    correctionMessage: Try changing the augmentation to match the declaration type parameters.
    hasPublishedDocs: false
  AUGMENTATION_TYPE_PARAMETER_COUNT:
    problemMessage: The augmentation must have the same number of type parameters as the declaration.
    correctionMessage: Try changing the augmentation to match the declaration type parameters.
    hasPublishedDocs: false
  AUGMENTATION_TYPE_PARAMETER_NAME:
    problemMessage: The augmentation type parameter must have the same name as the corresponding type parameter of the declaration.
    correctionMessage: Try changing the augmentation to match the declaration type parameters.
    hasPublishedDocs: false
  AUGMENTATION_WITHOUT_DECLARATION:
    problemMessage: The declaration being augmented doesn't exist.
    correctionMessage: Try changing the augmentation to match an existing declaration.
    hasPublishedDocs: false
  AUGMENTED_EXPRESSION_IS_NOT_SETTER:
    problemMessage: The augmented declaration is not a setter, it can't be used to write a value.
    correctionMessage: Try assigning a value to a setter.
    hasPublishedDocs: false
  AUGMENTED_EXPRESSION_IS_SETTER:
    problemMessage: The augmented declaration is a setter, it can't be used to read a value.
    correctionMessage: Try assigning a value to the augmented setter.
    hasPublishedDocs: false
  AUGMENTED_EXPRESSION_NOT_OPERATOR:
    problemMessage: The enclosing augmentation doesn't augment the operator '{0}'.
    correctionMessage: Try augmenting or invoking the correct operator.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the lexeme of the operator.
  AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
    problemMessage: "The 'await' expression can't be used in a 'late' local variable's initializer."
    correctionMessage: "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:
    problemMessage: The await expression can only be used in an async function.
    correctionMessage: Try marking the function body with either 'async' or 'async*'.
    hasPublishedDocs: false
    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.)
  AWAIT_OF_INCOMPATIBLE_TYPE:
    problemMessage: "The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'."
    correctionMessage: Try removing the `await`, or updating the extension type to implement 'Future'.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type of the expression in
      an `await` expression is an extension type, and the extension type isn't a
      subclass of `Future`.

      #### Example

      The following code produces this diagnostic because the extension type `E`
      isn't a subclass of `Future`:

      ```dart
      extension type E(int i) {}

      void f(E e) async {
        [!await!] e;
      }
      ```

      #### Common fixes

      If the extension type is correctly defined, then remove the `await`:

      ```dart
      extension type E(int i) {}

      void f(E e) {
        e;
      }
      ```

      If the extension type is intended to be awaitable, then add `Future` (or a
      subtype of `Future`) to the `implements` clause (adding an `implements`
      clause if there isn't one already), and make the representation type
      match:

      ```dart
      extension type E(Future<int> i) implements Future<int> {}

      void f(E e) async {
        await e;
      }
      ```
  BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be implemented outside of its library because it's a base class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the base class being implemented
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an `extends`, `implements`,
      `with`, or `on` clause uses a class or mixin in a way that isn't allowed
      given the modifiers on that class or mixin's declaration.

      The message specifies how the declaration is being used and why it isn't
      allowed.

      #### Example

      Given a file `a.dart` that defines a base class `A`:

      ```dart
      %uri="lib/a.dart"
      base class A {}
      ```

      The following code produces this diagnostic because the class `B`
      implements the class `A`, but the `base` modifier prevents `A` from being
      implemented outside of the library where it's defined:

      ```dart
      import 'a.dart';

      final class B implements [!A!] {}
      ```

      #### Common fixes

      Use of this type is restricted outside of its declaring library. If a
      different, unrestricted type is available that can provide similar
      functionality, then replace the type:

      ```dart
      class B implements C {}
      class C {}
      ```

      If there isn't a different type that would be appropriate, then remove the
      type, and possibly the whole clause:

      ```dart
      class B {}
      ```
  BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The mixin '{0}' can't be implemented outside of its library because it's a base mixin."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the base mixin being implemented
  BODY_MIGHT_COMPLETE_NORMALLY:
    problemMessage: The body might complete normally, causing 'null' to be returned, but the return type, '{0}', is a potentially non-nullable type.
    correctionMessage: Try adding either a return or a throw statement at the end.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the return type
    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.

      #### Examples

      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 add an
      explicit return of `null` at the end of the method and change the
      return type so that it's valid to return `null`:

      ```dart
      class C<T> {
        T? m(T t) {
          print(t);
          return null;
        }
      }
      ```
  BREAK_LABEL_ON_SWITCH_MEMBER:
    problemMessage: 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
      %language=2.18
      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
      %language=2.18
      void f(int i) {
        switch (i) {
          l: case 0:
            break;
          case 1:
            continue l;
        }
      }
      ```
  BUILT_IN_IDENTIFIER_AS_TYPE:
    problemMessage: The built-in identifier '{0}' can't be used as a type.
    correctionMessage: 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.

      #### Example

      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
    problemMessage: "The built-in identifier '{0}' can't be used as an extension name."
    correctionMessage: 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_EXTENSION_TYPE_NAME:
    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
    problemMessage: "The built-in identifier '{0}' can't be used as an extension type name."
    correctionMessage: Try choosing a different name for the extension type.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the built-in identifier that is being used
  BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
    sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
    problemMessage: "The built-in identifier '{0}' can't be used as a prefix name."
    correctionMessage: 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
    problemMessage: "The built-in identifier '{0}' can't be used as a type name."
    correctionMessage: 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
    problemMessage: "The built-in identifier '{0}' can't be used as a type parameter name."
    correctionMessage: 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
    problemMessage: "The built-in identifier '{0}' can't be used as a typedef name."
    correctionMessage: 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:
    removedIn: "3.0"
    problemMessage: "The last statement of the 'case' should be 'break', 'continue', 'rethrow', 'return', or 'throw'."
    correctionMessage: 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`.

      #### Example

      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:
    problemMessage: "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
      %language=2.18
      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
      %language=2.18
      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:
    problemMessage: "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
      %language=2.18
      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:
    problemMessage: "The name '{0}' isn't a type, so it can't be used in an 'as' expression."
    correctionMessage: "Try changing the name to the name of an existing type, or creating a type with the name '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type
    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.

      #### Example

      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_USED_AS_MIXIN:
    problemMessage: "The class '{0}' can't be used as a mixin because it's neither a mixin class nor a mixin."
    comment: |-
      Parameters:
      0: the name of the class being used as a mixin
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that is neither a
      `mixin class` nor a `mixin` is used in a `with` clause.

      #### Example

      The following code produces this diagnostic because the class `M` is being
      used as a mixin, but it isn't defined as a `mixin class`:

      ```dart
      class M {}
      class C with [!M!] {}
      ```

      #### Common fixes

      If the class can be a pure mixin, then change `class` to `mixin`:

      ```dart
      mixin M {}
      class C with M {}
      ```

      If the class needs to be both a class and a mixin, then add `mixin`:

      ```dart
      mixin class M {}
      class C with M {}
      ```
  CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
    problemMessage: "The instance member '{0}' can't be accessed on a class instantiation."
    correctionMessage: Try changing the member name to the name of a constructor.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the member
  CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'."
    correctionMessage: "Try invoking a different constructor, or defining a constructor named '{1}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the class
      1: the name of the member
  CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
    sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
    problemMessage: "The static member '{0}' can't be accessed on a class instantiation."
    correctionMessage: Try removing the type arguments from the class name, or changing the member name to the name of a constructor.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the member
  NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
    problemMessage: Generative enum constructors must be 'const'.
    correctionMessage: Try adding the keyword 'const'.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum declaration contains a
      generative constructor that isn't marked as `const`.

      #### Example

      The following code produces this diagnostic because the constructor in `E`
      isn't marked as being `const`:

      ```dart
      enum E {
        e;

        [!E!]();
      }
      ```

      #### Common fixes

      Add the `const` keyword before the constructor:

      ```dart
      enum E {
        e;

        const E();
      }
      ```
  NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
    problemMessage: "Constant values from a deferred library can't be used as values in a 'const' list literal."
    correctionMessage: "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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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];
      ```
  NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
    problemMessage: "Constant values from a deferred library can't be used as keys in a 'const' map literal."
    correctionMessage: "Try removing the keyword 'const' from the map 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
    problemMessage: "Constant values from a deferred library can't be used as values in a 'const' map literal."
    correctionMessage: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
    hasPublishedDocs: true
    comment: No parameters.
  NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY:
    problemMessage: "Constant values from a deferred library can't be used as fields in a 'const' record literal."
    correctionMessage: "Try removing the keyword 'const' from the record literal or removing the keyword 'deferred' from the import."
    hasPublishedDocs: false
    comment: No parameters.
  PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY:
    problemMessage: Constant values from a deferred library can't be used in patterns.
    correctionMessage: Try removing the keyword 'deferred' from the import.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a pattern contains a value
      declared in a different library, and that library is imported using a
      deferred import. Constants are evaluated at compile time, but values from
      deferred libraries aren't available at compile time.

      For more information, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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 pattern
      `a.zero` is imported using a deferred import:

      ```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;
        }
      }
      ```
  RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA:
    problemMessage: "A record literal with exactly one positional field requires a trailing comma."
    correctionMessage: Try adding a trailing comma.
    hasPublishedDocs: true
  SET_ELEMENT_FROM_DEFERRED_LIBRARY:
    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
    problemMessage: "Constant values from a deferred library can't be used as values in a 'const' set literal."
    correctionMessage: "Try removing the keyword 'const' from the set literal or removing the keyword 'deferred' from the import."
    hasPublishedDocs: true
    comment: No parameters.
  CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
    problemMessage: "Concrete classes can't have 'Enum' as a superinterface."
    correctionMessage: Try specifying a different interface, or remove it from the list.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a concrete class indirectly has
      the class `Enum` as a superinterface.

      #### Example

      The following code produces this diagnostic because the concrete class `B`
      has `Enum` as a superinterface as a result of implementing `A`:

      ```dart
      abstract class A implements Enum {}

      class [!B!] implements A {}
      ```

      #### Common fixes

      If the implemented class isn't the class you intend to implement, then
      change it:

      ```dart
      abstract class A implements Enum {}

      class B implements C {}

      class C {}
      ```

      If the implemented class can be changed to not implement `Enum`, then do
      so:

      ```dart
      abstract class A {}

      class B implements A {}
      ```

      If the implemented class can't be changed to not implement `Enum`, then
      remove it from the `implements` clause:

      ```dart
      abstract class A implements Enum {}

      class B {}
      ```
  CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
    problemMessage: "'{0}' must have a method body because '{1}' isn't abstract."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "'{0}' can't be used to name both a constructor and a static field in this class."
    correctionMessage: 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.

      #### Examples

      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
    problemMessage: "'{0}' can't be used to name both a constructor and a static getter in this class."
    correctionMessage: 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
    problemMessage: "'{0}' can't be used to name both a constructor and a static method in this class."
    correctionMessage: 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
    problemMessage: "'{0}' can't be used to name both a constructor and a static setter in this class."
    correctionMessage: Try renaming either the constructor or the setter.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the constructor and setter
  CONFLICTING_FIELD_AND_METHOD:
    problemMessage: "Class '{0}' can't define field '{1}' and have method '{2}.{1}' with the same name."
    correctionMessage: "Try converting the getter to a method, or renaming the field to a name that doesn't conflict."
    hasPublishedDocs: false
    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:
    problemMessage: "The {0} '{1}' can't implement both '{2}' and '{3}' because the type arguments are different."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the kind of the element implementing the conflicting interface
      1: the name of the element implementing the conflicting interface
      2: the first conflicting type
      3: 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_INHERITED_METHOD_AND_SETTER:
    problemMessage: "The {0} '{1}' can't inherit both a method and a setter named '{2}'."
    hasPublishedDocs: false
    comment: |-
      10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
      error if the interface of `C` has an instance method named `n` and an
      instance setter with basename `n`.

      Parameters:
      0: the name of the enclosing element kind - class, extension type, etc
      1: the name of the enclosing element
      2: the name of the conflicting method / setter
  CONFLICTING_METHOD_AND_FIELD:
    problemMessage: "Class '{0}' can't define method '{1}' and have field '{2}.{1}' with the same name."
    correctionMessage: "Try converting the method to a getter, or renaming the method to a name that doesn't conflict."
    hasPublishedDocs: false
    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:
    problemMessage: "Class '{0}' can't define static member '{1}' and have instance member '{2}.{1}' with the same name."
    correctionMessage: "Try renaming the member to a name that doesn't conflict."
    hasPublishedDocs: false
    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
    problemMessage: "'{0}' can't be used to name both a type parameter and the class in which the type parameter is defined."
    correctionMessage: Try renaming either the type parameter or the class.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
    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_ENUM:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
    problemMessage: "'{0}' can't be used to name both a type parameter and the enum in which the type parameter is defined."
    correctionMessage: Try renaming either the type parameter or the enum.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_EXTENSION:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
    problemMessage: "'{0}' can't be used to name both a type parameter and the extension in which the type parameter is defined."
    correctionMessage: Try renaming either the type parameter or the extension.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
    problemMessage: "'{0}' can't be used to name both a type parameter and the extension type in which the type parameter is defined."
    correctionMessage: Try renaming either the type parameter or the extension.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_MIXIN:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
    problemMessage: "'{0}' can't be used to name both a type parameter and the mixin in which the type parameter is defined."
    correctionMessage: Try renaming either the type parameter or the mixin.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
    problemMessage: "'{0}' can't be used to name both a type parameter and a member in this class."
    correctionMessage: Try renaming either the type parameter or the member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
    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
    problemMessage: "'{0}' can't be used to name both a type parameter and a member in this mixin."
    correctionMessage: Try renaming either the type parameter or the member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
    problemMessage: "'{0}' can't be used to name both a type parameter and a member in this enum."
    correctionMessage: Try renaming either the type parameter or the member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
    problemMessage: "'{0}' can't be used to name both a type parameter and a member in this extension."
    correctionMessage: Try renaming either the type parameter or the member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE:
    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
    problemMessage: "'{0}' can't be used to name both a type parameter and a member in this extension type."
    correctionMessage: Try renaming either the type parameter or the member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
    problemMessage: "In a const constructor, a value of type '{0}' can't be assigned to the field '{1}', which has type '{2}'."
    correctionMessage: "Try using a subtype, or removing the keyword 'const'."
    hasPublishedDocs: false
    comment: |-
      16.12.2 Const: It is a compile-time error if evaluation of a constant
      object results in an uncaught exception being thrown.

      Parameters:
      0: the type of the runtime value of the argument
      1: the name of the field
      2: the type of the field
  CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY:
    sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
    problemMessage: "Constant values from a deferred library can't be used as values in a 'const' constructor."
    correctionMessage: "Try removing the keyword 'const' from the constructor or removing the keyword 'deferred' from the import."
    hasPublishedDocs: true
    comment: No parameters.
  CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
    problemMessage: "A value of type '{0}' can't be assigned to a parameter of type '{1}' in a const constructor."
    correctionMessage: "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:
    problemMessage: "Const constructors can't throw exceptions."
    correctionMessage: "Try removing the throw statement, or removing the keyword 'const'."
    hasPublishedDocs: false
    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:
    problemMessage: "Can't define the 'const' constructor because the field '{0}' is initialized with a non-constant value."
    correctionMessage: "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
      String x = '3';
      class C {
        final String s = x;
        [!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
      String x = '3';
      class C {
        final String s = x;
        C();
      }
      ```
  CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
    problemMessage: "This constructor can't be declared 'const' because a mixin adds the instance field: {0}."
    correctionMessage: "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the field from the mixin class."
    hasPublishedDocs: false
    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
    problemMessage: "This constructor can't be declared 'const' because the mixins add the instance fields: {0}."
    correctionMessage: "Try removing the 'const' keyword or removing the 'with' clause from the class declaration, or removing the fields from the mixin classes."
    hasPublishedDocs: false
    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:
    problemMessage: "A constant constructor can't call a non-constant super constructor of '{0}'."
    correctionMessage: "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:
    problemMessage: "Can't define a const constructor for a class with non-final fields."
    correctionMessage: "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).

      #### Example

      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:
    problemMessage: "Deferred classes can't be created with 'const'."
    correctionMessage: "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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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_ASSERTION_FAILURE:
    problemMessage: "The assertion in this constant expression failed."
    hasPublishedDocs: false
  CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE:
    problemMessage: "An assertion failed with message '{0}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the message of the assertion
  CONST_EVAL_EXTENSION_METHOD:
    problemMessage: "Extension methods can't be used in constant expressions."
    hasPublishedDocs: false
  CONST_EVAL_EXTENSION_TYPE_METHOD:
    problemMessage: "Extension type methods can't be used in constant expressions."
    hasPublishedDocs: false
  CONST_EVAL_FOR_ELEMENT:
    problemMessage: "Constant expressions don't support 'for' elements."
    correctionMessage: "Try replacing the 'for' element with a spread, or removing 'const'."
    hasPublishedDocs: false
  CONST_EVAL_PROPERTY_ACCESS:
    problemMessage: "The property '{0}' can't be accessed on the type '{1}' in a constant expression."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the property being accessed
      1: the type with the property being accessed
  CONST_EVAL_METHOD_INVOCATION:
    problemMessage: "Methods can't be invoked in constant expressions."
    hasPublishedDocs: false
  CONST_EVAL_THROWS_EXCEPTION:
    problemMessage: Evaluation of this constant expression throws an exception.
    hasPublishedDocs: false
    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:
    problemMessage: Evaluation of this constant expression throws an IntegerDivisionByZeroException.
    hasPublishedDocs: false
    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:
    problemMessage: "In constant expressions, operands of this operator must be of type 'bool'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form !e1", "An expression of the form
      e1 && e2", and "An expression of the form e1 || e2".
  CONST_EVAL_TYPE_BOOL_INT:
    problemMessage: "In constant expressions, operands of this operator must be of type 'bool' or 'int'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form e1 & e2".
  CONST_EVAL_TYPE_BOOL_NUM_STRING:
    problemMessage: "In constant expressions, operands of this operator must be of type 'bool', 'num', 'String' or 'null'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "A literal string".
  CONST_EVAL_PRIMITIVE_EQUALITY:
    problemMessage: "In constant expressions, operands of the equality operator must have primitive equality."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form e1 == e2".
  CONST_EVAL_TYPE_INT:
    problemMessage: "In constant expressions, operands of this operator must be of type 'int'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form ~e1", "An expression of one of
      the forms e1 >> e2".
  CONST_EVAL_TYPE_NUM:
    problemMessage: "In constant expressions, operands of this operator must be of type 'num'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form e1 - e2".
  CONST_EVAL_TYPE_NUM_STRING:
    problemMessage: "In constant expressions, operands of this operator must be of type 'num' or 'String'."
    hasPublishedDocs: false
    comment: |-
      See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
      for text about "An expression of the form e1 + e2".
  CONST_EVAL_TYPE_STRING:
    problemMessage: "In constant expressions, operands of this operator must be of type 'String'."
    hasPublishedDocs: false
    comment: No parameters.
  CONST_EVAL_TYPE_TYPE:
    problemMessage: "In constant expressions, operands of this operator must be of type 'Type'."
    hasPublishedDocs: false
  CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
    problemMessage: Const variables must be initialized with a constant value.
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Constant values from a deferred library can't be used to initialize a 'const' variable."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: Only static fields can be declared as const.
    correctionMessage: "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.

      #### Example

      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_NOT_PRIMITIVE_EQUALITY:
    problemMessage: "The type of a key in a constant map can't override the '==' operator, or 'hashCode', but the class '{0}' does."
    correctionMessage: "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 either the `==` operator, the
      getter `hashCode`, or both. The implementation of constant maps uses both
      the `==` operator and the `hashCode` getter, so any implementation other
      than the ones inherited from `Object` requires executing arbitrary code at
      compile time, which isn't supported.

      #### Examples

      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};
      ```

      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 `hashCode`:

      ```dart
      class C {
        const C();

        int get hashCode => 3;
      }

      const map = {[!C()!] : 0};
      ```

      #### Common fixes

      If you can remove the implementation of `==` and `hashCode` from the
      class, then do so:

      ```dart
      class C {
        const C();
      }

      const map = {C() : 0};
      ```

      If you can't remove the implementation of `==` and `hashCode` from the
      class, then make the map non-constant:

      ```dart
      class C {
        const C();

        bool operator ==(Object other) => true;
      }

      final map = {C() : 0};
      ```
  CONST_NOT_INITIALIZED:
    problemMessage: "The constant '{0}' must be initialized."
    correctionMessage: 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.

      #### Example

      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_NOT_PRIMITIVE_EQUALITY:
    problemMessage: "An element in a constant set can't override the '==' operator, or 'hashCode', but the type '{0}' does."
    correctionMessage: "Try using a different value for the element, or removing the keyword 'const' from the set."
    previousName: CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS
    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 either the `==` operator, the
      getter `hashCode`, or both. The implementation of constant sets uses both
      the `==` operator and the `hashCode` getter, so any implementation other
      than the ones 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()!]};
      ```

      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 `hashCode`:

      ```dart
      class C {
        const C();

        int get hashCode => 3;
      }

      const map = {[!C()!]};
      ```

      #### Common fixes

      If you can remove the implementation of `==` and `hashCode` from the
      class, then do so:

      ```dart
      class C {
        const C();
      }

      const set = {C()};
      ```

      If you can't remove the implementation of `==` and `hashCode` from the
      class, then make the set non-constant:

      ```dart
      class C {
        const C();

        bool operator ==(Object other) => true;
      }

      final set = {C()};
      ```
  CONST_SPREAD_EXPECTED_LIST_OR_SET:
    problemMessage: 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.

      #### Example

      The following code produces this diagnostic because the value of `list1` is
      `null`, which is neither a list nor a set:

      ```dart
      const dynamic list1 = 42;
      const List<int> list2 = [...[!list1!]];
      ```

      #### Common fixes

      Change the expression to something that evaluates to either a constant list
      or a constant set:

      ```dart
      const dynamic list1 = [42];
      const List<int> list2 = [...list1];
      ```
  CONST_SPREAD_EXPECTED_MAP:
    problemMessage: 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.

      #### Example

      The following code produces this diagnostic because the value of `map1` is
      `null`, which isn't a map:

      ```dart
      const dynamic map1 = 42;
      const Map<String, int> map2 = {...[!map1!]};
      ```

      #### Common fixes

      Change the expression to something that evaluates to a constant map:

      ```dart
      const dynamic map1 = {'answer': 42};
      const Map<String, int> map2 = {...map1};
      ```
  CONST_TYPE_PARAMETER:
    problemMessage: "Type parameters can't be used in a constant expression."
    correctionMessage: Try replacing the type parameter with a different type.
    hasPublishedDocs: false
    comment: No parameters.
  CONST_WITH_NON_CONST:
    problemMessage: "The constructor being called isn't a const constructor."
    correctionMessage: "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`.

      #### Example

      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:
    problemMessage: Arguments of a constant creation must be constant expressions.
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "A constant creation can't use a type parameter as a type argument."
    correctionMessage: 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
    problemMessage: "A constant constructor tearoff can't use a type parameter as a type argument."
    correctionMessage: 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
    problemMessage: "A constant function tearoff can't use a type parameter as a type argument."
    correctionMessage: Try replacing the type parameter with a different type.
    hasPublishedDocs: true
    comment: No parameters.
  CONST_WITH_UNDEFINED_CONSTRUCTOR:
    problemMessage: "The class '{0}' doesn't have a constant constructor '{1}'."
    correctionMessage: Try calling a different constructor.
    hasPublishedDocs: false
    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:
    problemMessage: "The class '{0}' doesn't have an unnamed constant constructor."
    correctionMessage: Try calling a different constructor.
    hasPublishedDocs: false
    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
  CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION:
    problemMessage: The expression of a constant pattern must be a valid constant.
    correctionMessage: Try making the expression a valid constant.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constant pattern has an
      expression that isn't a valid constant.

      #### Example

      The following code produces this diagnostic because the constant pattern
      `i` isn't a constant:

      ```dart
      void f(int e, int i) {
        switch (e) {
          case [!i!]:
            break;
        }
      }
      ```

      #### Common fixes

      If the value that should be matched is known, then replace the expression
      with a constant:

      ```dart
      void f(int e, int i) {
        switch (e) {
          case 0:
            break;
        }
      }
      ```

      If the value that should be matched isn't known, then rewrite the code to
      not use a pattern:

      ```dart
      void f(int e, int i) {
        if (e == i) {}
      }
      ```
  CONTINUE_LABEL_INVALID:
    previousName: CONTINUE_LABEL_ON_SWITCH
    hasPublishedDocs: true
    problemMessage: The label used in a 'continue' statement must be defined on either a loop or a switch member.
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the label in a `continue`
      statement resolves to a label on a `switch` statement.

      #### Example

      The following code produces this diagnostic because the label `l`, used to
      label a `switch` statement, is used in the `continue` statement:

      ```dart
      void f(int i) {
        l: switch (i) {
          case 0:
            [!continue l;!]
        }
      }
      ```

      #### Common fixes

      Find a different way to achieve the control flow you need; for example, by
      introducing a loop that re-executes the `switch` statement.
  COULD_NOT_INFER:
    problemMessage: "Couldn't infer type parameter '{0}'.{1}"
    hasPublishedDocs: false
    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
    problemMessage: "The name '{0}' isn't a class."
    correctionMessage: 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
    problemMessage: "The name '{0}' isn't a class."
    correctionMessage: 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:
    removedIn: "3.2"
    problemMessage: "The default 'List' constructor isn't available when null safety is enabled."
    correctionMessage: "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:
    problemMessage: "Default values aren't allowed in factory constructors that redirect to another constructor."
    correctionMessage: 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:
    problemMessage: "Required named parameters can't have a default value."
    correctionMessage: "Try removing either the default value or the 'required' modifier."
    hasPublishedDocs: true
    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.

      #### Example

      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:
    problemMessage: Imports of deferred libraries must hide all extensions.
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: "The late local variable '{0}' is definitely unassigned at this point."
    correctionMessage: 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:
    problemMessage: Only a generic type, generic function, generic instance method, or generic constructor can have type arguments.
    correctionMessage: Try removing the type arguments, or instantiating the type(s) of a generic type, generic function, generic instance method, or generic constructor.
    comment: No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an expression with a value that
      is anything other than one of the allowed kinds of values is followed by
      type arguments. The allowed kinds of values are:
      - generic types,
      - generic constructors, and
      - generic functions, including top-level functions, static and instance
        members, and local functions.

      #### Example

      The following code produces this diagnostic because `i` is a top-level
      variable, which isn't one of the allowed cases:

      ```dart
      int i = 1;

      void f() {
        print([!i!]<int>);
      }
      ```

      #### Common fixes

      If the referenced value is correct, then remove the type arguments:

      ```dart
      int i = 1;

      void f() {
        print(i);
      }
      ```
  DUPLICATE_CONSTRUCTOR_NAME:
    sharedName: DUPLICATE_CONSTRUCTOR
    problemMessage: "The constructor with name '{0}' is already defined."
    correctionMessage: Try renaming one of the constructors.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the duplicate entity
  DUPLICATE_CONSTRUCTOR_DEFAULT:
    sharedName: DUPLICATE_CONSTRUCTOR
    problemMessage: The unnamed constructor is already defined.
    correctionMessage: 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 constructors that aren't needed:

      ```dart
      class C {
        C.m();
      }
      ```
  DUPLICATE_DEFINITION:
    problemMessage: "The name '{0}' is already defined."
    correctionMessage: 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.

      #### Example

      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_NAME:
    problemMessage: The field name '{0}' is already used in this record.
    correctionMessage: Try renaming the field.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the duplicated name
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when either a record literal or a
      record type annotation contains a field whose name is the same as a
      previously declared field in the same literal or type.

      #### Examples

      The following code produces this diagnostic because the record literal has
      two fields named `a`:

      ```dart
      var r = (a: 1, [!a!]: 2);
      ```

      The following code produces this diagnostic because the record type
      annotation has two fields named `a`, one a positional field and the other
      a named field:

      ```dart
      void f((int a, {int [!a!]}) r) {}
      ```

      #### Common fixes

      Rename one or both of the fields:

      ```dart
      var r = (a: 1, b: 2);
      ```
  DUPLICATE_FIELD_FORMAL_PARAMETER:
    problemMessage: "The field '{0}' can't be initialized by multiple parameters in the same constructor."
    correctionMessage: 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
      initializing 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 initializing formal parameters:

      ```dart
      class C {
        int f;

        C(this.f) {}
      }
      ```
  DUPLICATE_NAMED_ARGUMENT:
    problemMessage: "The argument for the named parameter '{0}' was already specified."
    correctionMessage: 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.

      #### Example

      The following code produces this diagnostic because there are two arguments
      with the name `a`:

      ```dart
      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
      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
      void f(C c) {
        c.m(a: 1);
      }

      class C {
        void m({int? a, int? b}) {}
      }
      ```
  DUPLICATE_PART:
    problemMessage: "The library already contains a part with the URI '{0}'."
    correctionMessage: 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 `part.dart` containing

      ```dart
      %uri="lib/part.dart"
      part of 'test.dart';
      ```

      The following code produces this diagnostic because the file `part.dart` is
      included multiple times:

      ```dart
      part 'part.dart';
      part [!'part.dart'!];
      ```

      #### Common fixes

      Remove all except the first of the duplicated part directives:

      ```dart
      part 'part.dart';
      ```
  DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE:
    problemMessage: The variable '{0}' is already assigned in this pattern.
    correctionMessage: Try renaming the variable.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a single pattern variable is
      assigned a value more than once in the same pattern assignment.

      #### Example

      The following code produces this diagnostic because the variable `a` is
      assigned twice in the pattern `(a, a)`:

      ```dart
      int f((int, int) r) {
        int a;
        (a, [!a!]) = r;
        return a;
      }
      ```

      #### Common fixes

      If you need to capture all of the values, then use a unique variable for
      each of the subpatterns being matched:

      ```dart
      int f((int, int) r) {
        int a, b;
        (a, b) = r;
        return a + b;
      }
      ```

      If some of the values don't need to be captured, then use a wildcard
      pattern `_` to avoid having to bind the value to a variable:

      ```dart
      int f((int, int) r) {
        int a;
        (_, a) = r;
        return a;
      }
      ```
  DUPLICATE_PATTERN_FIELD:
    problemMessage: The field '{0}' is already matched in this pattern.
    correctionMessage: Try removing the duplicate field.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the field
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a record pattern matches the
      same field more than once, or when an object pattern matches the same
      getter more than once.

      #### Examples

      The following code produces this diagnostic because the record field `a`
      is matched twice in the same record pattern:

      ```dart
      void f(({int a, int b}) r) {
        switch (r) {
          case (a: 1, [!a!]: 2):
            return;
        }
      }
      ```

      The following code produces this diagnostic because the getter `f` is
      matched twice in the same object pattern:

      ```dart
      void f(Object o) {
        switch (o) {
          case C(f: 1, [!f!]: 2):
            return;
        }
      }
      class C {
        int? f;
      }
      ```

      #### Common fixes

      If the pattern should match for more than one value of the duplicated
      field, then use a logical-or pattern:

      ```dart
      void f(({int a, int b}) r) {
        switch (r) {
          case (a: 1, b: _) || (a: 2, b: _):
            break;
        }
      }
      ```

      If the pattern should match against multiple fields, then change the name
      of one of the fields:

      ```dart
      void f(({int a, int b}) r) {
        switch (r) {
          case (a: 1, b: 2):
            return;
        }
      }
      ```
  DUPLICATE_REST_ELEMENT_IN_PATTERN:
    problemMessage: At most one rest element is allowed in a list or map pattern.
    correctionMessage: Try removing the duplicate rest element.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there's more than one rest
      pattern in either a list or map pattern. A rest pattern will capture any
      values unmatched by other subpatterns, making subsequent rest patterns
      unnecessary because there's nothing left to capture.

      #### Example

      The following code produces this diagnostic because there are two rest
      patterns in the list pattern:

      ```dart
      void f(List<int> x) {
        if (x case [0, ..., [!...!]]) {}
      }
      ```

      #### Common fixes

      Remove all but one of the rest patterns:

      ```dart
      void f(List<int> x) {
        if (x case [0, ...]) {}
      }
      ```
  DUPLICATE_VARIABLE_PATTERN:
    problemMessage: The variable '{0}' is already defined in this pattern.
    correctionMessage: Try renaming the variable.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a branch of a logical-and
      pattern declares a variable that is already declared in an earlier branch
      of the same pattern.

      #### Example

      The following code produces this diagnostic because the variable `a` is
      declared in both branches of the logical-and pattern:

      ```dart
      void f((int, int) r) {
        if (r case (var a, 0) && (0, var [!a!])) {
          print(a);
        }
      }
      ```

      #### Common fixes

      If you need to capture the matched value in multiple branches, then change
      the names of the variables so that they are unique:

      ```dart
      void f((int, int) r) {
        if (r case (var a, 0) && (0, var b)) {
          print(a + b);
        }
      }
      ```

      If you only need to capture the matched value on one branch, then remove
      the variable pattern from all but one branch:

      ```dart
      void f((int, int) r) {
        if (r case (var a, 0) && (0, _)) {
          print(a);
        }
      }
      ```
  EMPTY_MAP_PATTERN:
    problemMessage: A map pattern must have at least one entry.
    correctionMessage: Try replacing it with an object pattern 'Map()'.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a map pattern is empty.

      #### Example

      The following code produces this diagnostic because the map pattern
      is empty:

      ```dart
      void f(Map<int, String> x) {
        if (x case [!{}!]) {}
      }
      ```

      #### Common fixes

      If the pattern should match any map, then replace it with an object
      pattern:

      ```dart
      void f(Map<int, String> x) {
        if (x case Map()) {}
      }
      ```

      If the pattern should only match an empty map, then check the length
      in the pattern:

      ```dart
      void f(Map<int, String> x) {
        if (x case Map(isEmpty: true)) {}
      }
      ```
  ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR:
    problemMessage: "An enum value can't invoke a factory constructor."
    correctionMessage: Try using a generative constructor.
    hasPublishedDocs: false
  ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
    problemMessage: "The name of the enum value can't be the same as the enum's name."
    correctionMessage: Try renaming the constant.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum value has the same name
      as the enum in which it's declared.

      #### Example

      The following code produces this diagnostic because the enum value `E` has
      the same name as the enclosing enum `E`:

      ```dart
      enum E {
        [!E!]
      }
      ```

      #### Common fixes

      If the name of the enum is correct, then rename the constant:

      ```dart
      enum E {
        e
      }
      ```

      If the name of the constant is correct, then rename the enum:

      ```dart
      enum F {
        E
      }
      ```
  ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR:
    removedIn: "3.3"
    problemMessage: The invoked constructor isn't a 'const' constructor.
    correctionMessage: Try invoking a 'const' generative constructor.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum value is being created
      using either a factory constructor or a generative constructor that isn't
      marked as being `const`.

      #### Example

      The following code produces this diagnostic because the enum value `e` is
      being initialized by a factory constructor:

      ```dart
      enum E {
        [!e!]();

        factory E() => e;
      }
      ```

      #### Common fixes

      Use a generative constructor marked as `const`:

      ```dart
      enum E {
        e._();

        factory E() => e;

        const E._();
      }
      ```
  ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
    problemMessage: The result of instantiating the enum to bounds is not well-bounded.
    correctionMessage: Try using different bounds for type parameters.
    hasPublishedDocs: false
  ENUM_MIXIN_WITH_INSTANCE_VARIABLE:
    problemMessage: Mixins applied to enums can't have instance variables.
    correctionMessage: Try replacing the instance variables with getters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a mixin that's applied to an
      enum declares one or more instance variables. This isn't allowed because
      the enum values are constant, and there isn't any way for the constructor
      in the enum to initialize any of the mixin's fields.

      #### Example

      The following code produces this diagnostic because the mixin `M` defines
      the instance field `x`:

      ```dart
      mixin M {
        int x = 0;
      }

      enum E with [!M!] {
        a
      }
      ```

      #### Common fixes

      If you need to apply the mixin, then change all instance fields into
      getter and setter pairs and implement them in the enum if necessary:

      ```dart
      mixin M {
        int get x => 0;
      }

      enum E with M {
        a
      }
      ```

      If you don't need to apply the mixin, then remove it:

      ```dart
      enum E {
        a
      }
      ```
  ENUM_WITH_ABSTRACT_MEMBER:
    problemMessage: "'{0}' must have a method body because '{1}' is an enum."
    correctionMessage: "Try adding a body to '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the abstract method
      1: the name of the enclosing enum
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a member of an enum is found
      that doesn't have a concrete implementation. Enums aren't allowed to
      contain abstract members.

      #### Example

      The following code produces this diagnostic because `m` is an abstract
      method and `E` is an enum:

      ```dart
      enum E {
        e;

        [!void m();!]
      }
      ```

      #### Common fixes

      Provide an implementation for the member:

      ```dart
      enum E {
        e;

        void m() {}
      }
      ```
  ENUM_WITH_NAME_VALUES:
    problemMessage: The name 'values' is not a valid name for an enum.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum is declared to have the
      name `values`. This isn't allowed because the enum has an implicit static
      field named `values`, and the two would collide.

      #### Example

      The following code produces this diagnostic because there's an enum
      declaration that has the name `values`:

      ```dart
      enum [!values!] {
        c
      }
      ```

      #### Common fixes

      Rename the enum to something other than `values`.
  ENUM_WITHOUT_CONSTANTS:
    problemMessage: The enum must have at least one enum constant.
    correctionMessage: Try declaring an enum constant.
    hasPublishedDocs: false
  EQUAL_ELEMENTS_IN_CONST_SET:
    problemMessage: "Two elements in a constant set literal can't be equal."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Two keys in a constant map literal can't be equal."
    correctionMessage: 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.

      #### Example

      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.
  EQUAL_KEYS_IN_MAP_PATTERN:
    problemMessage: Two keys in a map pattern can't be equal.
    correctionMessage: Change or remove the duplicate key.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a map pattern contains more
      than one key with the same name. The same key can't be matched twice.

      #### Example

      The following code produces this diagnostic because the key `'a'` appears
      twice:

      ```dart
      void f(Map<String, int> x) {
        if (x case {'a': 1, [!'a'!]: 2}) {}
      }
      ```

      #### Common fixes

      If you are trying to match two different keys, then change one of the keys
      in the pattern:

      ```dart
      void f(Map<String, int> x) {
        if (x case {'a': 1, 'b': 2}) {}
      }
      ```

      If you are trying to match the same key, but allow any one of multiple
      patterns to match, the use a logical-or pattern:

      ```dart
      void f(Map<String, int> x) {
        if (x case {'a': 1 || 2}) {}
      }
      ```
  EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS:
    problemMessage: List patterns require one type argument or none, but {0} found.
    correctionMessage: 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 pattern has more than
      one type argument. List patterns can have either zero type arguments or
      one type argument, but can't have more than one.

      #### Example

      The following code produces this diagnostic because the list pattern
      (`[0]`) has two type arguments:

      ```dart
      void f(Object x) {
        if (x case [!<int, int>!][0]) {}
      }
      ```

      #### Common fixes

      Remove all but one of the type arguments:

      ```dart
      void f(Object x) {
        if (x case <int>[0]) {}
      }
      ```
  EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
    problemMessage: "List literals require one type argument or none, but {0} found."
    correctionMessage: 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:
    problemMessage: "Set literals require one type argument or none, but {0} were found."
    correctionMessage: 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:
    problemMessage: "Map literals require two type arguments or none, but {0} found."
    correctionMessage: 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>{};
      ```
  EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS:
    problemMessage: Map patterns require two type arguments or none, but {0} found.
    correctionMessage: 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 pattern has either one
      type argument or more than two type arguments. Map patterns can have
      either two type arguments or zero type arguments, but can't have any other
      number.

      #### Example

      The following code produces this diagnostic because the map pattern
      (`<int>{}`) has one type argument:

      ```dart
      void f(Object x) {
        if (x case [!<int>!]{0: _}) {}
      }
      ```

      #### Common fixes

      Add or remove type arguments until there are two, or none:

      ```dart
      void f(Object x) {
        if (x case <int, int>{0: _}) {}
      }
      ```
  EXPORT_INTERNAL_LIBRARY:
    problemMessage: "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:
    removedIn: "3.0"
    problemMessage: "The symbol '{0}' is defined in a legacy library, and can't be re-exported from a library with null safety enabled."
    correctionMessage: 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:
    problemMessage: "The exported library '{0}' can't have a part-of directive."
    correctionMessage: 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 `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:
    problemMessage: "Expressions can't be used in a map literal."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: Classes can only extend other classes.
    correctionMessage: Try specifying a different superclass, or removing the extends clause.
    isUnresolvedIdentifier: true
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an `extends` clause contains a
      name that is declared to be something other than a class.

      #### Example

      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:
    problemMessage: "Extension '{0}' can't be used as an expression."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "An extension can't define static member '{0}' and an instance member with the same name."
    correctionMessage: "Try renaming the member to a name that doesn't conflict."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: 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.

      #### Example

      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_INSTANCE_FIELD:
    problemMessage: "Extensions can't declare instance fields."
    correctionMessage: Try replacing the field with a getter.
    hasPublishedDocs: 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.

      #### Example

      The following code produces this diagnostic because `s` is an instance
      field:

      ```dart
      %language=2.9
      extension E on String {
        String [!s!];
      }
      ```

      #### Common fixes

      If the value can be computed without storing it in a field, then try
      using a getter or a method:

      ```dart
      extension E on String {
        String get s => '';

        void s(String value) => print(s);
      }
      ```

      If the value must be stored, but is the same for every instance,
      try using a static field:

      ```dart
      extension E on String {
        static String s = '';
      }
      ```

      If each instance needs to have its own value stored, then try
      using a getter and setter pair backed by a static `Expando`:

      ```dart
      extension E on SomeType {
        static final _s = Expando<String>();

        String get s => _s[this] ?? '';
        set s(String value) => _s[this] = value;
      }
      ```

  EXTENSION_DECLARES_MEMBER_OF_OBJECT:
    problemMessage: "Extensions can't declare members with the same name as a member declared by 'Object'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "An extension override can't be used to access a static member from an extension."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: An extension override can only be used to access instance members.
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Extension overrides have no value so they can't be used as the receiver of a cascade expression."
    correctionMessage: "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.

      #### Example

      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.
  EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER:
    problemMessage: "Extension type constructors can't declare super formal parameters."
    correctionMessage: Try removing the super formal parameter declaration.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor in an extension
      type has a super parameter. Super parameters aren't valid because
      extension types don't have a superclass.

      #### Example

      The following code produces this diagnostic because the named constructor
      `n` contains a super parameter:

      ```dart
      extension type E(int i) {
        E.n(this.i, [!super!].foo);
      }
      ```

      #### Common fixes

      If you need the parameter, replace the super parameter with a normal
      parameter:

      ```dart
      extension type E(int i) {
        E.n(this.i, String foo);
      }
      ```

      If you don't need the parameter, remove the super parameter:

      ```dart
      extension type E(int i) {
        E.n(this.i);
      }
      ```
  EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION:
    problemMessage: Extension type constructors can't include super initializers.
    correctionMessage: Try removing the super constructor invocation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor in an extension
      type includes an invocation of a super constructor in the initializer
      list. Because extension types don't have a superclass, there's no
      constructor to invoke.

      #### Example

      The following code produces this diagnostic because the constructor `E.n`
      invokes a super constructor in its initializer list:

      ```dart
      extension type E(int i) {
        E.n() : i = 0, [!super!].n();
      }
      ```

      #### Common fixes

      Remove the invocation of the super constructor:

      ```dart
      extension type E(int i) {
        E.n() : i = 0;
      }
      ```
  EXTENSION_TYPE_DECLARES_INSTANCE_FIELD:
    problemMessage: "Extension types can't declare instance fields."
    correctionMessage: Try replacing the field with a getter.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there's a field declaration in
      the body of an extension type declaration.

      #### Example

      The following code produces this diagnostic because the extension type `E`
      declares a field named `f`:

      ```dart
      extension type E(int i) {
        final int [!f!] = 0;
      }
      ```

      #### Common fixes

      If you don't need the field, then remove it or replace it with a getter
      and/or setter:

      ```dart
      extension type E(int i) {
        int get f => 0;
      }
      ```

      If you need the field, then convert the extension type into a class:

      ```dart
      class E {
        final int i;

        final int f = 0;

        E(this.i);
      }
      ```
  EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT:
    problemMessage: "Extension types can't declare members with the same name as a member declared by 'Object'."
    correctionMessage: Try specifying a different name for the member.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the body of an extension type
      declaration contains a member with the same name as one of the members
      declared by `Object`.

      #### Example

      The following code produces this diagnostic because the class `Object`
      already defines a member named `hashCode`:

      ```dart
      extension type E(int i) {
        int get [!hashCode!] => 0;
      }
      ```

      #### Common fixes

      If you need a member with the implemented semantics, then rename the
      member:

      ```dart
      extension type E(int i) {
        int get myHashCode => 0;
      }
      ```

      If you don't need a member with the implemented semantics, then remove the
      member:

      ```dart
      extension type E(int i) {}
      ```
  EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE:
    problemMessage: "Extension types can't implement '{0}'."
    correctionMessage: Try specifying a different type, or remove the type from the list.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the display string of the disallowed type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type implements a
      type that it isn't allowed to implement.

      #### Example

      The following code produces this diagnostic because extension types can't
      implement the type `dynamic`:

      ```dart
      extension type A(int i) implements [!dynamic!] {}
      ```

      #### Common fixes

      Remove the disallowed type from the implements clause:

      ```dart
      extension type A(int i) {}
      ```
  EXTENSION_TYPE_IMPLEMENTS_ITSELF:
    problemMessage: "The extension type can't implement itself."
    correctionMessage: Try removing the superinterface that references this extension type.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type implements
      itself, either directly or indirectly.

      #### Example

      The following code produces this diagnostic because the extension type `A`
      directly implements itself:

      ```dart
      extension type [!A!](int i) implements A {}
      ```

      The following code produces this diagnostic because the extension type `A`
      indirectly implements itself (through `B`):

      ```dart
      extension type [!A!](int i) implements B {}

      extension type [!B!](int i) implements A {}
      ```

      #### Common fixes

      Break the cycle by removing a type from the implements clause of at least
      one of the types involved in the cycle:

      ```dart
      extension type A(int i) implements B {}

      extension type B(int i) {}
      ```
  EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE:
    problemMessage: "'{0}' is not a supertype of '{1}', the representation type."
    correctionMessage: Try specifying a different type, or remove the type from the list.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the implemented not extension type
      1: the ultimate representation type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type implements a
      type that isn't a supertype of the representation type.

      #### Example

      The following code produces this diagnostic because the extension type `A`
      implements `String`, but `String` isn't a supertype of the representation
      type `int`:

      ```dart
      extension type A(int i) implements [!String!] {}
      ```

      #### Common fixes

      If the representation type is correct, then remove or replace the type in
      the implements clause:

      ```dart
      extension type A(int i) {}
      ```

      If the representation type isn't correct, then replace it with the correct
      type:

      ```dart
      extension type A(String s) implements String {}
      ```
  EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE:
    problemMessage: "'{0}', the representation type of '{1}', is not a supertype of '{2}', the representation type of '{3}'."
    correctionMessage: Try specifying a different type, or remove the type from the list.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the representation type of the implemented extension type
      1: the name of the implemented extension type
      2: the representation type of the this extension type
      3: the name of the this extension type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type implements
      another extension type, and the representation type of the implemented
      extension type isn't a subtype of the representation type of the implementing
      extension type.

      #### Example

      The following code produces this diagnostic because the extension type `B`
      implements `A`, but the representation type of `A` (`num`) isn't a
      subtype of the representation type of `B` (`String`):

      ```dart
      extension type A(num i) {}

      extension type B(String s) implements [!A!] {}
      ```

      #### Common fixes

      Either change the representation types of the two extension types so that
      the representation type of the implemented type is a supertype of the
      representation type of the implementing type:

      ```dart
      extension type A(num i) {}

      extension type B(int n) implements A {}
      ```

      Or remove the implemented type from the implements clause:

      ```dart
      extension type A(num i) {}

      extension type B(String s) {}
      ```
  EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT:
    problemMessage: "The extension type '{0}' has more than one distinct member named '{1}' from implemented types."
    correctionMessage: Try redeclaring the corresponding member in this extension type.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the extension type
      1: the name of the conflicting member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type implements
      two or more other types, and at least two of those types declare a member
      with the same name.

      #### Example

      The following code produces this diagnostic because the extension type `C`
      implements both `A` and `B`, and both declare a member named `m`:

      ```dart
      class A {
        void m() {}
      }

      extension type B(A a) {
        void m() {}
      }

      extension type [!C!](A a) implements A, B {}
      ```

      #### Common fixes

      If the extension type doesn't need to implement all of the listed types,
      then remove all but one of the types introducing the conflicting members:

      ```dart
      class A {
        void m() {}
      }

      extension type B(A a) {
        void m() {}
      }

      extension type C(A a) implements A {}
      ```

      If the extension type needs to implement all of the listed types but you
      can rename the members in those types, then give the conflicting members
      unique names:

      ```dart
      class A {
        void m() {}
      }

      extension type B(A a) {
        void n() {}
      }

      extension type C(A a) implements A, B {}
      ```
  EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF:
    problemMessage: "The extension type representation can't depend on itself."
    correctionMessage: Try specifying a different type.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type has a
      representation type that depends on the extension type itself, either
      directly or indirectly.

      #### Example

      The following code produces this diagnostic because the representation
      type of the extension type `A` depends on `A` directly:

      ```dart
      extension type [!A!](A a) {}
      ```

      The following two code examples produce this diagnostic because the
      representation type of the extension type `A` depends on `A`
      indirectly through the extension type `B`:

      ```dart
      extension type [!A!](B b) {}

      extension type [!B!](A a) {}
      ```

      ```dart
      extension type [!A!](List<B> b) {}

      extension type [!B!](List<A> a) {}
      ```

      #### Common fixes

      Remove the dependency by choosing a different representation type for at
      least one of the types in the cycle:

      ```dart
      extension type A(String s) {}
      ```
  EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM:
    problemMessage: "The representation type can't be a bottom type."
    correctionMessage: Try specifying a different type.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the representation type of an
      extension type is the [bottom type][] `Never`. The type `Never` can't be
      the representation type of an extension type because there are no values
      that can be extended.

      #### Example

      The following code produces this diagnostic because the representation
      type of the extension type `E` is `Never`:

      ```dart
      extension type E([!Never!] n) {}
      ```

      #### Common fixes

      Replace the extension type with a different type:

      ```dart
      extension type E(String s) {}
      ```
  EXTENSION_TYPE_WITH_ABSTRACT_MEMBER:
    problemMessage: "'{0}' must have a method body because '{1}' is an extension type."
    correctionMessage: "Try adding a body to '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the abstract method
      1: the name of the enclosing extension type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an extension type declares an
      abstract member. Because extension type member references are resolved
      statically, an abstract member in an extension type could never be
      executed.

      #### Example

      The following code produces this diagnostic because the method `m` in the
      extension type `E` is abstract:

      ```dart
      extension type E(String s) {
        [!void m();!]
      }
      ```

      #### Common fixes

      If the member is intended to be executable, then provide an implementation
      of the member:

      ```dart
      extension type E(String s) {
        void m() {}
      }
      ```

      If the member isn't intended to be executable, then remove it:

      ```dart
      extension type E(String s) {}
      ```
  EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
    sharedName: EXTERNAL_WITH_INITIALIZER
    problemMessage: External fields can't have initializers.
    correctionMessage: "Try removing the field initializer or the 'external' keyword from the field declaration."
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field or variable marked with
      the keyword `external` has an initializer, or when an external field is
      initialized in a constructor.

      #### Examples

      The following code produces this diagnostic because the external field `x`
      is assigned a value in an initializer:

      ```dart
      class C {
        external int x;
        C() : [!x!] = 0;
      }
      ```

      The following code produces this diagnostic because the external field `x`
      has an initializer:

      ```dart
      class C {
        external final int [!x!] = 0;
      }
      ```

      The following code produces this diagnostic because the external top level
      variable `x` has an initializer:

      ```dart
      external final int [!x!] = 0;
      ```

      #### Common fixes

      Remove the initializer:

      ```dart
      class C {
        external final int x;
      }
      ```
  EXTERNAL_FIELD_INITIALIZER:
    sharedName: EXTERNAL_WITH_INITIALIZER
    problemMessage: External fields can't have initializers.
    correctionMessage: "Try removing the initializer or the 'external' keyword."
    hasPublishedDocs: true
  EXTERNAL_VARIABLE_INITIALIZER:
    sharedName: EXTERNAL_WITH_INITIALIZER
    problemMessage: External variables can't have initializers.
    correctionMessage: "Try removing the initializer or the 'external' keyword."
    hasPublishedDocs: true
  EXTRA_POSITIONAL_ARGUMENTS:
    problemMessage: "Too many positional arguments: {0} expected, but {1} found."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Too many positional arguments: {0} expected, but {1} found."
    correctionMessage: 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.

      #### Example

      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
      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
      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
      void f(int a, int b, {int? c}) {}
      void g() {
        f(1, 2);
      }
      ```
  FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
    problemMessage: "The field '{0}' can't be initialized twice in the same constructor."
    correctionMessage: 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:
    problemMessage: "Fields can't be initialized in the constructor if they are final and were already initialized at their declaration."
    correctionMessage: 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:
    problemMessage: "Fields can't be initialized in both the parameter list and the initializers."
    correctionMessage: 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 an initializing 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:
    problemMessage: "Initializing formal parameters can't be used in factory constructors."
    correctionMessage: Try using a normal parameter.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a factory constructor has an
      initializing 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 an initializing formal parameter:

      ```dart
      class C {
        int? f;

        factory C([!this.f!]) => throw 0;
      }
      ```

      #### Common fixes

      Replace the initializing formal parameter with a normal parameter:

      ```dart
      class C {
        int? f;

        factory C(int f) => throw 0;
      }
      ```
  FIELD_INITIALIZER_NOT_ASSIGNABLE:
    problemMessage: "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
    problemMessage: "The initializer type '{0}' can't be assigned to the field type '{1}' in a const constructor."
    correctionMessage: "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:
    problemMessage: Initializing formal parameters can only be used in constructors.
    correctionMessage: Try using a normal parameter.
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an initializing formal
      parameter is used in the parameter list for anything other than a
      constructor.

      #### Example

      The following code produces this diagnostic because the initializing
      formal parameter `this.x` is being used in the method `m`:

      ```dart
      class A {
        int x = 0;

        m([[!this.x!] = 0]) {}
      }
      ```

      #### Common fixes

      Replace the initializing formal parameter with a normal parameter and
      assign the field within the body of the method:

      ```dart
      class A {
        int x = 0;

        m([int x = 0]) {
          this.x = x;
        }
      }
      ```
  FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
    problemMessage: "The redirecting constructor can't have a field initializer."
    correctionMessage: 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.

      #### Examples

      The following code produces this diagnostic because the constructor
      `C.zero`, which redirects to the constructor `C`, has an initializing
      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 an initializing 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:
    problemMessage: "The parameter type '{0}' is incompatible with the field type '{1}'."
    correctionMessage: "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 an initializing
      formal parameter isn't assignable to the type of the field being
      initialized.

      #### Example

      The following code produces this diagnostic because the initializing
      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 an initializing 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_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be extended outside of its library because it's a final class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the final class being extended.
  FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be implemented outside of its library because it's a final class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the final class being implemented.
  FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be used as a mixin superclass constraint outside of its library because it's a final class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the final class being used as a mixin superclass constraint.
  FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
    problemMessage: "'{0}' is final and was given a value when it was declared, so it can't be set to a new value."
    correctionMessage: 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:
    problemMessage: "The final variable '{0}' must be initialized."
    correctionMessage: 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.

      #### Example

      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 an initializing 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
    problemMessage: "All final variables must be initialized, but '{0}' isn't."
    correctionMessage: 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.

      #### Example

      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 an
      initializing 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
    problemMessage: "All final variables must be initialized, but '{0}' and '{1}' aren't."
    correctionMessage: 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
    problemMessage: "All final variables must be initialized, but '{0}', '{1}', and {2} others aren't."
    correctionMessage: 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:
    problemMessage: "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:
    problemMessage: "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`.

      #### Example

      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:
    problemMessage: "A for-in loop variable can't be a 'const'."
    correctionMessage: "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:
    problemMessage: "Generic function types can't be used as type parameter bounds."
    correctionMessage: Try making the free variable in the function type part of the larger declaration signature.
    hasPublishedDocs: false
    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:
    problemMessage: "A generic function type can't be a type argument."
    correctionMessage: "Try removing type parameters from the generic function type, or using 'dynamic' as the type argument here."
    hasPublishedDocs: false
    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:
    problemMessage: "A method tear-off on a receiver whose type is 'dynamic' can't have type arguments."
    correctionMessage: Specify the type of the receiver, or remove the type arguments from the method tear-off.
    hasPublishedDocs: true
    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:
    problemMessage: "The return type of getter '{0}' is '{1}' which isn't assignable to the type '{2}' of its setter '{3}'."
    correctionMessage: Try changing the types so that they are compatible.
    hasPublishedDocs: false
    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:
    problemMessage: "The return type of getter '{0}' is '{1}' which isn't a subtype of the type '{2}' of its setter '{3}'."
    correctionMessage: 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:
    problemMessage: "Constant values from a deferred library can't be used as values in an if condition inside a const collection literal."
    correctionMessage: Try making the deferred import non-deferred.
    hasPublishedDocs: false
  ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
    problemMessage: "Functions marked 'async*' must have a return type that is a supertype of 'Stream<T>' for some type 'T'."
    correctionMessage: "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:
    problemMessage: "Functions marked 'async' must have a return type which is a supertype of 'Future'."
    correctionMessage: "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_ENUM_VALUES_DECLARATION:
    sharedName: ILLEGAL_ENUM_VALUES
    problemMessage: An instance member named 'values' can't be declared in a class that implements 'Enum'.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when either a class that implements
      `Enum` or a mixin with a superclass constraint of `Enum` has an instance
      member named `values`.

      #### Examples

      The following code produces this diagnostic because the class `C`, which
      implements `Enum`, declares an instance field named `values`:

      ```dart
      abstract class C implements Enum {
        int get [!values!] => 0;
      }
      ```

      The following code produces this diagnostic because the class `B`, which
      implements `Enum`, inherits an instance method named `values` from `A`:

      ```dart
      abstract class A {
        int values() => 0;
      }

      abstract class [!B!] extends A implements Enum {}
      ```

      #### Common fixes

      Change the name of the conflicting member:

      ```dart
      abstract class C implements Enum {
        int get value => 0;
      }
      ```
  ILLEGAL_ENUM_VALUES_INHERITANCE:
    sharedName: ILLEGAL_ENUM_VALUES
    problemMessage: An instance member named 'values' can't be inherited from '{0}' in a class that implements 'Enum'.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the class that declares 'values'
  ILLEGAL_LANGUAGE_VERSION_OVERRIDE:
    problemMessage: The language version must be {0}.
    correctionMessage: Try removing the language version override and migrating the code.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the required language version
  ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION:
    sharedName: ILLEGAL_CONCRETE_ENUM_MEMBER
    problemMessage: A concrete instance member named '{0}' can't be declared in a class that implements 'Enum'.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of member that cannot be declared
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when either an enum declaration, a
      class that implements `Enum`, or a mixin with a superclass constraint of
      `Enum`, declares or inherits a concrete instance member named either
      `index`, `hashCode`, or `==`.

      #### Examples

      The following code produces this diagnostic because the enum `E` declares
      an instance getter named `index`:

      ```dart
      enum E {
        v;

        int get [!index!] => 0;
      }
      ```

      The following code produces this diagnostic because the class `C`, which
      implements `Enum`, declares an instance field named `hashCode`:

      ```dart
      abstract class C implements Enum {
        int [!hashCode!] = 0;
      }
      ```

      The following code produces this diagnostic because the class `C`, which
      indirectly implements `Enum` through the class `A`, declares an instance
      getter named `hashCode`:

      ```dart
      abstract class A implements Enum {}

      abstract class C implements A {
        int get [!hashCode!] => 0;
      }
      ```

      The following code produces this diagnostic because the mixin `M`, which
      has `Enum` in the `on` clause, declares an explicit operator named `==`:

      ```dart
      mixin M on Enum {
        bool operator [!==!](Object other) => false;
      }
      ```

      #### Common fixes

      Rename the conflicting member:

      ```dart
      enum E {
        v;

        int get getIndex => 0;
      }
      ```
  ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE:
    sharedName: ILLEGAL_CONCRETE_ENUM_MEMBER
    problemMessage: A concrete instance member named '{0}' can't be inherited from '{1}' in a class that implements 'Enum'.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of member that cannot be inherited
      1: the name of the class that declares the member
  ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
    problemMessage: "Functions marked 'sync*' must have a return type that is a supertype of 'Iterable<T>' for some type 'T'."
    correctionMessage: "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:
    problemMessage: Classes and mixins can only implement other classes and mixins.
    correctionMessage: Try specifying a class or mixin, or remove the name from the list.
    hasPublishedDocs: true
    comment: No parameters.
    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.

      #### Example

      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:
    problemMessage: "'{0}' can only be implemented once."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "'{0}' can't be used in both the 'extends' and 'implements' clauses."
    correctionMessage: 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 a class is listed in the
      `extends` clause of a class declaration and also in either the
      `implements` or `with` clause of the same declaration.

      #### 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!] {}
      ```

      The following code produces this diagnostic because the class `A` is used
      in both the `extends` and `with` clauses for the class `B`:

      ```dart
      mixin class A {}

      class B extends A with [!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:
    problemMessage: "The instance member '{0}' can't be accessed in an initializer."
    correctionMessage: 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.

      #### Example

      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;
      }
      ```
  IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
    problemMessage: The implicitly invoked unnamed constructor from '{0}' has required parameters.
    correctionMessage: Try adding an explicit super parameter with the required arguments.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the superclass
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor implicitly
      invokes the unnamed constructor from the superclass, the unnamed
      constructor of the superclass has a required parameter, and there's no
      super parameter corresponding to the required parameter.

      #### Examples

      The following code produces this diagnostic because the unnamed
      constructor in the class `B` implicitly invokes the unnamed constructor in
      the class `A`, but the constructor in `A` has a required positional
      parameter named `x`:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        [!B!]();
      }
      ```

      The following code produces this diagnostic because the unnamed
      constructor in the class `B` implicitly invokes the unnamed constructor in
      the class `A`, but the constructor in `A` has a required named parameter
      named `x`:

      ```dart
      class A {
        A({required int x});
      }

      class B extends A {
        [!B!]();
      }
      ```

      #### Common fixes

      If you can add a parameter to the constructor in the subclass, then add a
      super parameter corresponding to the required parameter in the superclass'
      constructor. The new parameter can either be required:

      ```dart
      class A {
        A({required int x});
      }

      class B extends A {
        B({required super.x});
      }
      ```

      or it can be optional:

      ```dart
      class A {
        A({required int x});
      }

      class B extends A {
        B({super.x = 0});
      }
      ```

      If you can't add a parameter to the constructor in the subclass, then add
      an explicit super constructor invocation with the required argument:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        B() : super(0);
      }
      ```
  IMPORT_INTERNAL_LIBRARY:
    problemMessage: "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:
    problemMessage: "The imported library '{0}' can't have a part-of directive."
    correctionMessage: Try importing 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 a [part file][] is imported
      into a library.

      #### Example

      Given a [part file][] named `part.dart` containing the following:

      ```dart
      %uri="lib/part.dart"
      part of lib;
      ```

      The following code produces this diagnostic because imported files can't
      have a part-of directive:

      ```dart
      library lib;

      import [!'part.dart'!];
      ```

      #### Common fixes

      Import the library that contains the [part file][] rather than the
      [part file][] itself.
  INCONSISTENT_CASE_EXPRESSION_TYPES:
    problemMessage: "Case expressions must have the same types, '{0}' isn't a '{1}'."
    hasPublishedDocs: false
    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:
    problemMessage: "Superinterfaces don't have a valid override for '{0}': {1}."
    correctionMessage: 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
      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
      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:
    problemMessage: "'{0}' is inherited as a getter (from '{1}') and also a method (from '{2}')."
    correctionMessage: 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 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:
    problemMessage: Parts must have exactly the same language version override as the library.
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a [part file][] has a language
      version override comment that specifies a different language version than
      the one being used for the library to which the part belongs.

      #### Example

      Given a [part file][] named `part.dart` that contains the following:

      ```dart
      %uri="lib/part.dart"
      // @dart = 2.14
      part of 'test.dart';
      ```

      The following code produces this diagnostic because the parts of a library
      must have the same language version as the defining compilation unit:

      ```dart
      // @dart = 2.15
      part [!'part.dart'!];
      ```

      #### Common fixes

      Remove the language version override from the [part file][], so that it
      implicitly uses the same version as the defining compilation unit:

      ```dart
      %uri="lib/part.dart"
      part of 'test.dart';
      ```

      If necessary, either adjust the language version override in the defining
      compilation unit to be appropriate for the code in the part, or migrate
      the code in the [part file][] to be consistent with the new language
      version.
  INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR:
    problemMessage: "The variable '{0}' has a different type and/or finality in this branch of the logical-or pattern."
    correctionMessage: Try declaring the variable pattern with the same type and finality in both branches.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the pattern variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a pattern variable that is
      declared on all branches of a logical-or pattern doesn't have the same
      type on every branch. It is also produced when the variable has a
      different finality on different branches. A pattern variable declared on
      multiple branches of a logical-or pattern is required to have the same
      type and finality in each branch, so that the type and finality of the
      variable can be known in code that's guarded by the logical-or pattern.

      #### Examples

      The following code produces this diagnostic because the variable `a` is
      defined to be an `int` on one branch and a `double` on the other:

      ```dart
      void f(Object? x) {
        if (x case (int a) || (double [!a!])) {
          print(a);
        }
      }
      ```

      The following code produces this diagnostic because the variable `a` is
      `final` in the first branch and isn't `final` in the second branch:

      ```dart
      void f(Object? x) {
        if (x case (final int a) || (int [!a!])) {
          print(a);
        }
      }
      ```

      #### Common fixes

      If the finality of the variable is different, decide whether it should be
      `final` or not `final` and make the cases consistent:

      ```dart
      void f(Object? x) {
        if (x case (int a) || (int a)) {
          print(a);
        }
      }
      ```

      If the type of the variable is different and the type isn't critical to
      the condition being matched, then ensure that the variable has the same
      type on both branches:

      ```dart
      void f(Object? x) {
        if (x case (num a) || (num a)) {
          print(a);
        }
      }
      ```

      If the type of the variable is different and the type is critical to the
      condition being matched, then consider breaking the condition into
      multiple `if` statements or `case` clauses:

      ```dart
      void f(Object? x) {
        if (x case int a) {
          print(a);
        } else if (x case double a) {
          print(a);
        }
      }
      ```
  INITIALIZER_FOR_NON_EXISTENT_FIELD:
    problemMessage: "'{0}' isn't a field in the enclosing class."
    correctionMessage: "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.

      #### Example

      The following code produces this diagnostic because the initializer is
      initializing `x`, but `x` isn't a field in the class:

      ```dart
      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
      class C {
        int? y;

        C() : y = 0;
      }
      ```

      If the field must be declared, then add a declaration:

      ```dart
      class C {
        int? x;
        int? y;

        C() : x = 0;
      }
      ```
  INITIALIZER_FOR_STATIC_FIELD:
    problemMessage: "'{0}' is a static field in the enclosing class. Fields initialized in a constructor can't be static."
    correctionMessage: 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 an initializing 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 initializing 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:
    problemMessage: "'{0}' isn't a field in the enclosing class."
    correctionMessage: "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 an initializing 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.

      #### Example

      The following code produces this diagnostic because the field `x` isn't
      defined:

      ```dart
      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
      class C {
        int? y;

        C(this.y);
      }
      ```

      If the field name is correct but hasn't yet been defined, then declare the
      field:

      ```dart
      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
      class C {
        int y;

        C(int x) : y = x * 2;
      }
      ```

      If the parameter isn't needed, then remove it:

      ```dart
      class C {
        int? y;

        C();
      }
      ```
  INSTANCE_ACCESS_TO_STATIC_MEMBER:
    problemMessage: "The static {1} '{0}' can't be accessed through an instance."
    correctionMessage: "Try using the {3} '{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 static member's enclosing element
      3: the kind of the static member's enclosing element (class, mixin, or extension)
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an access operator is used to
      access a static member through an instance of the class.

      #### Example

      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_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
    sharedName: INSTANCE_ACCESS_TO_STATIC_MEMBER
    problemMessage: "The static {1} '{0}' can't be accessed through an instance."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the static member
      1: the kind of the static member (field, getter, setter, or method)
  INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
    problemMessage: "Instance members can't be accessed from a factory constructor."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Instance members can't be accessed from a static method."
    correctionMessage: "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.

      #### Example

      The following code produces this diagnostic because the instance field `x`
      is being referenced in a static method:

      ```dart
      class C {
        int x = 0;

        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
      class C {
        int x = 0;

        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
      class C {
        int x = 0;

        static int m(C c) {
          return c.x;
        }
      }
      ```
  INSTANTIATE_ABSTRACT_CLASS:
    problemMessage: "Abstract classes can't be instantiated."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Enums can't be instantiated."
    correctionMessage: 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
      // @dart = 2.16
      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
      // @dart = 2.16
      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:
    problemMessage: "Type aliases that expand to a type parameter can't be instantiated."
    correctionMessage: Try replacing it with a class.
    hasPublishedDocs: true
    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:
    problemMessage: "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}'."
    correctionMessage: "Try using the class 'BigInt', or switch to the closest valid double: '{1}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the lexeme of the integer
      1: the closest valid double
    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:
    problemMessage: "The integer literal {0} can't be represented in 64 bits."
    correctionMessage: "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: |-
      Parameters:
      0: the value of the literal
    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');
      ```
  INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be extended outside of its library because it's an interface class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the interface class being extended.
  INVALID_ANNOTATION:
    problemMessage: 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.

      #### Examples

      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:
    problemMessage: "Constant values from a deferred library can't be used in annotations."
    correctionMessage: "Try moving the constant from the deferred library, or removing 'deferred' from the import."
    hasPublishedDocs: true
    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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: "Constant values from a deferred library can't be used as annotations."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: "A value of type '{0}' can't be assigned to a variable of type '{1}'."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "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."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the function
      1: the type of the function
      2: the expected function type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_FUNCTION_EXPR:
    problemMessage: 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).
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the type of the torn-off function expression
      1: the expected function type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_LITERAL:
    problemMessage: "The literal '{0}' with type '{1}' isn't of expected type '{2}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the lexeme of the literal
      1: the type of the literal
      2: the expected type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_LITERAL_LIST:
    problemMessage: "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."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the type of the list literal
      1: the expected type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_LITERAL_MAP:
    problemMessage: "The map literal type '{0}' isn't of expected type '{1}'. The map's type can be changed with an explicit generic type arguments or by changing the key and value types."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the type of the map literal
      1: the expected type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_LITERAL_SET:
    problemMessage: "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."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the type of the set literal
      1: the expected type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_METHOD:
    problemMessage: "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."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the torn-off method
      1: the type of the torn-off method
      2: the expected function type

      This error is only reported in libraries which are not null safe.
  INVALID_CAST_NEW_EXPR:
    problemMessage: "The constructor returns type '{0}' that isn't of expected type '{1}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the type of the instantiated object
      1: the expected type

      This error is only reported in libraries which are not null safe.
  INVALID_CONSTANT:
    problemMessage: Invalid constant value.
    hasPublishedDocs: false
    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_EXTENSION_ARGUMENT_COUNT:
    problemMessage: "Extension overrides must have exactly one argument: the value of 'this' in the extension method."
    correctionMessage: 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:
    problemMessage: 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.

      #### Example

      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, and you
      intend it to be an unnamed factory constructor, then rename the factory:

      ```dart
      class A {}

      class C {
        factory C() => throw 0;
      }
      ```

      If the factory returns an instance of the surrounding class, and you
      intend it to be a named factory constructor, then prefix the name of the
      factory constructor with the name of the surrounding class:

      ```dart
      class A {}

      class C {
        factory C.a() => 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_FIELD_NAME_FROM_OBJECT:
    sharedName: INVALID_FIELD_NAME
    problemMessage: Record field names can't be the same as a member from 'Object'.
    correctionMessage: Try using a different name for the field.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when either a record literal or a
      record type annotation has a field whose name is invalid. The name is
      invalid if it is:
      - private (starts with `_`)
      - the same as one of the members defined on `Object`
      - the same as the name of a positional field (an exception is made if the
        field is a positional field with the specified name)

      #### Examples

      The following code produces this diagnostic because the record literal has
      a field named `toString`, which is a method defined on `Object`:

      ```dart
      var r = (a: 1, [!toString!]: 4);
      ```

      The following code produces this diagnostic because the record type
      annotation has a field named `hashCode`, which is a getter defined on
      `Object`:

      ```dart
      void f(({int a, int [!hashCode!]}) r) {}
      ```

      The following code produces this diagnostic because the record literal has
      a private field named `_a`:

      ```dart
      var r = ([!_a!]: 1, b: 2);
      ```

      The following code produces this diagnostic because the record type
      annotation has a private field named `_a`:

      ```dart
      void f(({int [!_a!], int b}) r) {}
      ```

      The following code produces this diagnostic because the record literal has
      a field named `$1`, which is also the name of a different positional
      parameter:

      ```dart
      var r = (2, [!$1!]: 1);
      ```

      The following code produces this diagnostic because the record type
      annotation has a field named `$1`, which is also the name of a different
      positional parameter:

      ```dart
      void f((int, String, {int [!$1!]}) r) {}
      ```

      #### Common fixes

      Rename the field:

      ```dart
      var r = (a: 1, d: 4);
      ```
  INVALID_FIELD_NAME_PRIVATE:
    sharedName: INVALID_FIELD_NAME
    problemMessage: Record field names can't be private.
    correctionMessage: Try removing the leading underscore.
    hasPublishedDocs: true
    comment: No parameters.
  INVALID_FIELD_NAME_POSITIONAL:
    sharedName: INVALID_FIELD_NAME
    problemMessage: Record field names can't be a dollar sign followed by an integer when the integer is the index of a positional field.
    correctionMessage: Try using a different name for the field.
    hasPublishedDocs: true
    comment: No parameters.
  INVALID_IMPLEMENTATION_OVERRIDE:
    problemMessage: "'{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 the method's parameters, or the type
      parameters.

      #### 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_IMPLEMENTATION_OVERRIDE_SETTER:
    sharedName: INVALID_IMPLEMENTATION_OVERRIDE
    problemMessage: "The setter '{1}.{0}' ('{2}') isn't a valid concrete implementation of '{3}.{0}' ('{4}')."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the declared setter that is not a valid override.
      1: the name of the interface that declares the setter.
      2: the type of the declared setter in the interface.
      3: the name of the interface with the overridden setter.
      4: the type of the overridden setter.

      These parameters must be kept in sync with those of
      [CompileTimeErrorCode.INVALID_OVERRIDE].
  INVALID_INLINE_FUNCTION_TYPE:
    problemMessage: "Inline function types can't be used for parameters in a generic function type."
    correctionMessage: "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:
    problemMessage: "The modifier '{0}' can't be applied to the body of a constructor."
    correctionMessage: 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:
    problemMessage: "Setters can't use 'async', 'async*', or 'sync*'."
    correctionMessage: Try removing the modifier.
    hasPublishedDocs: true
    comment: No parameters.
    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:
    problemMessage: "'{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.

      #### Example

      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_OVERRIDE_SETTER:
    sharedName: INVALID_OVERRIDE
    problemMessage: "The setter '{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}')."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the declared setter that is not a valid override.
      1: the name of the interface that declares the setter.
      2: the type of the declared setter in the interface.
      3: the name of the interface with the overridden setter.
      4: the type of the overridden setter.
  INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
    problemMessage: Generative enum constructors can only be used as targets of redirection.
    correctionMessage: Try using an enum value, or a factory constructor.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a generative constructor
      defined on an enum is used anywhere other than to create one of the enum
      constants or as the target of a redirection from another constructor in
      the same enum.

      #### Example

      The following code produces this diagnostic because the constructor for
      `E` is being used to create an instance in the function `f`:

      ```dart
      enum E {
        a(0);

        const E(int x);
      }

      E f() => const [!E!](2);
      ```

      #### Common fixes

      If there's an enum value with the same value, or if you add such a
      constant, then reference the constant directly:

      ```dart
      enum E {
        a(0), b(2);

        const E(int x);
      }

      E f() => E.b;
      ```

      If you need to use a constructor invocation, then use a factory
      constructor:

      ```dart
      enum E {
        a(0);

        const E(int x);

        factory E.c(int x) => a;
      }

      E f() => E.c(2);
      ```
  INVALID_REFERENCE_TO_THIS:
    problemMessage: "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, a generative
      constructor, or the initializer of a late instance field declaration.

      #### Example

      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_FORMAL_PARAMETER_LOCATION:
    problemMessage: Super parameters can only be used in non-redirecting generative constructors.
    correctionMessage: Try removing the 'super' modifier, or changing the constructor to be non-redirecting and generative.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a super parameter is used
      anywhere other than a non-redirecting generative constructor.

      #### Examples

      The following code produces this diagnostic because the super parameter
      `x` is in a redirecting generative constructor:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        B.b([!super!].x) : this._();
        B._() : super(0);
      }
      ```

      The following code produces this diagnostic because the super parameter
      `x` isn't in a generative constructor:

      ```dart
      class A {
        A(int x);
      }

      class C extends A {
        factory C.c([!super!].x) => C._();
        C._() : super(0);
      }
      ```

      The following code produces this diagnostic because the super parameter
      `x` is in a method:

      ```dart
      class A {
        A(int x);
      }

      class D extends A {
        D() : super(0);

        void m([!super!].x) {}
      }
      ```

      #### Common fixes

      If the function containing the super parameter can be changed to be a
      non-redirecting generative constructor, then do so:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        B.b(super.x);
      }
      ```

      If the function containing the super parameter can't be changed to be a
      non-redirecting generative constructor, then remove the `super`:

      ```dart
      class A {
        A(int x);
      }

      class D extends A {
        D() : super(0);

        void m(int x) {}
      }
      ```
  INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
    sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
    problemMessage: "Constant list literals can't use a type parameter in a type argument, such as '{0}'."
    correctionMessage: 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 in 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.

      #### Examples

      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
    problemMessage: "Constant map literals can't use a type parameter in a type argument, such as '{0}'."
    correctionMessage: 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
    problemMessage: "Constant set literals can't use a type parameter in a type argument, such as '{0}'."
    correctionMessage: Try replacing the type parameter with a different type.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type parameter
  INVALID_URI:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: "The 'covariant' keyword can only be used for parameters in instance methods or before non-final instance fields."
    correctionMessage: "Try removing the 'covariant' keyword."
    hasPublishedDocs: false
    comment: "The 'covariant' keyword was found in an inappropriate location."
  INVALID_USE_OF_NULL_VALUE:
    problemMessage: "An expression whose value is always 'null' can't be dereferenced."
    correctionMessage: 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:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: "'{0}' isn't a function."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "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:
    problemMessage: "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:
    problemMessage: "Can't reference an undefined label '{0}'."
    correctionMessage: 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++) {
            if (j != 0) {
              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++) {
            if (j != 0) {
              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++) {
            if (j != 0) {
              break loop;
            }
          }
        }
      }
      ```
  LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
    problemMessage: "Can't have a late final field in a class with a generative const constructor."
    correctionMessage: "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:
    problemMessage: The late final local variable is already assigned.
    correctionMessage: "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_NULLABILITY:
    sharedName: LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
    problemMessage: "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
  LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
    problemMessage: "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.

      #### Example

      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:
    problemMessage: "The type of the first positional parameter of the 'main' function must be a supertype of 'List<String>'."
    correctionMessage: 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:
    problemMessage: "The function 'main' can't have any required named parameters."
    correctionMessage: "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:
    problemMessage: "The function 'main' can't have more than two required positional parameters."
    correctionMessage: 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:
    problemMessage: "The declaration named 'main' must be a function."
    correctionMessage: 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:
    problemMessage: Map entries can only be used in a map literal.
    correctionMessage: 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.

      #### Example

      The following code produces this diagnostic because the literal has a map
      entry even though it's a set literal:

      ```dart
      var 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
      var 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
      var collection = <String>{'a', 'b'};
      ```
  MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY:
    sharedName: MAP_KEY_TYPE_NOT_ASSIGNABLE
    problemMessage: "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
  MAP_KEY_TYPE_NOT_ASSIGNABLE:
    problemMessage: "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.

      #### Example

      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_NULLABILITY:
    sharedName: MAP_VALUE_TYPE_NOT_ASSIGNABLE
    problemMessage: "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
  MAP_VALUE_TYPE_NOT_ASSIGNABLE:
    problemMessage: "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 value type of the
      map.

      #### Example

      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:
    problemMessage: Seeing this message constitutes a bug. Please report it.
    hasPublishedDocs: false
    comment: |-
      12.1 Constants: A constant expression is ... a constant list literal.

      Note: This diagnostic is never displayed to the user, so it doesn't need
      to be documented.
  MISSING_CONST_IN_MAP_LITERAL:
    problemMessage: Seeing this message constitutes a bug. Please report it.
    hasPublishedDocs: false
    comment: |-
      12.1 Constants: A constant expression is ... a constant map literal.

      Note: This diagnostic is never displayed to the user, so it doesn't need
      to be documented.
  MISSING_CONST_IN_SET_LITERAL:
    problemMessage: Seeing this message constitutes a bug. Please report it.
    hasPublishedDocs: false
    comment: |-
      12.1 Constants: A constant expression is ... a constant set literal.

      Note: This diagnostic is never displayed to the user, so it doesn't need
      to be documented.
  MISSING_DART_LIBRARY:
    problemMessage: "Required library '{0}' is missing."
    correctionMessage: Re-install the Dart or Flutter SDK.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the library
    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:
    problemMessage: "The parameter '{0}' can't have a value of 'null' because of its type, but the implicit default value is 'null'."
    correctionMessage: "Try adding either an explicit non-'null' default value or the 'required' modifier."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the parameter
    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.

      #### Examples

      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_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL:
    sharedName: MISSING_DEFAULT_VALUE_FOR_PARAMETER
    problemMessage: "The parameter '{0}' can't have a value of 'null' because of its type, but the implicit default value is 'null'."
    correctionMessage: "Try adding an explicit non-'null' default value."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the parameter
  MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION:
    sharedName: MISSING_DEFAULT_VALUE_FOR_PARAMETER
    problemMessage: "With null safety, use the 'required' keyword, not the '@required' annotation."
    correctionMessage: "Try removing the '@'."
    hasPublishedDocs: true
    comment: No parameters.
  MISSING_NAMED_PATTERN_FIELD_NAME:
    problemMessage: The getter name is not specified explicitly, and the pattern is not a variable.
    correctionMessage: Try specifying the getter name explicitly, or using a variable pattern.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when, within an object pattern, the
      specification of a property and the pattern used to match the property's
      value doesn't have either:

      - a getter name before the colon
      - a variable pattern from which the getter name can be inferred

      #### Example

      The following code produces this diagnostic because there is no getter
      name before the colon and no variable pattern after the colon in the
      object pattern (`C(:0)`):

      ```dart
      abstract class C {
        int get f;
      }

      void f(C c) {
        switch (c) {
          case C([!:0!]):
            break;
        }
      }
      ```

      #### Common fixes

      If you need to use the actual value of the property within the pattern's
      scope, then add a variable pattern where the name of the variable is the
      same as the name of the property being matched:

      ```dart
      abstract class C {
        int get f;
      }

      void f(C c) {
        switch (c) {
          case C(:var f) when f == 0:
            print(f);
        }
      }
      ```

      If you don't need to use the actual value of the property within the
      pattern's scope, then add the name of the property being matched before
      the colon:

      ```dart
      abstract class C {
        int get f;
      }

      void f(C c) {
        switch (c) {
          case C(f: 0):
            break;
        }
      }
      ```
  MISSING_REQUIRED_ARGUMENT:
    problemMessage: "The named parameter '{0}' is required, but there's no corresponding argument."
    correctionMessage: 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);
      }
      ```
  MISSING_VARIABLE_PATTERN:
    problemMessage: "Variable pattern '{0}' is missing in this branch of the logical-or pattern."
    correctionMessage: "Try declaring this variable pattern in the branch."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the variable pattern
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when one branch of a logical-or
      pattern doesn't declare a variable that is declared on the other branch of
      the same pattern.

      #### Example

      The following code produces this diagnostic because the right-hand side of
      the logical-or pattern doesn't declare the variable `a`:

      ```dart
      void f((int, int) r) {
        if (r case (var a, 0) || [!(0, _)!]) {
          print(a);
        }
      }
      ```

      #### Common fixes

      If the variable needs to be referenced in the controlled statements, then
      add a declaration of the variable to every branch of the logical-or
      pattern:

      ```dart
      void f((int, int) r) {
        if (r case (var a, 0) || (0, var a)) {
          print(a);
        }
      }
      ```

      If the variable doesn't need to be referenced in the controlled
      statements, then remove the declaration of the variable from every branch
      of the logical-or pattern:

      ```dart
      void f((int, int) r) {
        if (r case (_, 0) || (0, _)) {
          print('found a zero');
        }
      }
      ```

      If the variable needs to be referenced if one branch of the pattern
      matches but not when the other matches, then break the pattern into two
      pieces:

      ```dart
      void f((int, int) r) {
        switch (r) {
          case (var a, 0):
            print(a);
          case (0, _):
            print('found a zero');
        }
      }
      ```
  MIXINS_SUPER_CLASS:
    sharedName: IMPLEMENTS_SUPER_CLASS
    problemMessage: "'{0}' can't be used in both the 'extends' and 'with' clauses."
    correctionMessage: Try removing one of the occurrences.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the class that appears in both "extends" and "with" clauses
  MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
    problemMessage: "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:
    problemMessage: "'{0}' can't be mixed onto '{1}' because '{1}' doesn't implement '{2}'."
    correctionMessage: "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_SETTER:
    sharedName: MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
    problemMessage: "The class doesn't have a concrete implementation of the super-invoked setter '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the display name of the setter without a concrete implementation
  MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
    problemMessage: "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_DECLARATION_EXTENDS_NOT_OBJECT:
    problemMessage: "The class '{0}' can't be declared a mixin because it extends a class other than 'Object'."
    correctionMessage: Try removing the 'mixin' modifier or changing the superclass to 'Object'.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the mixin class that is invalid
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that is marked with
      the `mixin` modifier extends a class other than `Object`. A mixin class
      can't have a superclass other than `Object`.

      #### Example

      The following code produces this diagnostic because the class `B`, which
      has the modifier `mixin`, extends `A`:

      ```dart
      class A {}

      mixin class B extends [!A!] {}
      ```

      #### Common fixes

      If you want the class to be used as a mixin, then change the superclass to
      `Object`, either explicitly or by removing the extends clause:

      ```dart
      class A {}

      mixin class B {}
      ```

      If the class needs to have a superclass other than `Object`, then remove
      the `mixin` modifier:

      ```dart
      class A {}

      class B extends A {}
      ```

      If you need both a mixin and a subclass of a class other than `Object`,
      then move the members of the subclass to a new mixin, remove the `mixin`
      modifier from the subclass, and apply the new mixin to the subclass:

      ```dart
      class A {}

      class B extends A with M {}

      mixin M {}
      ```

      Depending on the members of the subclass this might require adding an `on`
      clause to the mixin.
  MIXIN_CLASS_DECLARES_CONSTRUCTOR:
    problemMessage: "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
      //@dart=2.19
      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
      //@dart=2.19
      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_INHERITS_FROM_NOT_OBJECT:
    problemMessage: "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
      //@dart=2.19
      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
      //@dart=2.19
      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:
    problemMessage: "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:
    problemMessage: 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.

      #### Example

      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_SUBTYPE_OF_BASE_IS_NOT_BASE:
    sharedName: SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
    problemMessage: "The mixin '{0}' must be 'base' because the supertype '{1}' is 'base'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the mixin that is not 'base'
      1: the name of the 'base' supertype
  MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE:
    sharedName: SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
    problemMessage: "The mixin '{0}' must be 'base' because the supertype '{1}' is 'final'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the mixin that is not 'final'
      1: the name of the 'final' supertype
  MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
    problemMessage: "Deferred classes can't be used as superclass constraints."
    correctionMessage: Try changing the import to not be deferred.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a superclass constraint of a
      mixin is imported from a deferred library.

      #### Example

      The following code produces this diagnostic because the superclass
      constraint of `math.Random` is imported from a deferred library:

      ```dart
      import 'dart:async' deferred as async;

      mixin M<T> on [!async.Stream<T>!] {}
      ```

      #### Common fixes

      If the import doesn't need to be deferred, then remove the `deferred`
      keyword:

      ```dart
      import 'dart:async' as async;

      mixin M<T> on async.Stream<T> {}
      ```

      If the import does need to be deferred, then remove the superclass
      constraint:

      ```dart
      mixin M<T> {}
      ```
  MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
    problemMessage: 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.

      #### Example

      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:
    problemMessage: Mixin can only be applied to class.
    hasPublishedDocs: false
    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:
    problemMessage: Constructors can have only one 'this' redirection, at most.
    correctionMessage: Try removing all but one of the redirections.
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor redirects to more
      than one other constructor in the same class (using `this`).

      #### Example

      The following code produces this diagnostic because the unnamed
      constructor in `C` is redirecting to both `this.a` and `this.b`:

      ```dart
      class C {
        C() : this.a(), [!this.b()!];
        C.a();
        C.b();
      }
      ```

      #### Common fixes

      Remove all but one of the redirections:

      ```dart
      class C {
        C() : this.a();
        C.a();
        C.b();
      }
      ```
  MULTIPLE_SUPER_INITIALIZERS:
    problemMessage: "A constructor can have at most one 'super' initializer."
    correctionMessage: "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:
    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'."
    correctionMessage: "Try invoking a different constructor, or define a constructor named '{1}'."
    hasPublishedDocs: false
    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>.

      Parameters:
      0: the name of the class being instantiated
      1: the name of the constructor
  NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
    problemMessage: "The class '{0}' doesn't have an unnamed constructor."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and {4} more."
    correctionMessage: 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
    problemMessage: "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'."
    correctionMessage: 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
    problemMessage: "Missing concrete implementation of '{0}'."
    correctionMessage: 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.

      #### Example

      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
    problemMessage: "Missing concrete implementations of '{0}', '{1}', and '{2}'."
    correctionMessage: 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
    problemMessage: "Missing concrete implementations of '{0}' and '{1}'."
    correctionMessage: 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:
    problemMessage: "Conditions must have a static type of 'bool'."
    correctionMessage: 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`.

      #### Example

      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:
    problemMessage: "The expression in an assert must be of type 'bool'."
    correctionMessage: 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`.

      #### Example

      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:
    problemMessage: "A negation operand must have a static type of 'bool'."
    correctionMessage: "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`.

      #### Example

      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:
    problemMessage: "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`.

      #### Example

      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:
    problemMessage: 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:
    problemMessage: 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.

      #### Example

      The following code produces this diagnostic because `j` isn't a constant:

      ```dart
      %language=2.18
      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:
    problemMessage: "Constant values from a deferred library can't be used as a case expression."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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
      %language=2.18
      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:
    problemMessage: 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.

      #### Example

      The following code produces this diagnostic:

      ```dart
      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
      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
      var defaultValue = 3;

      void f([int? value]) {
        value ??= defaultValue;
      }
      ```
  NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
    problemMessage: "Constant values from a deferred library can't be used as a default parameter value."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: The values in a const list literal must be constants.
    correctionMessage: "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][]).

      #### Example

      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:
    problemMessage: The elements in a const map literal must be constant.
    correctionMessage: "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:
    problemMessage: The keys in a const map literal must be constant.
    correctionMessage: "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.

      #### Example

      The following code produces this diagnostic because `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_PATTERN_KEY:
    problemMessage: Key expressions in map patterns must be constants.
    correctionMessage: Try using constants instead.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a key in a map pattern isn't a
      constant expression.

      #### Example

      The following code produces this diagnostic because the key `A()` isn't a
      constant:

      ```dart
      void f(Object x) {
        if (x case {[!A()!]: 0}) {}
      }

      class A {
        const A();
      }
      ```

      #### Common fixes

      Use a constant for the key:

      ```dart
      void f(Object x) {
        if (x case {const A(): 0}) {}
      }

      class A {
        const A();
      }
      ```
  NON_CONSTANT_MAP_VALUE:
    problemMessage: The values in a const map literal must be constant.
    correctionMessage: "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.

      #### Example

      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_RECORD_FIELD:
    problemMessage: The fields in a const record literal must be constants.
    correctionMessage: "Try removing the keyword 'const' from the record literal."
    hasPublishedDocs: false
    comment: No parameters.
  NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION:
    problemMessage: The relational pattern expression must be a constant.
    correctionMessage: Try using a constant instead.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the value in a relational
      pattern expression isn't a constant expression.

      #### Example

      The following code produces this diagnostic because the operand of the `>`
      operator, `a`, isn't a constant:

      ```dart
      final a = 0;

      void f(int x) {
        if (x case > [!a!]) {}
      }
      ```

      #### Common fixes

      Replace the value with a constant expression:

      ```dart
      const a = 0;

      void f(int x) {
        if (x case > a) {}
      }
      ```
  NON_CONSTANT_SET_ELEMENT:
    problemMessage: The values in a const set literal must be constants.
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "A non-constant map or set literal without type arguments can't be used as an expression statement."
    hasPublishedDocs: false
    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_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE:
    problemMessage: "An extension type parameter can't be used in a non-covariant position of its representation type."
    correctionMessage: "Try removing the type parameters from function parameter types and type parameter bounds."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a type parameter of an
      extension type is used in a non-covariant position in the representation
      type of that extension type.

      #### Example

      The following code produces this diagnostic because the type parameter `T`
      is used as a parameter type in the function type `void Function(T)`, and
      parameters are not covariant:

      ```dart
      extension type A<[!T!]>(void Function(T) f) {}
      ```

      #### Common fixes

      Remove the use of the type parameter:

      ```dart
      extension type A(void Function(String) f) {}
      ```
  NON_EXHAUSTIVE_SWITCH_EXPRESSION:
    problemMessage: "The type '{0}' is not exhaustively matched by the switch cases since it doesn't match '{1}'."
    correctionMessage: "Try adding a wildcard pattern or cases that match '{2}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type of the switch scrutinee
      1: the witness pattern for the unmatched value
      2: the suggested pattern for the unmatched value
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `switch` expression is
      missing a case for one or more of the possible values that could flow
      through it.

      #### Example

      The following code produces this diagnostic because the switch expression
      doesn't have a case for the value `E.three`:

      ```dart
      enum E { one, two, three }

      String f(E e) => [!switch!] (e) {
          E.one => 'one',
          E.two => 'two',
        };
      ```

      #### Common fixes

      If the missing values are distinctly meaningful to the switch expression,
      then add a case for each of the values missing a match:

      ```dart
      enum E { one, two, three }

      String f(E e) => switch (e) {
          E.one => 'one',
          E.two => 'two',
          E.three => 'three',
        };
      ```

      If the missing values don't need to be matched, then add a wildcard
      pattern that returns a simple default:

      ```dart
      enum E { one, two, three }

      String f(E e) => switch (e) {
          E.one => 'one',
          E.two => 'two',
          _ => 'unknown',
        };
      ```

      Be aware that a wildcard pattern will handle any values added to the type
      in the future. You will lose the ability to have the compiler warn you if
      the `switch` needs to be updated to account for newly added types.
  NON_EXHAUSTIVE_SWITCH_STATEMENT:
    problemMessage: "The type '{0}' is not exhaustively matched by the switch cases since it doesn't match '{1}'."
    correctionMessage: "Try adding a default case or cases that match '{2}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type of the switch scrutinee
      1: the witness pattern for the unmatched value
      2: the suggested pattern for the unmatched value
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `switch` statement switching
      over an exhaustive type is missing a case for one or more of the possible
      values that could flow through it.

      #### Example

      The following code produces this diagnostic because the switch statement
      doesn't have a case for the value `E.three`, and `E` is an exhaustive
      type:

      ```dart
      enum E { one, two, three }

      void f(E e) {
        [!switch!] (e) {
          case E.one:
          case E.two:
        }
      }
      ```

      #### Common fixes

      Add a case for each of the constants that aren't currently being matched:

      ```dart
      enum E { one, two, three }

      void f(E e) {
        switch (e) {
          case E.one:
          case E.two:
            break;
          case E.three:
        }
      }
      ```

      If the missing values don't need to be matched, then add a `default`
      clause or a wildcard pattern:

      ```dart
      enum E { one, two, three }

      void f(E e) {
        switch (e) {
          case E.one:
          case E.two:
            break;
          default:
        }
      }
      ```

      But be aware that adding a `default` clause or wildcard pattern will cause
      any future values of the exhaustive type to also be handled, so you will
      have lost the ability for the compiler to warn you if the `switch` needs
      to be updated.
  NON_FINAL_FIELD_IN_ENUM:
    problemMessage: Enums can only declare final fields.
    correctionMessage: Try making the field final.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an instance field in an enum
      isn't marked as `final`.

      #### Example

      The following code produces this diagnostic because the field `f` isn't a
      final field:

      ```dart
      enum E {
        c;

        int [!f!] = 0;
      }
      ```

      #### Common fixes

      If the field must be defined for the enum, then mark the field as being
      `final`:

      ```dart
      enum E {
        c;

        final int f = 0;
      }
      ```

      If the field can be removed, then remove it:

      ```dart
      enum E {
        c
      }
      ```
  NON_GENERATIVE_CONSTRUCTOR:
    problemMessage: "The generative constructor '{0}' is expected, but a factory was found."
    correctionMessage: 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:
    problemMessage: "The unnamed constructor of superclass '{0}' (called by the default constructor of '{1}') must be a generative constructor, but factory found."
    correctionMessage: "Try adding an explicit constructor that has a different superinitializer or changing the superclass constructor '{2}' to not be a factory constructor."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the superclass
      1: the name of the current class
      2: the implicitly called factory constructor of the superclass
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class has an implicit
      generative constructor and the superclass has an explicit unnamed factory
      constructor. The implicit constructor in the subclass implicitly invokes
      the unnamed constructor in the superclass, but generative constructors can
      only invoke another generative constructor, not a factory constructor.

      #### Example

      The following code produces this diagnostic because the implicit
      constructor in `B` invokes the unnamed constructor in `A`, but the
      constructor in `A` is a factory constructor, when a generative constructor
      is required:

      ```dart
      class A {
        factory A() => throw 0;
        A.named();
      }

      class [!B!] extends A {}
      ```

      #### Common fixes

      If the unnamed constructor in the superclass can be a generative
      constructor, then change it to be a generative constructor:

      ```dart
      class A {
        A();
        A.named();
      }

      class B extends A { }
      ```

      If the unnamed constructor can't be a generative constructor and there are
      other generative constructors in the superclass, then explicitly invoke
      one of them:

      ```dart
      class A {
        factory A() => throw 0;
        A.named();
      }

      class B extends A {
        B() : super.named();
      }
      ```

      If there are no generative constructors that can be used and none can be
      added, then implement the superclass rather than extending it:

      ```dart
      class A {
        factory A() => throw 0;
        A.named();
      }

      class B implements A {}
      ```
  NON_SYNC_FACTORY:
    problemMessage: "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:
    problemMessage: "The name '{0}' isn't a type, so it can't be used as a type argument."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "The name '{0}' isn't a type and can't be used in an on-catch clause."
    correctionMessage: 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.

      #### Example

      The following code produces this diagnostic because `f` is a function, not
      a type:

      ```dart
      void f() {
        try {
          // ...
        } on [!f!] {
          // ...
        }
      }
      ```

      #### Common fixes

      Change the name to the type of object that should be caught:

      ```dart
      void f() {
        try {
          // ...
        } on FormatException {
          // ...
        }
      }
      ```
  NON_VOID_RETURN_FOR_OPERATOR:
    problemMessage: "The return type of the operator []= must be 'void'."
    correctionMessage: "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:
    problemMessage: "The return type of the setter must be 'void' or absent."
    correctionMessage: 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:
    problemMessage: "The non-nullable local variable '{0}' must be assigned before it can be used."
    correctionMessage: "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][].

      #### Examples

      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:
    problemMessage: "{0} isn't a type."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "'{0}' isn't a binary operator."
    hasPublishedDocs: true
    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_SINGULAR:
    sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
    problemMessage: "1 positional argument expected, but 0 found."
    correctionMessage: Try adding the missing argument.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a method or function invocation
      has fewer positional arguments than the number of required positional
      parameters.

      #### Example

      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_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL:
    sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
    problemMessage: "{0} positional arguments expected, but {1} found."
    correctionMessage: Try adding the missing arguments.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the expected number of required arguments
      1: the actual number of positional arguments given
  NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR:
    sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
    problemMessage: "1 positional argument expected by '{0}', but 0 found."
    correctionMessage: Try adding the missing argument.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: name of the function or method
  NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL:
    sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
    problemMessage: "{0} positional arguments expected by '{2}', but {1} found."
    correctionMessage: Try adding the missing arguments.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the expected number of required arguments
      1: the actual number of positional arguments given
      2: name of the function or method
  NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
    problemMessage: "Non-nullable instance field '{0}' must be initialized."
    correctionMessage: "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`

      #### Examples

      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
    problemMessage: "Non-nullable instance field '{0}' must be initialized."
    correctionMessage: "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:
    problemMessage: "The non-nullable variable '{0}' must be initialized."
    correctionMessage: 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.

      #### Examples

      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:
    problemMessage: Type parameter bound types must be instantiated.
    correctionMessage: Try adding type arguments to the type parameter bound.
    hasPublishedDocs: false
    comment: No parameters.
  NOT_ITERABLE_SPREAD:
    problemMessage: "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`.

      #### Example

      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:
    problemMessage: "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`.

      #### Example

      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:
    problemMessage: "The Null-typed expression can't be used with a non-null-aware spread."
    hasPublishedDocs: false
    comment: No parameters.
  NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
    problemMessage: Annotation creation must have arguments.
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Can't infer missing types in '{0}' from overridden methods: {1}."
    correctionMessage: "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
    problemMessage: "The superclass '{0}' doesn't have a zero argument constructor."
    correctionMessage: "Try declaring a zero argument constructor in '{0}', or explicitly invoking a different constructor in '{0}'."
    hasPublishedDocs: false
    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
    problemMessage: "The superclass '{0}' doesn't have a zero argument constructor."
    correctionMessage: "Try declaring a zero argument constructor in '{0}', or declaring a constructor in {1} that explicitly invokes a constructor in '{0}'."
    hasPublishedDocs: false
    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:
    problemMessage: "The class '{0}' can't extend '{1}' because '{1}' only has factory constructors (no generative constructors), and '{0}' has at least one generative constructor."
    correctionMessage: "Try implementing the class instead, adding a generative (not factory) constructor to the superclass '{1}', or a factory constructor to the subclass."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subclass
      1: the name of the superclass
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that has at least one
      generative constructor (whether explicit or implicit) has a superclass
      that doesn't have any generative constructors. Every generative
      constructor, except the one defined in `Object`, invokes, either
      explicitly or implicitly, one of the generative constructors from its
      superclass.

      #### Example

      The following code produces this diagnostic because the class `B` has an
      implicit generative constructor that can't invoke a generative constructor
      from `A` because `A` doesn't have any generative constructors:

      ```dart
      class A {
        factory A.none() => throw '';
      }

      class B extends [!A!] {}
      ```

      #### Common fixes

      If the superclass should have a generative constructor, then add one:

      ```dart
      class A {
        A();
        factory A.none() => throw '';
      }

      class B extends A {}
      ```

      If the subclass shouldn't have a generative constructor, then remove it by
      adding a factory constructor:

      ```dart
      class A {
        factory A.none() => throw '';
      }

      class B extends A {
        factory B.none() => throw '';
      }
      ```

      If the subclass must have a generative constructor but the superclass
      can't have one, then implement the superclass instead:

      ```dart
      class A {
        factory A.none() => throw '';
      }

      class B implements A {}
      ```
  NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
    problemMessage: "A class can't extend a nullable type."
    correctionMessage: 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:
    problemMessage: "A class, mixin, or extension type can't implement a nullable type."
    correctionMessage: Try removing the question mark.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class, mixin, or
      extension type 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:
    problemMessage: "A mixin can't have a nullable type as a superclass constraint."
    correctionMessage: 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:
    problemMessage: "A class or mixin can't mix in a nullable type."
    correctionMessage: 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:
    problemMessage: "The class 'Object' can't extend any other class."
    hasPublishedDocs: false
    comment: |-
      7.9 Superclasses: It is a compile-time error to specify an extends clause
      for class Object.
  OBSOLETE_COLON_FOR_DEFAULT_VALUE:
    problemMessage: Using a colon as the separator before a default value is no longer supported.
    correctionMessage: Try replacing the colon with an equal sign.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a colon (`:`) is used as the
      separator before the default value of an optional named parameter.
      While this syntax used to be allowed, it was removed in favor of
      using an equal sign (`=`).

      #### Example

      The following code produces this diagnostic because a colon is being used
      before the default value of the optional parameter `i`:

      ```dart
      void f({int i [!:!] 0}) {}
      ```

      #### Common fixes

      Replace the colon with an equal sign:

      ```dart
      void f({int i = 0}) {}
      ```
  ON_REPEATED:
    problemMessage: "The type '{0}' can be included in the superclass constraints only once."
    correctionMessage: 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:
    problemMessage: "Optional parameters aren't allowed when defining an operator."
    correctionMessage: 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:
    problemMessage: "Expected this library to be part of '{0}', not '{1}'."
    correctionMessage: "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 `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:
    problemMessage: "The included part '{0}' must have a part-of directive."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "The library is unnamed. A URI is expected, not a library name '{0}', in the part-of directive."
    correctionMessage: Try changing the part-of directive to a URI, or try including a different part.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: 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
      %language=3.4
      %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
      %language=3.4
      part [!'part_file.dart'!];
      ```

      #### Common fixes

      Change the `part of` directive in the [part file][] to specify its library
      by URI:

      ```dart
      %language=3.4
      %uri="lib/part_file.dart"
      part of 'test.dart';
      ```
  PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE:
    problemMessage: Only local variables can be assigned in pattern assignments.
    correctionMessage: Try assigning to a local variable.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a pattern assignment assigns a
      value to anything other than a local variable. Patterns can't assign to
      fields or top-level variables.

      #### Example

      If the code is cleaner when destructuring with a pattern, then rewrite the
      code to assign the value to a local variable in a pattern declaration,
      assigning the non-local variable separately:

      ```dart
      class C {
        var x = 0;

        void f((int, int) r) {
          ([!x!], _) = r;
        }
      }
      ```

      #### Common fixes

      If the code is cleaner when using a pattern assignment, then rewrite the
      code to assign the value to a local variable, assigning the non-local
      variable separately:

      ```dart
      class C {
        var x = 0;

        void f((int, int) r) {
          var (a, _) = r;
          x = a;
        }
      }
      ```

      If the code is cleaner without using a pattern assignment, then rewrite
      the code to not use a pattern assignment:

      ```dart
      class C {
        var x = 0;

        void f((int, int) r) {
          x = r.$1;
        }
      }
      ```
  PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT:
    problemMessage: "The matched value of type '{0}' isn't assignable to the required type '{1}'."
    correctionMessage: "Try changing the required type of the pattern, or the matched value type."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the matched type
      1: the required type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type of the value on the
      right-hand side of a pattern assignment or pattern declaration doesn't
      match the type required by the pattern being used to match it.

      #### Example

      The following code produces this diagnostic because `x` might not be a
      `String` and hence might not match the object pattern:

      ```dart
      void f(Object x) {
        var [!String(length: a)!] = x;
        print(a);
      }
      ```

      #### Common fixes

      Change the code so that the type of the expression on the right-hand side
      matches the type required by the pattern:

      ```dart
      void f(String x) {
        var String(length: a) = x;
        print(a);
      }
      ```
  PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD:
    problemMessage: Pattern variables can't be assigned inside the guard of the enclosing guarded pattern.
    correctionMessage: Try assigning to a different variable.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a pattern variable is assigned
      a value inside a guard (`when`) clause.

      #### Example

      The following code produces this diagnostic because the variable `a` is
      assigned a value inside the guard clause:

      ```dart
      void f(int x) {
        if (x case var a when ([!a!] = 1) > 0) {
          print(a);
        }
      }
      ```

      #### Common fixes

      If there's a value you need to capture, then assign it to a different
      variable:

      ```dart
      void f(int x) {
        var b;
        if (x case var a when (b = 1) > 0) {
          print(a + b);
        }
      }
      ```

      If there isn't a value you need to capture, then remove the assignment:

      ```dart
      void f(int x) {
        if (x case var a when 1 > 0) {
          print(a);
        }
      }
      ```
  PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE:
    sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
    problemMessage: "The variable '{0}' doesn't have the same type and/or finality in all cases that share this body."
    correctionMessage: Try declaring the variable pattern with the same type and finality in all cases.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the pattern variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when multiple case clauses in a
      switch statement share a body, and at least one of them declares a
      variable that is referenced in the shared statements, but the variable is
      either not declared in all of the case clauses or it is declared in
      inconsistent ways.

      If the variable isn't declared in all of the case clauses, then it won't
      have a value if one of the clauses that doesn't declare the variable is
      the one that matches and executes the body. This includes the situation
      where one of the case clauses is the `default` clause.

      If the variable is declared in inconsistent ways, either being `final` in
      some cases and not `final` in others or having a different type in
      different cases, then the semantics of what the type or finality of the
      variable should be are not defined.

      #### Examples

      The following code produces this diagnostic because the variable `a` is
      only declared in one of the case clauses, and won't have a value if the
      second clause is the one that matched `x`:

      ```dart
      void f(Object? x) {
        switch (x) {
          case int a when a > 0:
          case 0:
            [!a!];
        }
      }
      ```

      The following code produces this diagnostic because the variable `a` isn't
      declared in the `default` clause, and won't have a value if the body is
      executed because none of the other clauses matched `x`:

      ```dart
      void f(Object? x) {
        switch (x) {
          case int a when a > 0:
          default:
            [!a!];
        }
      }
      ```

      The following code produces this diagnostic because the variable `a` won't
      have a value if the body is executed because a different group of cases
      caused control to continue at the label:

      ```dart
      void f(Object? x) {
        switch (x) {
          someLabel:
          case int a when a > 0:
            [!a!];
          case int b when b < 0:
            continue someLabel;
        }
      }
      ```

      The following code produces this diagnostic because the variable `a`,
      while being assigned in all of the case clauses, doesn't have then same
      type associated with it in every clause:

      ```dart
      void f(Object? x) {
        switch (x) {
          case int a when a < 0:
          case num a when a > 0:
            [!a!];
        }
      }
      ```

      The following code produces this diagnostic because the variable `a` is
      `final` in the first case clause and isn't `final` in the second case
      clause:

      ```dart
      void f(Object? x) {
        switch (x) {
          case final int a when a < 0:
          case int a when a > 0:
            [!a!];
        }
      }
      ```

      #### Common fixes

      If the variable isn't declared in all of the cases, and you need to
      reference it in the statements, then declare it in the other cases:

      ```dart
      void f(Object? x) {
        switch (x) {
          case int a when a > 0:
          case int a when a == 0:
            a;
        }
      }
      ```

      If the variable isn't declared in all of the cases, and you don't need to
      reference it in the statements, then remove the references to it and
      remove the declarations from the other cases:

      ```dart
      void f(int x) {
        switch (x) {
          case > 0:
          case 0:
        }
      }
      ```

      If the type of the variable is different, decide the type the variable
      should have and make the cases consistent:

      ```dart
      void f(Object? x) {
        switch (x) {
          case num a when a < 0:
          case num a when a > 0:
            a;
        }
      }
      ```

      If the finality of the variable is different, decide whether it should be
      `final` or not `final` and make the cases consistent:

      ```dart
      void f(Object? x) {
        switch (x) {
          case final int a when a < 0:
          case final int a when a > 0:
            a;
        }
      }
      ```
  PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL:
    sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
    problemMessage: "The variable '{0}' is not available because there is a label or 'default' case."
    correctionMessage: Try removing the label, or providing the 'default' case with its own body.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the pattern variable
  PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES:
    sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
    problemMessage: "The variable '{0}' is available in some, but not all cases that share this body."
    correctionMessage: Try declaring the variable pattern with the same type and finality in all cases.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the pattern variable
  POSITIONAL_FIELD_IN_OBJECT_PATTERN:
    problemMessage: Object patterns can only use named fields.
    correctionMessage: Try specifying the field name.
    comment: No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an object pattern contains a
      field without specifying the getter name. Object pattern fields match
      against values that the object's getters return. Without a getter name
      specified, the pattern field can't access a value to attempt to match against.

      #### Example

      The following code produces this diagnostic because the object pattern
      `String(1)` doesn't specify which getter of `String` to access and compare
      with the value `1`:

      ```dart
      void f(Object o) {
        if (o case String([!1!])) {}
      }
      ```

      #### Common fixes

      Add the getter name to access the value, followed
      by a colon before the pattern to match against:

      ```dart
      void f(Object o) {
        if (o case String(length: 1)) {}
      }
      ```
  POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
    problemMessage: Positional super parameters can't be used when the super constructor invocation has a positional argument.
    correctionMessage: Try making all the positional parameters passed to the super constructor be either all super parameters or all normal parameters.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when some, but not all, of the
      positional parameters provided to the constructor of the superclass are
      using a super parameter.

      Positional super parameters are associated with positional parameters in
      the super constructor by their index. That is, the first super parameter
      is associated with the first positional parameter in the super
      constructor, the second with the second, and so on. The same is true for
      positional arguments. Having both positional super parameters and
      positional arguments means that there are two values associated with the
      same parameter in the superclass's constructor, and hence isn't allowed.

      #### Example

      The following code produces this diagnostic because the constructor
      `B.new` is using a super parameter to pass one of the required positional
      parameters to the super constructor in `A`, but is explicitly passing the
      other in the super constructor invocation:

      ```dart
      class A {
        A(int x, int y);
      }

      class B extends A {
        B(int x, super.[!y!]) : super(x);
      }
      ```

      #### Common fixes

      If all the positional parameters can be super parameters, then convert the
      normal positional parameters to be super parameters:

      ```dart
      class A {
        A(int x, int y);
      }

      class B extends A {
        B(super.x, super.y);
      }
      ```

      If some positional parameters can't be super parameters, then convert the
      super parameters to be normal parameters:

      ```dart
      class A {
        A(int x, int y);
      }

      class B extends A {
        B(int x, int y) : super(x, y);
      }
      ```
  PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
    problemMessage: "The name '{0}' is already used as an import prefix and can't be used to name a top-level element."
    correctionMessage: 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:
    problemMessage: "The name '{0}' refers to an import prefix, so it must be followed by '.'."
    correctionMessage: 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:
    problemMessage: "The prefix '{0}' can't be used here because it's shadowed by a local declaration."
    correctionMessage: Try renaming either the prefix or the local declaration.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the prefix being shadowed
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an import prefix is used in a
      context where it isn't visible because it was shadowed by a local
      declaration.

      #### Example

      The following code produces this diagnostic because the prefix `a` is
      being used to access the class `Future`, but isn't visible because it's
      shadowed by the parameter `a`:

      ```dart
      import 'dart:async' as a;

      a.Future? f(int a) {
        [!a!].Future? x;
        return x;
      }
      ```

      #### Common fixes

      Rename either the prefix:

      ```dart
      import 'dart:async' as p;

      p.Future? f(int a) {
        p.Future? x;
        return x;
      }
      ```

      Or rename the local variable:

      ```dart
      import 'dart:async' as a;

      a.Future? f(int p) {
        a.Future? x;
        return x;
      }
      ```
  PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
    problemMessage: "The private name '{0}', defined by '{1}', conflicts with the same name defined by '{2}'."
    correctionMessage: "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 `a.dart` containing the following code:

      ```dart
      %uri="lib/a.dart"
      mixin A {
        void _foo() {}
      }

      mixin B {
        void _foo() {}
      }
      ```

      The following code produces this diagnostic because the mixins `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:
    problemMessage: "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:
    problemMessage: "The setter '{0}' is private and can't be accessed outside the library that declares it."
    correctionMessage: Try making it public.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the setter
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a private setter is used in a
      library where it isn't visible.

      #### Example

      Given a file `a.dart` that contains the following:

      ```dart
      %uri="lib/a.dart"
      class A {
        static int _f = 0;
      }
      ```

      The following code produces this diagnostic because it references the
      private setter `_f` even though the setter isn't visible:

      ```dart
      import 'a.dart';

      void f() {
        A.[!_f!] = 0;
      }
      ```

      #### Common fixes

      If you're able to make the setter public, then do so:

      ```dart
      %uri="lib/a.dart"
      class A {
        static int f = 0;
      }
      ```

      If you aren't able to make the setter public, then find a different way to
      implement the code.
  READ_POTENTIALLY_UNASSIGNED_FINAL:
    problemMessage: "The final variable '{0}' can't be read because it's potentially unassigned at this point."
    correctionMessage: Ensure that it is assigned on necessary execution paths.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a final local variable that
      isn't initialized at the declaration site is read at a point where the
      compiler can't prove that the variable is always initialized before it's
      referenced.

      #### Example

      The following code produces this diagnostic because the final local
      variable `x` is read (on line 3) when it's possible that it hasn't yet
      been initialized:

      ```dart
      int f() {
        final int x;
        return [!x!];
      }
      ```

      #### Common fixes

      Ensure that the variable has been initialized before it's read:

      ```dart
      int f(bool b) {
        final int x;
        if (b) {
          x = 0;
        } else {
          x = 1;
        }
        return x;
      }
      ```
  RECURSIVE_COMPILE_TIME_CONSTANT:
    problemMessage: 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_CONSTANT_CONSTRUCTOR:
    problemMessage: "The constant constructor depends on itself."
    hasPublishedDocs: false
    comment: No parameters.
  RECURSIVE_CONSTRUCTOR_REDIRECT:
    problemMessage: "Constructors can't redirect to themselves either directly or indirectly."
    correctionMessage: 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.

      #### Examples

      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
    problemMessage: "Constructors can't redirect to themselves either directly or indirectly."
    correctionMessage: Try changing one of the constructors in the loop to not redirect.
    hasPublishedDocs: true
    comment: No parameters.
  RECURSIVE_INTERFACE_INHERITANCE:
    problemMessage: "'{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
    problemMessage: "'{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
    problemMessage: "'{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
    problemMessage: "'{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
    problemMessage: "'{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:
    problemMessage: "The constructor '{0}' couldn't be found in '{1}'."
    correctionMessage: "Try redirecting to a different constructor, or defining the constructor named '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the constructor
      1: the name of the class
    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:
    problemMessage: "Generative constructors can't redirect to a factory constructor."
    correctionMessage: 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:
    problemMessage: "The redirecting constructor '{0}' can't redirect to a constructor of the abstract class '{1}'."
    correctionMessage: Try redirecting to a constructor of a different class.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the redirecting constructor
      1: the name of the abstract class defining the constructor being redirected to
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor redirects to a
      constructor in an abstract class.

      #### Example

      The following code produces this diagnostic because the factory
      constructor in `A` redirects to a constructor in `B`, but `B` is an
      abstract class:

      ```dart
      class A {
        factory A() = [!B!];
      }

      abstract class B implements A {}
      ```

      #### Common fixes

      If the code redirects to the correct constructor, then change the class so
      that it isn't abstract:

      ```dart
      class A {
        factory A() = B;
      }

      class B implements A {}
      ```

      Otherwise, change the factory constructor so that it either redirects to a
      constructor in a concrete class, or has a concrete implementation.
  REDIRECT_TO_INVALID_FUNCTION_TYPE:
    problemMessage: "The redirected constructor '{0}' has incompatible parameters with '{1}'."
    correctionMessage: 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:
    problemMessage: "The return type '{0}' of the redirected constructor isn't a subtype of '{1}'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The constructor '{0}' couldn't be found in '{1}'."
    correctionMessage: "Try redirecting to a different constructor, or define the constructor named '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the constructor
      1: the name of the class containing the constructor
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor redirects to a
      constructor that doesn't exist.

      #### Example

      The following code produces this diagnostic because the factory
      constructor in `A` redirects to a constructor in `B` that doesn't exist:

      ```dart
      class A {
        factory A() = [!B.name!];
      }

      class B implements A {
        B();
      }
      ```

      #### Common fixes

      If the constructor being redirected to is correct, then define the
      constructor:

      ```dart
      class A {
        factory A() = B.name;
      }

      class B implements A {
        B();
        B.name();
      }
      ```

      If a different constructor should be invoked, then update the redirect:

      ```dart
      class A {
        factory A() = B;
      }

      class B implements A {
        B();
      }
      ```
  REDIRECT_TO_NON_CLASS:
    problemMessage: "The name '{0}' isn't a type and can't be used in a redirected constructor."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "A constant redirecting constructor can't redirect to a non-constant constructor."
    correctionMessage: 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:
    problemMessage: "A redirecting constructor can't redirect to a type alias that expands to a type parameter."
    correctionMessage: Try replacing it with a class.
    hasPublishedDocs: true
    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:
    problemMessage: "Local variable '{0}' can't be referenced before it is declared."
    correctionMessage: "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: |-
      Parameters:
      0: the name of the variable
    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.

      #### Example

      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);
      }
      ```
  REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT:
    problemMessage: Refutable patterns can't be used in an irrefutable context.
    correctionMessage: Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a [refutable pattern][] is used
      in a context where only an [irrefutable pattern][] is allowed.

      The refutable patterns that are disallowed are:
      - logical-or
      - relational
      - null-check
      - constant

      The contexts that are checked are:
      - pattern-based variable declarations
      - pattern-based for loops
      - assignments with a pattern on the left-hand side

      #### Example

      The following code produces this diagnostic because the null-check
      pattern, which is a refutable pattern, is in a pattern-based variable
      declaration, which doesn't allow refutable patterns:

      ```dart
      void f(int? x) {
        var ([!_?!]) = x;
      }
      ```

      #### Common fixes

      Rewrite the code to not use a refutable pattern in an irrefutable context.
  RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE:
    problemMessage: "The constant expression type '{0}' is not assignable to the parameter type '{1}' of the '{2}' operator."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the operand type
      1: the parameter type of the invoked operator
      2: the name of the invoked operator
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the operand of a relational
      pattern has a type that isn't assignable to the parameter of the operator
      that will be invoked.

      #### Example

      The following code produces this diagnostic because the operand in the
      relational pattern (`0`) is an `int`, but the `>` operator defined in `C`
      expects an object of type `C`:

      ```dart
      class C {
        const C();

        bool operator >(C other) => true;
      }

      void f(C c) {
        switch (c) {
          case > [!0!]:
            print('positive');
        }
      }
      ```

      #### Common fixes

      If the switch is using the correct value, then change the case to compare
      the value to the right type of object:

      ```dart
      class C {
        const C();

        bool operator >(C other) => true;
      }

      void f(C c) {
        switch (c) {
          case > const C():
            print('positive');
        }
      }
      ```

      If the switch is using the wrong value, then change the expression used to
      compute the value being matched:

      ```dart
      class C {
        const C();

        bool operator >(C other) => true;

        int get toInt => 0;
      }

      void f(C c) {
        switch (c.toInt) {
          case > 0:
            print('positive');
        }
      }
      ```

  RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL:
    problemMessage: The return type of operators used in relational patterns must be assignable to 'bool'.
    correctionMessage: Try updating the operator declaration to return 'bool'.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a relational pattern references
      an operator that doesn't produce a value of type `bool`.

      #### Example

      The following code produces this diagnostic because the operator `>`, used
      in the relational pattern `> c2`, returns a value of type `int` rather
      than a `bool`:

      ```dart
      class C {
        const C();

        int operator >(C c) => 3;

        bool operator <(C c) => false;
      }

      const C c2 = C();

      void f(C c1) {
        if (c1 case [!>!] c2) {}
      }
      ```

      #### Common fixes

      If there's a different operator that should be used, then change the
      operator:

      ```dart
      class C {
        const C();

        int operator >(C c) => 3;

        bool operator <(C c) => false;
      }

      const C c2 = C();

      void f(C c1) {
        if (c1 case < c2) {}
      }
      ```

      If the operator is expected to return `bool`, then update the declaration
      of the operator:

      ```dart
      class C {
        const C();

        bool operator >(C c) => true;

        bool operator <(C c) => false;
      }

      const C c2 = C();

      void f(C c1) {
        if (c1 case > c2) {}
      }
      ```
  REST_ELEMENT_IN_MAP_PATTERN:
    problemMessage: A map pattern can't contain a rest pattern.
    correctionMessage: Try removing the rest pattern.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a map pattern contains a rest
      pattern. Map patterns match a map with more keys
      than those explicitly given in the pattern (as long as the given keys match),
      so a rest pattern is unnecessary.

      #### Example

      The following code produces this diagnostic because the map pattern contains
      a rest pattern:

      ```dart
      void f(Map<int, String> x) {
        if (x case {0: _, [!...!]}) {}
      }
      ```

      #### Common fixes

      Remove the rest pattern:

      ```dart
      void f(Map<int, String> x) {
        if (x case {0: _}) {}
      }
      ```
  RETHROW_OUTSIDE_CATCH:
    problemMessage: A rethrow must be inside of a catch clause.
    correctionMessage: "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:
    problemMessage: "Constructors can't return values."
    correctionMessage: 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:
    problemMessage: "Can't return a value from a generator function that uses the 'async*' or 'sync*' modifier."
    correctionMessage: "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`.

      #### Examples

      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
    problemMessage: "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
    problemMessage: "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.

      #### Example

      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
    problemMessage: "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 type of the expression 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:
    problemMessage: The returned type '{0}' isn't returnable from a '{1}' function, 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.

      #### Example

      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:
    problemMessage: "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.

      #### Example

      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;
      }
      ```
  SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
    sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
    problemMessage: "The class '{0}' can't be extended, implemented, or mixed in outside of its library because it's a sealed class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the sealed class being extended, implemented, or mixed in
  SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
    sharedName: SET_ELEMENT_TYPE_NOT_ASSIGNABLE
    problemMessage: "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
  SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
    problemMessage: "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:
    problemMessage: "The prefix of a deferred import can't be used in other import directives."
    correctionMessage: 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:
    problemMessage: "Constant values from a deferred library can't be spread into a const literal."
    correctionMessage: Try making the deferred import non-deferred.
    hasPublishedDocs: false
  STATIC_ACCESS_TO_INSTANCE_MEMBER:
    problemMessage: "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.

      #### Example

      The following code produces this diagnostic because `x` is an instance
      field:

      ```dart
      class C {
        static int a = 0;

        int b = 0;
      }

      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
      class C {
        static int a = 0;

        int b = 0;
      }

      int f() => C.a;
      ```

      If you intend to access the instance field, then use an instance of the
      class to access the field:

      ```dart
      class C {
        static int a = 0;

        int b = 0;
      }

      int f(C c) => c.b;
      ```
  SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED:
    sharedName: SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
    problemMessage: "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype '{1}' is 'base'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subtype that is not 'base', 'final', or 'sealed'
      1: the name of the 'base' supertype
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class or mixin has a direct
      or indirect supertype that is either `base` or `final`, but the class or
      mixin itself isn't marked either `base`, `final`, or `sealed`.

      #### Example

      The following code produces this diagnostic because the class `B` is a
      subtype of `A`, and `A` is a `base` class, but `B` is neither `base`,
      `final` or `sealed`:

      ```dart
      base class A {}
      class [!B!] extends A {}
      ```

      #### Common fixes

      Add either `base`, `final` or `sealed` to the class or mixin declaration:

      ```dart
      base class A {}
      final class B extends A {}
      ```
  SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED:
    sharedName: SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
    problemMessage: "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype '{1}' is 'final'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subtype that is not 'base', 'final', or 'sealed'
      1: the name of the 'final' supertype
  SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
    problemMessage: The type '{0}' of this parameter isn't a subtype of the type '{1}' of the associated super constructor parameter.
    correctionMessage: Try removing the explicit type annotation from the parameter.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type of super-parameter
      1: the type of associated super-constructor parameter
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type of a super parameter
      isn't a subtype of the corresponding parameter from the super constructor.

      #### Example

      The following code produces this diagnostic because the type of the super
      parameter `x` in the constructor for `B` isn't a subtype of the parameter
      `x` in the constructor for `A`:

      ```dart
      class A {
        A(num x);
      }

      class B extends A {
        B(String super.[!x!]);
      }
      ```

      #### Common fixes

      If the type of the super parameter can be the same as the parameter from
      the super constructor, then remove the type annotation from the super
      parameter (if the type is implicit, it is inferred from the type in the
      super constructor):

      ```dart
      class A {
        A(num x);
      }

      class B extends A {
        B(super.x);
      }
      ```

      If the type of the super parameter can be a subtype of the corresponding
      parameter's type, then change the type of the super parameter:

      ```dart
      class A {
        A(num x);
      }

      class B extends A {
        B(int super.x);
      }
      ```

      If the type of the super parameter can't be changed, then use a normal
      parameter instead of a super parameter:

      ```dart
      class A {
        A(num x);
      }

      class B extends A {
        B(String x) : super(x.length);
      }
      ```
  SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
    problemMessage: No associated named super constructor parameter.
    correctionMessage: Try changing the name to the name of an existing named super constructor parameter, or creating such named parameter.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there's a named super parameter
      in a constructor and the implicitly or explicitly invoked super
      constructor doesn't have a named parameter with the same name.

      Named super parameters are associated by name with named parameters in the
      super constructor.

      #### Example

      The following code produces this diagnostic because the constructor in `A`
      doesn't have a parameter named `y`:

      ```dart
      class A {
        A({int? x});
      }

      class B extends A {
        B({super.[!y!]});
      }
      ```

      #### Common fixes

      If the super parameter should be associated with an existing parameter
      from the super constructor, then change the name to match the name of the
      corresponding parameter:

      ```dart
      class A {
        A({int? x});
      }

      class B extends A {
        B({super.x});
      }
      ```

      If the super parameter should be associated with a parameter that hasn't
      yet been added to the super constructor, then add it:

      ```dart
      class A {
        A({int? x, int? y});
      }

      class B extends A {
        B({super.y});
      }
      ```

      If the super parameter doesn't correspond to a named parameter from the
      super constructor, then change it to be a normal parameter:

      ```dart
      class A {
        A({int? x});
      }

      class B extends A {
        B({int? y});
      }
      ```
  SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
    problemMessage: No associated positional super constructor parameter.
    correctionMessage: Try using a normal parameter, or adding more positional parameters to the super constructor.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there's a positional super
      parameter in a constructor and the implicitly or explicitly invoked super
      constructor doesn't have a positional parameter at the corresponding
      index.

      Positional super parameters are associated with positional parameters in
      the super constructor by their index. That is, the first super parameter
      is associated with the first positional parameter in the super
      constructor, the second with the second, and so on.

      #### Examples

      The following code produces this diagnostic because the constructor in `B`
      has a positional super parameter, but there's no positional parameter in
      the super constructor in `A`:

      ```dart
      class A {
        A({int? x});
      }

      class B extends A {
        B(super.[!x!]);
      }
      ```

      The following code produces this diagnostic because the constructor in `B`
      has two positional super parameters, but there's only one positional
      parameter in the super constructor in `A`, which means that there's no
      corresponding parameter for `y`:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        B(super.x, super.[!y!]);
      }
      ```

      #### Common fixes

      If the super constructor should have a positional parameter corresponding
      to the super parameter, then update the super constructor appropriately:

      ```dart
      class A {
        A(int x, int y);
      }

      class B extends A {
        B(super.x, super.y);
      }
      ```

      If the super constructor is correct, or can't be changed, then convert the
      super parameter into a normal parameter:

      ```dart
      class A {
        A(int x);
      }

      class B extends A {
        B(super.x, int y);
      }
      ```
  IMPLEMENTS_DEFERRED_CLASS:
    sharedName: SUBTYPE_OF_DEFERRED_CLASS
    problemMessage: "Classes and mixins can't implement deferred classes."
    correctionMessage: 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
    problemMessage: "Classes can't mixin deferred classes."
    correctionMessage: Try changing the import to not be deferred.
    hasPublishedDocs: true
    comment: No parameters.
  EXTENDS_DEFERRED_CLASS:
    sharedName: SUBTYPE_OF_DEFERRED_CLASS
    problemMessage: "Classes can't extend deferred classes."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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
    problemMessage: "Classes can't extend '{0}'."
    correctionMessage: 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.

      #### Examples

      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
    problemMessage: "Classes can't mixin '{0}'."
    correctionMessage: 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
    problemMessage: "'{0}' can't be used as a superclass constraint."
    correctionMessage: "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
    problemMessage: "Classes and mixins can't implement '{0}'."
    correctionMessage: 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
    problemMessage: "A type alias that expands to a type parameter can't be used as a superclass."
    correctionMessage: 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
    problemMessage: "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
    problemMessage: "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
    problemMessage: "A type alias that expands to a type parameter can't be implemented."
    correctionMessage: Try specifying a class or mixin, or removing the list.
    hasPublishedDocs: true
    comment: No parameters.
  SUPER_INITIALIZER_IN_OBJECT:
    problemMessage: "The class 'Object' can't invoke a constructor from a superclass."
    hasPublishedDocs: false
    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_INVOCATION_NOT_LAST:
    previousName: INVALID_SUPER_INVOCATION
    problemMessage: "The superconstructor call must be last in an initializer list: '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the superinitializer
    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);
      }
      ```
  SUPER_IN_ENUM_CONSTRUCTOR:
    problemMessage: The enum constructor can't have a 'super' initializer.
    correctionMessage: Try removing the 'super' invocation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the initializer list in a
      constructor in an enum contains an invocation of a super constructor.

      #### Example

      The following code produces this diagnostic because the constructor in
      the enum `E` has a super constructor invocation in the initializer list:

      ```dart
      enum E {
        e;

        const E() : [!super!]();
      }
      ```

      #### Common fixes

      Remove the super constructor invocation:

      ```dart
      enum E {
        e;

        const E();
      }
      ```
  SUPER_IN_EXTENSION:
    problemMessage: "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.

      #### Example

      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_EXTENSION_TYPE:
    problemMessage: "The 'super' keyword can't be used in an extension type because an extension type doesn't have a superclass."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when `super` is used in an instance
      member of an extension type. Extension types don't have superclasses, so
      there's no inherited member that could be invoked.

      #### Example

      The following code produces this diagnostic because :

      ```dart
      extension type E(String s) {
        void m() {
          [!super!].m();
        }
      }
      ```

      #### Common fixes

      Replace or remove the `super` invocation:

      ```dart
      extension type E(String s) {
        void m() {
          s.toLowerCase();
        }
      }
      ```
  SUPER_IN_INVALID_CONTEXT:
    problemMessage: "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 an instance method.

      #### Example

      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:
    problemMessage: "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:
    problemMessage: "The 'case' shouldn't complete normally."
    correctionMessage: "Try adding 'break', 'return', or 'throw'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the statements following a
      `case` label in a `switch` statement could fall through to the next `case`
      or `default` label.

      #### Example

      The following code produces this diagnostic because the `case` label with
       a value of zero (`0`) falls through to the `default` statements:

      ```dart
      %language=2.18
      void f(int a) {
        switch (a) {
          [!case!] 0:
            print(0);
          default:
            return;
        }
      }
      ```

      #### Common fixes

      Change the flow of control so that the `case` won't fall through. There
      are several ways that this can be done, including adding one of the
      following at the end of the current list of statements:
      - a `return` statement,
      - a `throw` expression,
      - a `break` statement,
      - a `continue`, or
      - an invocation of a function or method whose return type is `Never`.
  SWITCH_EXPRESSION_NOT_ASSIGNABLE:
    removedIn: "3.0"
    problemMessage: "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:
    problemMessage: "A generative constructor of an abstract class can't be torn off."
    correctionMessage: Try tearing off a constructor of a concrete class, or a non-generative constructor.
    hasPublishedDocs: true
    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:
    problemMessage: "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:
    problemMessage: "The type of '{0}' can't be inferred because it depends on itself through the cycle: {1}."
    correctionMessage: 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:
    problemMessage: "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:
    problemMessage: "The deferred type '{0}' can't be used in a declaration, cast, or type test."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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:
    problemMessage: "'{0}' doesn't conform to the bound '{2}' of the type parameter '{1}'."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "Static members can't reference type parameters of the class."
    correctionMessage: 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:
    problemMessage: "'{0}' can't be a supertype of its upper bound."
    correctionMessage: "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.

      #### Examples

      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:
    problemMessage: "The name '{0}' isn't a type and can't be used in an 'is' expression."
    correctionMessage: Try correcting the name to match an existing type.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type
    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:
    problemMessage: "The name '{0}' isn't defined, so it can't be used in an 'is' expression."
    correctionMessage: "Try changing the name to the name of an existing type, or creating a type with the name '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the name following the `is` in a
      type test expression isn't defined.

      #### Example

      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
    problemMessage: "A nullable expression can't be used in a spread."
    correctionMessage: "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
    problemMessage: "The function can't be unconditionally invoked because it can be 'null'."
    correctionMessage: "Try adding a null check ('!')."
    hasPublishedDocs: true
  UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
    problemMessage: "The method '{0}' can't be unconditionally invoked because the receiver can be 'null'."
    correctionMessage: "Try making the call conditional (using '?.') or adding a null check to the target ('!')."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the method
  UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
    problemMessage: "The operator '{0}' can't be unconditionally invoked because the receiver can be 'null'."
    correctionMessage: "Try adding a null check to the target ('!')."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the operator
  UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
    sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
    problemMessage: "A nullable expression can't be used in a yield-each statement."
    correctionMessage: "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
    problemMessage: "A nullable expression can't be used as a condition."
    correctionMessage: "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
    problemMessage: "A nullable expression can't be used as an iterator in a for-in loop."
    correctionMessage: "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
    problemMessage: "The property '{0}' can't be unconditionally accessed because the receiver can be 'null'."
    correctionMessage: "Try making the access conditional (using '?.') or adding a null check to the target ('!')."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the property
  UNDEFINED_ANNOTATION:
    problemMessage: "Undefined name '{0}' used as an annotation."
    correctionMessage: Try defining the name or importing it from another library.
    isUnresolvedIdentifier: true
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the annotation
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a name that isn't defined is
      used as an annotation.

      #### Example

      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:
    problemMessage: "Undefined class '{0}'."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "Undefined class '{0}'."
    correctionMessage: "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:
    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'."
    correctionMessage: "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
    problemMessage: "The class '{0}' doesn't have an unnamed constructor."
    correctionMessage: "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:
    problemMessage: "There's no constant named '{0}' in '{1}'."
    correctionMessage: "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 enum value that is not defined
      1: the name of the enum 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 value, and the name either isn't
      defined or isn't visible in the scope in which it's being referenced.

      #### Example

      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_ENUM_CONSTRUCTOR_NAMED:
    sharedName: UNDEFINED_ENUM_CONSTRUCTOR
    problemMessage: The enum doesn't have a constructor named '{0}'.
    correctionMessage: Try correcting the name to the name of an existing constructor, or defining constructor with the name '{0}'.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the constructor that is undefined
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the constructor invoked to
      initialize an enum value doesn't exist.

      #### Examples

      The following code produces this diagnostic because the enum value `c`
      is being initialized by the unnamed constructor, but there's no unnamed
      constructor defined in `E`:

      ```dart
      enum E {
        [!c!]();

        const E.x();
      }
      ```

      The following code produces this diagnostic because the enum value `c` is
      being initialized by the constructor named `x`, but there's no constructor
      named `x` defined in `E`:

      ```dart
      enum E {
        c.[!x!]();

        const E.y();
      }
      ```

      #### Common fixes

      If the enum value is being initialized by the unnamed constructor and one
      of the named constructors should have been used, then add the name of the
      constructor:

      ```dart
      enum E {
        c.x();

        const E.x();
      }
      ```

      If the enum value is being initialized by the unnamed constructor and none
      of the named constructors are appropriate, then define the unnamed
      constructor:

      ```dart
      enum E {
        c();

        const E();
      }
      ```

      If the enum value is being initialized by a named constructor and one of
      the existing constructors should have been used, then change the name of
      the constructor being invoked (or remove it if the unnamed constructor
      should be used):

      ```dart
      enum E {
        c.y();

        const E();
        const E.y();
      }
      ```

      If the enum value is being initialized by a named constructor and none of
      the existing constructors should have been used, then define a constructor
      with the name that was used:

      ```dart
      enum E {
        c.x();

        const E.x();
      }
      ```
  UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
    sharedName: UNDEFINED_ENUM_CONSTRUCTOR
    problemMessage: The enum doesn't have an unnamed constructor.
    correctionMessage: Try adding the name of an existing constructor, or defining an unnamed constructor.
    hasPublishedDocs: true
  UNDEFINED_EXTENSION_GETTER:
    problemMessage: "The getter '{0}' isn't defined for the extension '{1}'."
    correctionMessage: "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:
    problemMessage: "The method '{0}' isn't defined for the extension '{1}'."
    correctionMessage: "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:
    problemMessage: "The operator '{0}' isn't defined for the extension '{1}'."
    correctionMessage: "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:
    problemMessage: "The setter '{0}' isn't defined for the extension '{1}'."
    correctionMessage: "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:
    problemMessage: "The function '{0}' isn't defined."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "The getter '{0}' isn't defined for the type '{1}'."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "The getter '{0}' isn't defined for the '{1}' function type."
    correctionMessage: "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:
    problemMessage: "Undefined name '{0}'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Undefined name 'await' in function body not marked with 'async'."
    correctionMessage: "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:
    problemMessage: "The method '{0}' isn't defined for the type '{1}'."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "The method '{0}' isn't defined for the '{1}' function type."
    correctionMessage: "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:
    problemMessage: "The named parameter '{0}' isn't defined."
    correctionMessage: "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.

      #### Example

      The following code produces this diagnostic because `m` doesn't declare a
      named parameter named `a`:

      ```dart
      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
      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
      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
      class C {
        m({int? a, int? b}) {}
      }

      void f(C c) {
        c.m(a: 1);
      }
      ```
  UNDEFINED_OPERATOR:
    problemMessage: "The operator '{0}' isn't defined for the type '{1}'."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "The name '{0}' is being referenced through the prefix '{1}', but it isn't defined in any of the libraries imported using that prefix."
    correctionMessage: "Try correcting the prefix or importing the library that defines '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the reference
      1: the name of the prefix
    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.

      #### Example

      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:
    problemMessage: "The setter '{0}' isn't defined for the type '{1}'."
    correctionMessage: "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.

      #### Example

      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
    problemMessage: "The setter '{0}' isn't defined for the '{1}' function type."
    correctionMessage: "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
    problemMessage: "The getter '{0}' isn't defined in a superclass of '{1}'."
    correctionMessage: "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
    previousName: UNDEFINED_SUPER_METHOD
    problemMessage: "The method '{0}' isn't defined in a superclass of '{1}'."
    correctionMessage: "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
    problemMessage: "The operator '{0}' isn't defined in a superclass of '{1}'."
    correctionMessage: "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
    problemMessage: "The setter '{0}' isn't defined in a superclass of '{1}'."
    correctionMessage: "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:
    problemMessage: Static members from supertypes must be qualified by the name of the defining type.
    correctionMessage: "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:
    problemMessage: Static members from the extended type or one of its superclasses must be qualified by the name of the defining type.
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "Target of URI doesn't exist: '{0}'."
    correctionMessage: 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 nonexistent 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:
    problemMessage: "Target of URI hasn't been generated: '{0}'."
    correctionMessage: Try running the generator that will generate the file referenced by the URI.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the URI pointing to a nonexistent 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`

      #### Example

      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:
    problemMessage: "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_NATIVE_EXTENSION:
    problemMessage: Dart native extensions are deprecated and aren't available in Dart 2.15.
    correctionMessage: "Try using dart:ffi for C interop."
    hasPublishedDocs: true
    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'!];
      ```

      #### Common fixes

      Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
      native library.
  USE_OF_VOID_RESULT:
    problemMessage: "This expression has a type of 'void' so its value can't be used."
    correctionMessage: "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.

      #### Example

      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.
  VALUES_DECLARATION_IN_ENUM:
    problemMessage: A member named 'values' can't be declared in an enum.
    correctionMessage: Try using a different name.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum declaration defines a
      member named `values`, whether the member is an enum value, an instance
      member, or a static member.

      Any such member conflicts with the implicit declaration of the static
      getter named `values` that returns a list containing all the enum
      constants.

      #### Example

      The following code produces this diagnostic because the enum `E` defines
      an instance member named `values`:

      ```dart
      enum E {
        v;
        void [!values!]() {}
      }
      ```

      #### Common fixes

      Change the name of the conflicting member:

      ```dart
      enum E {
        v;
        void getValues() {}
      }
      ```
  VARIABLE_TYPE_MISMATCH:
    problemMessage: "A value of type '{0}' can't be assigned to a const variable of type '{1}'."
    correctionMessage: "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`.

      #### Example

      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
      const dynamic 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
      const dynamic x = 0;
      const String y = '$x';
      ```

      If the assigned value is correct, then change the declaration to have the
      correct type:

      ```dart
      const int x = 0;
      const int y = x;
      ```
  WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
    problemMessage: "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position in '{3}'."
    correctionMessage: "Try using 'in' type parameters in 'in' positions and 'out' type parameters in 'out' positions in the superinterface."
    hasPublishedDocs: false
    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:
    problemMessage: "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.

      #### Example

      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.
      TODO(brianwilkerson): Another reasonable fix is to convert the operator to
       be a normal method.
  WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
    sharedName: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
    problemMessage: "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:
    problemMessage: 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
      class C {
        set [!s!](int x, int y) {}
      }
      ```

      The following code produces this diagnostic because the setter `s` declares
      one optional parameter:

      ```dart
      class C {
        set [!s!]([int? x]) {}
      }
      ```

      #### Common fixes

      Change the declaration so that there's exactly one required positional
      parameter:

      ```dart
      class C {
        set s(int x) {}
      }
      ```
  WRONG_NUMBER_OF_TYPE_ARGUMENTS:
    problemMessage: "The type '{0}' is declared with {1} type parameters, but {2} type arguments were given."
    correctionMessage: 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:
    problemMessage: "The constructor '{0}.{1}' doesn't have type parameters."
    correctionMessage: 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_ENUM:
    problemMessage: The enum is declared with {0} type parameters, but {1} type arguments were given.
    correctionMessage: Try adjusting the number of type arguments.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the number of type parameters that were declared
      1: the number of type arguments provided
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an enum value in an enum that
      has type parameters is instantiated 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 enum value `c`
      provides one type argument even though the enum `E` is declared to have
      two type parameters:

      ```dart
      enum E<T, U> {
        c[!<int>!]()
      }
      ```

      #### Common fixes

      If the number of type parameters is correct, then change the number of
      type arguments to match the number of type parameters:

      ```dart
      enum E<T, U> {
        c<int, String>()
      }
      ```

      If the number of type arguments is correct, then change the number of type
      parameters to match the number of type arguments:

      ```dart
      enum E<T> {
        c<int>()
      }
      ```
  WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
    problemMessage: "The extension '{0}' is declared with {1} type parameters, but {2} type arguments were given."
    correctionMessage: 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
    problemMessage: "This function is declared with {0} type parameters, but {1} type arguments were given."
    correctionMessage: Try adjusting the number of type arguments to match the number of type parameters.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the number of type parameters that were declared
      1: the number of type arguments provided
  WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
    problemMessage: "The function '{0}' is declared with {1} type parameters, but {2} type arguments were given."
    correctionMessage: Try adjusting the number of type arguments to match the number of type parameters.
    hasPublishedDocs: false
    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:
    problemMessage: "The method '{0}' is declared with {1} type parameters, but {2} type arguments are given."
    correctionMessage: 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:
    problemMessage: "'{0}' can't be used contravariantly or invariantly in '{1}'."
    correctionMessage: Try not using class type parameters in types of formal parameters of function types, nor in explicitly contravariant or invariant superinterfaces.
    hasPublishedDocs: false
    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`.

      Parameters:
      0: the name of the type parameter
      1: the name of the super interface
  WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
    problemMessage: "The '{0}' type parameter '{1}' can't be used in an '{2}' position."
    correctionMessage: "Try removing the type parameter or change the explicit variance modifier declaration for the type parameter to another one of 'in', 'out', or 'inout'."
    hasPublishedDocs: false
    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
    problemMessage: "Yield-each statements must be in a generator function (one marked with either 'async*' or 'sync*')."
    correctionMessage: "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.

      #### Examples

      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:
    problemMessage: "Yield statements must be in a generator function (one marked with either 'async*' or 'sync*')."
    correctionMessage: "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_EACH_OF_INVALID_TYPE:
    sharedName: YIELD_OF_INVALID_TYPE
    problemMessage: "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*`
  YIELD_OF_INVALID_TYPE:
    problemMessage: "A yielded value of type '{0}' 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` or `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:
  ABI_SPECIFIC_INTEGER_INVALID:
    problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type parameters."
    correctionMessage: Try removing all type parameters, removing all members, and adding one const constructor.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that extends
      `AbiSpecificInteger` doesn't meet all of the following requirements:
      - there must be exactly one constructor
      - the constructor must be marked `const`
      - there must not be any members of other than the one constructor
      - there must not be any type parameters

      #### Examples

      The following code produces this diagnostic because the class `C` doesn't
      define a const constructor:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class [!C!] extends AbiSpecificInteger {
      }
      ```

      The following code produces this diagnostic because the constructor isn't
      a `const` constructor:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class [!C!] extends AbiSpecificInteger {
        C();
      }
      ```

      The following code produces this diagnostic because the class `C` defines
      multiple constructors:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class [!C!] extends AbiSpecificInteger {
        const C.zero();
        const C.one();
      }
      ```

      The following code produces this diagnostic because the class `C` defines
      a field:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class [!C!] extends AbiSpecificInteger {
        final int i;

        const C(this.i);
      }
      ```

      The following code produces this diagnostic because the class `C` has a
      type parameter:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class [!C!]<T> extends AbiSpecificInteger { // type parameters
        const C();
      }
      ```

      #### Common fixes

      Change the class so that it meets the requirements of having no type
      parameters and a single member that is a `const` constructor:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```
  ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
    problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
    correctionMessage: Try removing the extra annotation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that extends
      `AbiSpecificInteger` has more than one `AbiSpecificIntegerMapping`
      annotation.

      #### Example

      The following code produces this diagnostic because there are two
      `AbiSpecificIntegerMapping` annotations on the class `C`:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      @[!AbiSpecificIntegerMapping!]({Abi.linuxX64 : Uint16()})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```

      #### Common fixes

      Remove all but one of the annotations, merging the arguments as
      appropriate:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8(), Abi.linuxX64 : Uint16()})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```
  ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
    problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
    correctionMessage: Try adding an annotation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class that extends
      `AbiSpecificInteger` doesn't have an `AbiSpecificIntegerMapping`
      annotation.

      #### Example

      The following code produces this diagnostic because there's no
      `AbiSpecificIntegerMapping` annotation on the class `C`:

      ```dart
      import 'dart:ffi';

      final class [!C!] extends AbiSpecificInteger {
        const C();
      }
      ```

      #### Common fixes

      Add an `AbiSpecificIntegerMapping` annotation to the class:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```
  ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
    problemMessage: "Invalid mapping to '{0}'; only mappings to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported."
    correctionMessage: Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', or 'Uint64'.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the value of the invalid mapping
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a value in the map argument of
      an `AbiSpecificIntegerMapping` annotation is anything other than one of
      the following integer types:
      - `Int8`
      - `Int16`
      - `Int32`
      - `Int64`
      - `Uint8`
      - `Uint16`
      - `UInt32`
      - `Uint64`

      #### Example

      The following code produces this diagnostic because the value of the map
      entry is `Array<Uint8>`, which isn't a valid integer type:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : [!Array<Uint8>(4)!]})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```

      #### Common fixes

      Use one of the valid types as a value in the map:

      ```dart
      import 'dart:ffi';

      @AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
      final class C extends AbiSpecificInteger {
        const C();
      }
      ```
  ADDRESS_POSITION:
    problemMessage: "The '.address' expression can only be used as argument to a leaf native external call."
    hasPublishedDocs: false
    comment: No parameters.
  ADDRESS_RECEIVER:
    problemMessage: "The receiver of '.address' must be a concrete 'TypedData', a concrete 'TypedData' '[]', an 'Array', an 'Array' '[]', a Struct field, or a Union field."
    correctionMessage: Change the receiver of '.address' to one of the allowed kinds.
    hasPublishedDocs: false
    comment: No parameters.
  ANNOTATION_ON_POINTER_FIELD:
    problemMessage: "Fields in a struct class whose type is 'Pointer' shouldn't have any annotations."
    correctionMessage: Try removing the annotation.
    comment: No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field that's declared in a
      subclass of `Struct` and has the type `Pointer` also has an annotation
      associated with it.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `p`, which
      has the type `Pointer` and is declared in a subclass of `Struct`, has the
      annotation `@Double()`:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        [!@Double()!]
        external Pointer<Int8> p;
      }
      ```

      #### Common fixes

      Remove the annotations from the field:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        external Pointer<Int8> p;
      }
      ```
  ARGUMENT_MUST_BE_A_CONSTANT:
    problemMessage: "Argument '{0}' must be a constant."
    correctionMessage: Try replacing the value with a literal or const.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the argument
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an invocation of either
      `Pointer.asFunction` or `DynamicLibrary.lookupFunction` has an `isLeaf`
      argument whose value isn't a constant expression.

      The analyzer also produces this diagnostic when an invocation of either
      `Pointer.fromFunction` or `NativeCallable.isolateLocal` has an
      `exceptionalReturn` argument whose value isn't a constant expression.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the value of the
      `isLeaf` argument is a parameter, and hence isn't a constant:

      ```dart
      import 'dart:ffi';

      int Function(int) fromPointer(
          Pointer<NativeFunction<Int8 Function(Int8)>> p, bool isLeaf) {
        return p.asFunction(isLeaf: [!isLeaf!]);
      }
      ```

      #### Common fixes

      If there's a suitable constant that can be used, then replace the argument
      with a constant:

      ```dart
      import 'dart:ffi';

      const isLeaf = false;

      int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
        return p.asFunction(isLeaf: isLeaf);
      }
      ```

      If there isn't a suitable constant, then replace the argument with a
      boolean literal:

      ```dart
      import 'dart:ffi';

      int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
        return p.asFunction(isLeaf: true);
      }
      ```
  ARGUMENT_MUST_BE_NATIVE:
    problemMessage: "Argument to 'Native.addressOf' must be annotated with @Native"
    correctionMessage: "Try passing a static function or field annotated with '@Native'"
    hasPublishedDocs: true
    comment: No parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the argument passed to
      `Native.addressOf` isn't annotated with the `Native` annotation.

      #### Examples

      The following code produces this diagnostic because the argument to
      `addressOf` is a string, not a field, and strings can't be annotated:

      ```dart
      import 'dart:ffi';

      @Native<Void Function()>()
      external void f();

      void g() {
        print(Native.addressOf([!'f'!]));
      }
      ```

      The following code produces this diagnostic because the function `f` is
      being passed to `addressOf` but isn't annotated as being `Native`:

      ```dart
      import 'dart:ffi';

      external void f();

      void g() {
        print(Native.addressOf<NativeFunction<Void Function()>>([!f!]));
      }
      ```

      #### Common fixes

      If the argument isn't either a field or a function, then replace the
      argument with a field or function that's annotated with `Native`:

      ```dart
      import 'dart:ffi';

      @Native<Void Function()>()
      external void f();

      void g() {
        print(Native.addressOf<NativeFunction<Void Function()>>(f));
      }
      ```

      If the argument is either a field or a function, then annotate the field
      of function with `Native`:

      ```dart
      import 'dart:ffi';

      @Native<Void Function()>()
      external void f();

      void g() {
        print(Native.addressOf<NativeFunction<Void Function()>>(f));
      }
      ```
  NATIVE_FIELD_INVALID_TYPE:
    problemMessage: "'{0}' is an unsupported type for native fields. Native fields only support pointers, arrays or numeric and compound types."
    correctionMessage: "Try changing the type in the `@Native` annotation to a numeric FFI type, a pointer, array, or a compound class."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: The invalid type.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an `@Native`-annotated field
      has a type not supported for native fields.

      Native fields support pointers, arrays, numeric types and subtypes of
      `Compound` (i.e., structs or unions). Other subtypes of `NativeType`,
      such as `Handle` or `NativeFunction` are not allowed as native fields.

      Native functions should be used with external functions instead of
      external fields.

      Handles are unsupported because there is no way to transparently load and
      store Dart objects into pointers.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `free` uses
      an unsupported native type, `NativeFunction`:

      ```dart
      import 'dart:ffi';

      @Native<NativeFunction<Void Function()>>()
      external void Function() [!free!];
      ```

      #### Common fixes

      If you meant to bind to an existing native function with a
      `NativeFunction` field, use `@Native` methods instead:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Pointer<Void>)>()
      external void free(Pointer<Void> ptr);
      ```

      To bind to a field storing a function pointer in C, use a pointer type
      for the Dart field:

      ```dart
      import 'dart:ffi';

      @Native()
      external Pointer<NativeFunction<Void Function(Pointer<Void>)>> free;
      ```
  NATIVE_FIELD_MISSING_TYPE:
    problemMessage: "The native type of this field could not be inferred and must be specified in the annotation."
    correctionMessage: "Try adding a type parameter extending `NativeType` to the `@Native` annotation."
    hasPublishedDocs: true
    comment: "No parameters"
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an `@Native`-annotated field
      requires a type hint on the annotation to infer the native type.

      Dart types like `int` and `double` have multiple possible native
      representations. Since the native type needs to be known at compile time
      to generate the correct load and stores when accessing the field, an
      explicit type must be given.

      #### Example

      The following code produces this diagnostic because the field `f` has
      the type `int` (for which multiple native representations exist), but no
      explicit type parameter on the `Native` annotation:

      ```dart
      import 'dart:ffi';

      @Native()
      external int [!f!];
      ```

      #### Common fixes

      To fix this diagnostic, find out the correct native representation from
      the native declaration of the field. Then, add the corresponding type to
      the annotation. For instance, if `f` was declared as an `uint8_t` in C,
      the Dart field should be declared as:

      ```dart
      import 'dart:ffi';

      @Native<Uint8>()
      external int f;
      ```

      For more information about FFI, see [C interop using dart:ffi][ffi].
  NATIVE_FIELD_NOT_STATIC:
    problemMessage: "Native fields must be static."
    correctionMessage: "Try adding the modifier 'static' to this field."
    hasPublishedDocs: true
    comment: "No parameters"
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an instance field in a class
      has been annotated with `@Native`.
      Native fields refer to global variables in C, C++ or other native
      languages, whereas instance fields in Dart are specific to an instance of
      that class. Hence, native fields must be static.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `f` in the
      class `C` is `@Native`, but not `static`:

      ```dart
      import 'dart:ffi';

      class C {
        @Native<Int>()
        external int [!f!];
      }
      ```

      #### Common fixes

      Either make the field static:

      ```dart
      import 'dart:ffi';

      class C {
        @Native<Int>()
        external static int f;
      }
      ```

      Or move it out of a class, in which case no explicit `static` modifier is
      required:

      ```dart
      import 'dart:ffi';

      class C {
      }

      @Native<Int>()
      external int f;
      ```

      If you meant to annotate an instance field that should be part of a
      struct, omit the `@Native` annotation:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int()
        external int f;
      }
      ```
  NATIVE_FUNCTION_MISSING_TYPE:
    problemMessage: The native type of this function couldn't be inferred so it must be specified in the annotation.
    correctionMessage: Try adding a type parameter extending `NativeType` to the `@Native` annotation.
    hasPublishedDocs: true
    comment: No parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `@Native`-annotated function
      requires a type hint on the annotation to infer the native function type.

      Dart types like `int` and `double` have multiple possible native
      representations. Since the native type needs to be known at compile time
      to generate correct bindings and call instructions for the function, an
      explicit type must be given.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the function `f()` has
      the return type `int`, but doesn't have an explicit type parameter on the
      `Native` annotation:

      ```dart
      import 'dart:ffi';

      @Native()
      external int [!f!]();
      ```

      #### Common fixes

      Add the corresponding type to the annotation. For instance, if `f()` was
      declared to return an `int32_t` in C, the Dart function should be declared
      as:

      ```dart
      import 'dart:ffi';

      @Native<Int32 Function()>()
      external int f();
      ```
  COMPOUND_IMPLEMENTS_FINALIZABLE:
    problemMessage: "The class '{0}' can't implement Finalizable."
    correctionMessage: "Try removing the implements clause from '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the struct or union class
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a subclass of either `Struct`
      or `Union` implements `Finalizable`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `S`
      implements `Finalizable`:

      ```dart
      import 'dart:ffi';

      final class [!S!] extends Struct implements Finalizable {
        external Pointer notEmpty;
      }
      ```

      #### Common fixes

      Try removing the implements clause from the class:

      ```dart
      import 'dart:ffi';

      final class S extends Struct {
        external Pointer notEmpty;
      }
      ```
  CREATION_OF_STRUCT_OR_UNION:
    problemMessage: "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't be instantiated by a generative constructor."
    correctionMessage: "Try allocating it via allocation, or load from a 'Pointer'."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a subclass of either `Struct`
      or `Union` is instantiated using a generative constructor.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C` is being
      instantiated using a generative constructor:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        external int a;
      }

      void f() {
        [!C!]();
      }
      ```

      #### Common fixes

      If you need to allocate the structure described by the class, then use the
      `ffi` package to do so:

      ```dart
      import 'dart:ffi';
      import 'package:ffi/ffi.dart';

      final class C extends Struct {
        @Int32()
        external int a;
      }

      void f() {
        final pointer = calloc.allocate<C>(4);
        final c = pointer.ref;
        print(c);
        calloc.free(pointer);
      }
      ```
  EMPTY_STRUCT:
    problemMessage: "The class '{0}' can't be empty because it's a subclass of '{1}'."
    correctionMessage: "Try adding a field to '{0}' or use a different superclass."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subclass
      1: the name of the superclass
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a subclass of `Struct` or
      `Union` doesn't have any fields. Having an empty `Struct` or `Union`
      isn't supported.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C`, which
      extends `Struct`, doesn't declare any fields:

      ```dart
      import 'dart:ffi';

      final class [!C!] extends Struct {}
      ```

      #### Common fixes

      If the class is intended to be a struct, then declare one or more fields:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        external int x;
      }
      ```

      If the class is intended to be used as a type argument to `Pointer`, then
      make it a subclass of `Opaque`:

      ```dart
      import 'dart:ffi';

      final class C extends Opaque {}
      ```

      If the class isn't intended to be a struct, then remove or change the
      extends clause:

      ```dart
      class C {}
      ```
  EXTRA_ANNOTATION_ON_STRUCT_FIELD:
    problemMessage: Fields in a struct class must have exactly one annotation indicating the native type.
    correctionMessage: Try removing the extra annotation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` has more than one annotation describing the native type of the
      field.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `x` has two
      annotations describing the native type of the field:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        [!@Int16()!]
        external int x;
      }
      ```

      #### Common fixes

      Remove all but one of the annotations:

      ```dart
      import 'dart:ffi';
      final class C extends Struct {
        @Int32()
        external int x;
      }
      ```
  EXTRA_SIZE_ANNOTATION_CARRAY:
    problemMessage: "'Array's must have exactly one 'Array' annotation."
    correctionMessage: Try removing the extra annotation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` has more than one annotation describing the size of the native
      array.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `a0` has two
      annotations that specify the size of the native array:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(4)
        [!@Array(8)!]
        external Array<Uint8> a0;
      }
      ```

      #### Common fixes

      Remove all but one of the annotations:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8)
        external Array<Uint8> a0;
      }
      ```
  FFI_NATIVE_MUST_BE_EXTERNAL:
    problemMessage: Native functions must be declared external.
    correctionMessage: Add the `external` keyword to the function.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a function annotated as being
      `@Native` isn't marked as `external`.

      #### Example

      The following code produces this diagnostic because the function `free` is
      annotated as being `@Native`, but the function isn't marked as `external`:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Pointer<Void>)>()
      void [!free!](Pointer<Void> ptr) {}
      ```

      #### Common fixes

      If the function is a native function, then add the modifier `external`
      before the return type:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Pointer<Void>)>()
      external void free(Pointer<Void> ptr);
      ```
      TODO(brianwilkerson): Fix error range
  FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
    problemMessage: Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.
    correctionMessage: Pass as Handle instead.
    hasPublishedDocs: false
    comment: No parameters.
  FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
    problemMessage: Unexpected number of Native annotation parameters. Expected {0} but has {1}.
    correctionMessage: Make sure parameters match the function annotated.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the expected number of parameters
      1: the actual number of parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the number of parameters in the
      function type used as a type argument for the `@Native` annotation doesn't
      match the number of parameters in the function being annotated.

      #### Example

      The following code produces this diagnostic because the function type used
      as a type argument for the `@Native` annotation (`Void Function(Double)`)
      has one argument and the type of the annotated function
      (`void f(double, double)`) has two arguments:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Double)>(symbol: 'f')
      external void [!f!](double x, double y);
      ```

      #### Common fixes

      If the annotated function is correct, then update the function type in the
      `@Native` annotation to match:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Double, Double)>(symbol: 'f')
      external void f(double x, double y);
      ```

      If the function type in the `@Native` annotation is correct, then update
      the annotated function to match:

      ```dart
      import 'dart:ffi';

      @Native<Void Function(Double)>(symbol: 'f')
      external void f(double x);
      ```
      TODO(brianwilkerson): Fix error range
  FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
    problemMessage: Unexpected number of Native annotation parameters. Expected {0} but has {1}. Native instance method annotation must have receiver as first argument.
    correctionMessage: Make sure parameters match the function annotated, including an extra first parameter for the receiver.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the expected number of parameters
      1: the actual number of parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type argument used on the
      `@Native` annotation of a native method doesn't include a type for the
      receiver of the method.

      #### Example

      The following code produces this diagnostic because the type argument on
      the `@Native` annotation (`Void Function(Double)`) doesn't include a type
      for the receiver of the method:

      ```dart
      import 'dart:ffi';

      class C {
        @Native<Void Function(Double)>()
        external void [!f!](double x);
      }
      ```

      #### Common fixes

      Add an initial parameter whose type is the same as the class in which the
      native method is being declared:

      ```dart
      import 'dart:ffi';

      class C {
        @Native<Void Function(C, Double)>()
        external void f(double x);
      }
      ```
  FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET:
    problemMessage: "There may be at most one @DefaultAsset annotation on a library."
    correctionMessage: "Try removing the extra annotation."
    hasPublishedDocs: true
    comment: No parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a library directive has more
      than one `DefaultAsset` annotation associated with it.

      #### Example

      The following code produces this diagnostic because the library directive
      has two `DefaultAsset` annotations associated with it:

      ```dart
      @DefaultAsset('a')
      @[!DefaultAsset!]('b')
      library;

      import 'dart:ffi';
      ```

      #### Common fixes

      Remove all but one of the `DefaultAsset` annotations:

      ```dart
      @DefaultAsset('a')
      library;

      import 'dart:ffi';
      ```
  FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS:
    problemMessage: "Native functions and fields must have exactly one `@Native` annotation."
    correctionMessage: "Try removing the extra annotation."
    hasPublishedDocs: true
    comment: No parameters
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there is more than one `Native`
      annotation on a single declaration.

      #### Example

      The following code produces this diagnostic because the function `f` has
      two `Native` annotations associated with it:

      ```dart
      import 'dart:ffi';

      @Native<Int32 Function(Int32)>()
      @[!Native!]<Int32 Function(Int32)>(isLeaf: true)
      external int f(int v);
      ```

      #### Common fixes

      Remove all but one of the annotations:

      ```dart
      import 'dart:ffi';

      @Native<Int32 Function(Int32)>(isLeaf: true)
      external int f(int v);
      ```
  FIELD_INITIALIZER_IN_STRUCT:
    removedIn: "3.0"
    problemMessage: "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers."
    correctionMessage: Try removing the field initializer and marking the field as external.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constructor in a subclass of
      either `Struct` or `Union` has one or more field initializers.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C` has a
      constructor with an initializer for the field `f`:

      ```dart
      // @dart = 2.9
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        int f;

        C() : [!f = 0!];
      }
      ```

      #### Common fixes

      Remove the field initializer:

      ```dart
      // @dart = 2.9
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        int f;

        C();
      }
      ```
  FIELD_IN_STRUCT_WITH_INITIALIZER:
    removedIn: "3.0"
    problemMessage: "Fields in subclasses of 'Struct' and 'Union' can't have initializers."
    correctionMessage: Try removing the initializer and marking the field as external.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` has an initializer.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `p` has an
      initializer:

      ```dart
      // @dart = 2.9
      import 'dart:ffi';

      final class C extends Struct {
        Pointer [!p!] = nullptr;
      }
      ```

      #### Common fixes

      Remove the initializer:

      ```dart
      // @dart = 2.9
      import 'dart:ffi';

      final class C extends Struct {
        Pointer p;
      }
      ```
  FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
    problemMessage: "Fields of 'Struct' and 'Union' subclasses must be marked external."
    correctionMessage: "Try adding the 'external' modifier."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of either
      `Struct` or `Union` isn't marked as being `external`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `a` isn't
      marked as being `external`:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int16()
        int [!a!];
      }
      ```

      #### Common fixes

      Add the required `external` modifier:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int16()
        external int a;
      }
      ```
  GENERIC_STRUCT_SUBCLASS:
    problemMessage: "The class '{0}' can't extend 'Struct' or 'Union' because '{0}' is generic."
    correctionMessage: "Try removing the type parameters from '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the struct class
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a subclass of either `Struct`
      or `Union` has a type parameter.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `S` defines
      the type parameter `T`:

      ```dart
      import 'dart:ffi';

      final class [!S!]<T> extends Struct {
        external Pointer notEmpty;
      }
      ```

      #### Common fixes

      Remove the type parameters from the class:

      ```dart
      import 'dart:ffi';

      final class S extends Struct {
        external Pointer notEmpty;
      }
      ```
  INVALID_EXCEPTION_VALUE:
    problemMessage: "The method {0} can't have an exceptional return value (the second argument) when the return type of the function is either 'void', 'Handle' or 'Pointer'."
    correctionMessage: Try removing the exceptional return value.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the method
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an invocation of the method
      `Pointer.fromFunction` or `NativeCallable.isolateLocal`
      has a second argument (the exceptional return
      value) and the type to be returned from the invocation is either `void`,
      `Handle` or `Pointer`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because a second argument is
      provided when the return type of `f` is `void`:

      ```dart
      import 'dart:ffi';

      typedef T = Void Function(Int8);

      void f(int i) {}

      void g() {
        Pointer.fromFunction<T>(f, [!42!]);
      }
      ```

      #### Common fixes

      Remove the exception value:

      ```dart
      import 'dart:ffi';

      typedef T = Void Function(Int8);

      void f(int i) {}

      void g() {
        Pointer.fromFunction<T>(f);
      }
      ```
  INVALID_FIELD_TYPE_IN_STRUCT:
    problemMessage: "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'."
    correctionMessage: "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type of the field
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` has a type other than `int`, `double`, `Array`, `Pointer`, or
      subtype of `Struct` or `Union`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `str` has
      the type `String`, which isn't one of the allowed types for fields in a
      subclass of `Struct`:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        external [!String!] s;

        @Int32()
        external int i;
      }
      ```

      #### Common fixes

      Use one of the allowed types for the field:

      ```dart
      import 'dart:ffi';
      import 'package:ffi/ffi.dart';

      final class C extends Struct {
        external Pointer<Utf8> s;

        @Int32()
        external int i;
      }
      ```
  LEAF_CALL_MUST_NOT_RETURN_HANDLE:
    problemMessage: "FFI leaf call can't return a 'Handle'."
    correctionMessage: Try changing the return type to primitive or struct.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the value of the `isLeaf`
      argument in an invocation of either `Pointer.asFunction` or
      `DynamicLibrary.lookupFunction` is `true` and the function that would be
      returned would have a return type of `Handle`.

      The analyzer also produces this diagnostic when the value of the `isLeaf`
      argument in an `Native` annotation is `true` and the type argument on
      the annotation is a function type whose return type is `Handle`.

      In all of these cases, leaf calls are only supported for the types `bool`,
      `int`, `float`, `double`, and, as a return type `void`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the function `p`
      returns a `Handle`, but the `isLeaf` argument is `true`:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Handle Function()>> p) {
        p.[!asFunction!]<Object Function()>(isLeaf: true);
      }
      ```

      #### Common fixes

      If the function returns a handle, then remove the `isLeaf` argument:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Handle Function()>> p) {
        p.asFunction<Object Function()>();
      }
      ```

      If the function returns one of the supported types, then correct the type
      information:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Int32 Function()>> p) {
        p.asFunction<int Function()>(isLeaf: true);
      }
      ```
  LEAF_CALL_MUST_NOT_TAKE_HANDLE:
    problemMessage: "FFI leaf call can't take arguments of type 'Handle'."
    correctionMessage: Try changing the argument type to primitive or struct.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the value of the `isLeaf`
      argument in an invocation of either `Pointer.asFunction` or
      `DynamicLibrary.lookupFunction` is `true` and the function that would be
      returned would have a parameter of type `Handle`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the function `p` has a
      parameter of type `Handle`, but the `isLeaf` argument is `true`:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
        p.[!asFunction!]<void Function(Object)>(isLeaf: true);
      }
      ```

      #### Common fixes

      If the function has at least one parameter of type `Handle`, then remove
      the `isLeaf` argument:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
        p.asFunction<void Function(Object)>();
      }
      ```

      If none of the function's parameters are `Handle`s, then correct the type
      information:

      ```dart
      import 'dart:ffi';

      void f(Pointer<NativeFunction<Void Function(Int8)>> p) {
        p.asFunction<void Function(int)>(isLeaf: true);
      }
      ```
  MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
    problemMessage: "The annotation doesn't match the declared type of the field."
    correctionMessage: Try using a different annotation or changing the declared type to match.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the annotation on a field in a
      subclass of `Struct` or `Union` doesn't match the Dart type of the field.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the annotation
      `Double` doesn't match the Dart type `int`:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        [!@Double()!]
        external int x;
      }
      ```

      #### Common fixes

      If the type of the field is correct, then change the annotation to match:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        external int x;
      }
      ```

      If the annotation is correct, then change the type of the field to match:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Double()
        external double x;
      }
      ```
  MISSING_ANNOTATION_ON_STRUCT_FIELD:
    problemMessage: "Fields of type '{0}' in a subclass of '{1}' must have an annotation indicating the native type."
    correctionMessage: Try adding an annotation.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type that is missing a native type annotation
      1: the superclass which is extended by this field's class
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` or `Union` whose type requires an annotation doesn't have one.
      The Dart types `int`, `double`, and `Array` are used to represent multiple
      C types, and the annotation specifies which of the compatible C types the
      field represents.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `x` doesn't
      have an annotation indicating the underlying width of the integer value:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        external [!int!] x;
      }
      ```

      #### Common fixes

      Add an appropriate annotation to the field:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int64()
        external int x;
      }
      ```
  MISSING_EXCEPTION_VALUE:
    problemMessage: "The method {0} must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle', nor 'Pointer'."
    correctionMessage: Try adding an exceptional return value.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the method
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an invocation of the method
      `Pointer.fromFunction` or `NativeCallable.isolateLocal`
      doesn't have a second argument (the exceptional
      return value) when the type to be returned from the invocation is neither
      `void`, `Handle`, nor `Pointer`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the type returned by
      `f` is expected to be an 8-bit integer but the call to `fromFunction`
      doesn't include an exceptional return argument:

      ```dart
      import 'dart:ffi';

      int f(int i) => i * 2;

      void g() {
        Pointer.[!fromFunction!]<Int8 Function(Int8)>(f);
      }
      ```

      #### Common fixes

      Add an exceptional return type:

      ```dart
      import 'dart:ffi';

      int f(int i) => i * 2;

      void g() {
        Pointer.fromFunction<Int8 Function(Int8)>(f, 0);
      }
      ```
  MISSING_FIELD_TYPE_IN_STRUCT:
    problemMessage: "Fields in struct classes must have an explicitly declared type of 'int', 'double' or 'Pointer'."
    correctionMessage: "Try using 'int', 'double' or 'Pointer'."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of
      `Struct` or `Union` doesn't have a type annotation. Every field must have
      an explicit type, and the type must either be `int`, `double`, `Pointer`,
      or a subclass of either `Struct` or `Union`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `str`
      doesn't have a type annotation:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        external var [!str!];

        @Int32()
        external int i;
      }
      ```

      #### Common fixes

      Explicitly specify the type of the field:

      ```dart
      import 'dart:ffi';
      import 'package:ffi/ffi.dart';

      final class C extends Struct {
        external Pointer<Utf8> str;

        @Int32()
        external int i;
      }
      ```
  MISSING_SIZE_ANNOTATION_CARRAY:
    problemMessage: "Fields of type 'Array' must have exactly one 'Array' annotation."
    correctionMessage: "Try adding an 'Array' annotation, or removing all but one of the annotations."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a field in a subclass of either
      `Struct` or `Union` has a type of `Array` but doesn't have a single
      `Array` annotation indicating the dimensions of the array.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `a0` doesn't
      have an `Array` annotation:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        external [!Array<Uint8>!] a0;
      }
      ```

      #### Common fixes

      Ensure that there's exactly one `Array` annotation on the field:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8)
        external Array<Uint8> a0;
      }
      ```
  MUST_BE_A_NATIVE_FUNCTION_TYPE:
    problemMessage: "The type '{0}' given to '{1}' must be a valid 'dart:ffi' native function type."
    correctionMessage: "Try changing the type to only use members for 'dart:ffi'."
    hasPublishedDocs: true
    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
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an invocation of either
      `Pointer.fromFunction`, `DynamicLibrary.lookupFunction`,
      or a `NativeCallable` constructor, has a type
      argument(whether explicit or inferred) that isn't a native function type.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the type `T` can be
      any subclass of `Function` but the type argument for `fromFunction` is
      required to be a native function type:

      ```dart
      import 'dart:ffi';

      int f(int i) => i * 2;

      class C<T extends Function> {
        void g() {
          Pointer.fromFunction<[!T!]>(f, 0);
        }
      }
      ```

      #### Common fixes

      Use a native function type as the type argument to the invocation:

      ```dart
      import 'dart:ffi';

      int f(int i) => i * 2;

      class C<T extends Function> {
        void g() {
          Pointer.fromFunction<Int32 Function(Int32)>(f, 0);
        }
      }
      ```
  MUST_BE_A_SUBTYPE:
    problemMessage: "The type '{0}' must be a subtype of '{1}' for '{2}'."
    correctionMessage: Try changing one or both of the type arguments.
    hasPublishedDocs: true
    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
    documentation: |-
      #### Description

      The analyzer produces this diagnostic in two cases:
      - In an invocation of `Pointer.fromFunction`, or a
        `NativeCallable` constructor where the type argument
        (whether explicit or inferred) isn't a supertype of the type of the
        function passed as the first argument to the method.
      - In an invocation of `DynamicLibrary.lookupFunction` where the first type
        argument isn't a supertype of the second type argument.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the type of the
      function `f` (`String Function(int)`) isn't a subtype of the type
      argument `T` (`Int8 Function(Int8)`):

      ```dart
      import 'dart:ffi';

      typedef T = Int8 Function(Int8);

      double f(double i) => i;

      void g() {
        Pointer.fromFunction<T>([!f!], 5.0);
      }
      ```

      #### Common fixes

      If the function is correct, then change the type argument to match:

      ```dart
      import 'dart:ffi';

      typedef T = Float Function(Float);

      double f(double i) => i;

      void g() {
        Pointer.fromFunction<T>(f, 5.0);
      }
      ```

      If the type argument is correct, then change the function to match:

      ```dart
      import 'dart:ffi';

      typedef T = Int8 Function(Int8);

      int f(int i) => i;

      void g() {
        Pointer.fromFunction<T>(f, 5);
      }
      ```
  MUST_RETURN_VOID:
    problemMessage: "The return type of the function passed to 'NativeCallable.listener' must be 'void' rather than '{0}'."
    correctionMessage: "Try changing the return type to 'void'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the return type that should be 'void'.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when you pass a function
      that doesn't return `void` to the `NativeCallable.listener` constructor.

      `NativeCallable.listener` creates a native callable that can be invoked
      from any thread. The native code that invokes the callable sends a message
      back to the isolate that created the callable, and doesn't wait for a
      response. So it isn't possible to return a result from the callable.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the function
      `f` returns `int` rather than `void`.

      ```dart
      import 'dart:ffi';

      int f(int i) => i * 2;

      void g() {
        NativeCallable<Int32 Function(Int32)>.listener([!f!]);
      }
      ```

      #### Common fixes

      Change the return type of the function to `void`.

      ```dart
      import 'dart:ffi';

      void f(int i) => print(i * 2);

      void g() {
        NativeCallable<Void Function(Int32)>.listener(f);
      }
      ```
  NEGATIVE_VARIABLE_DIMENSION:
    problemMessage: The variable dimension of a variable-length array must be non-negative.
    correctionMessage: Try using a value that is zero or greater.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic in two cases.

      The first is when the variable dimension given in an
      `Array.variableWithVariableDimension` annotation is negative. The variable
      dimension is the first argument in the annotation.

      The second is when the variable dimension given in an
      `Array.variableMulti` annotation is negative. The variable dimension is
      specified in the `variableDimension` argument of the annotation.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Examples

      The following code produces this diagnostic because a variable dimension
      of `-1` was provided in the `Array.variableWithVariableDimension`
      annotation:

      ```dart
      import 'dart:ffi';

      final class MyStruct extends Struct {
        @Array.variableWithVariableDimension([!-1!])
        external Array<Uint8> a0;
      }
      ```

      The following code produces this diagnostic because a variable dimension
      of `-1` was provided in the `Array.variableMulti` annotation:

      ```dart
      import 'dart:ffi';

      final class MyStruct2 extends Struct {
        @Array.variableMulti(variableDimension: [!-1!], [1, 2])
        external Array<Array<Array<Uint8>>> a0;
      }
      ```

      #### Common fixes

      Change the variable dimension with zero (`0`) or a positive number:

      ```dart
      import 'dart:ffi';

      final class MyStruct extends Struct {
        @Array.variableWithVariableDimension(1)
        external Array<Uint8> a0;
      }
      ```

      Change the variable dimension with zero (`0`) or a positive number:

      ```dart
      import 'dart:ffi';

      final class MyStruct2 extends Struct {
        @Array.variableMulti(variableDimension: 1, [1, 2])
        external Array<Array<Array<Uint8>>> a0;
      }
      ```
  NON_CONSTANT_TYPE_ARGUMENT:
    problemMessage: "The type arguments to '{0}' must be known at compile time, so they can't be type parameters."
    correctionMessage: Try changing the type argument to be a constant type.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the function, method, or constructor having type arguments
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type arguments to a method
      are required to be known at compile time, but a type parameter, whose
      value can't be known at compile time, is used as a type argument.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the type argument to
      `Pointer.asFunction` must be known at compile time, but the type parameter
      `R`, which isn't known at compile time, is being used as the type
      argument:

      ```dart
      import 'dart:ffi';

      typedef T = int Function(int);

      class C<R extends T> {
        void m(Pointer<NativeFunction<T>> p) {
          p.asFunction<[!R!]>();
        }
      }
      ```

      #### Common fixes

      Remove any uses of type parameters:

      ```dart
      import 'dart:ffi';

      class C {
        void m(Pointer<NativeFunction<Int64 Function(Int64)>> p) {
          p.asFunction<int Function(int)>();
        }
      }
      ```
  NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
    problemMessage: "Can't invoke 'asFunction' because the function signature '{0}' for the pointer isn't a valid C function signature."
    correctionMessage: "Try changing the function argument in 'NativeFunction' to only use NativeTypes."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the type that should be a valid dart:ffi native type.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the method `asFunction` is
      invoked on a pointer to a native function, but the signature of the native
      function isn't a valid C function signature.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because function signature
      associated with the pointer `p` (`FNative`) isn't a valid C function
      signature:

      ```dart
      import 'dart:ffi';

      typedef FNative = int Function(int);
      typedef F = int Function(int);

      class C {
        void f(Pointer<NativeFunction<FNative>> p) {
          p.asFunction<[!F!]>();
        }
      }
      ```

      #### Common fixes

      Make the `NativeFunction` signature a valid C signature:

      ```dart
      import 'dart:ffi';

      typedef FNative = Int8 Function(Int8);
      typedef F = int Function(int);

      class C {
        void f(Pointer<NativeFunction<FNative>> p) {
          p.asFunction<F>();
        }
      }
      ```
  NON_POSITIVE_ARRAY_DIMENSION:
    problemMessage: Array dimensions must be positive numbers.
    correctionMessage: Try changing the input to a positive number.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a dimension given in an `Array`
      annotation is less than or equal to zero (`0`).

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because an array dimension of
      `-8` was provided:

      ```dart
      import 'dart:ffi';

      final class MyStruct extends Struct {
        @Array([!-8!])
        external Array<Uint8> a0;
      }
      ```

      #### Common fixes

      Change the dimension to be a positive integer:

      ```dart
      import 'dart:ffi';

      final class MyStruct extends Struct {
        @Array(8)
        external Array<Uint8> a0;
      }
      ```

      If this is a variable length inline array, change the annotation to
      `Array.variable()`:

      ```dart
      import 'dart:ffi';

      final class MyStruct extends Struct {
        @Array.variable()
        external Array<Uint8> a0;
      }
      ```
  NON_SIZED_TYPE_ARGUMENT:
    problemMessage: "The type '{1}' isn't a valid type argument for '{0}'. The type argument must be a native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
    correctionMessage: "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the field
      1: the type of the field
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the type argument for the class
      `Array` isn't one of the valid types: either a native integer, `Float`,
      `Double`, `Pointer`, or subtype of `Struct`, `Union`, or
      `AbiSpecificInteger`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the type argument to
      `Array` is `Void`, and `Void` isn't one of the valid types:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8)
        external Array<[!Void!]> a0;
      }
      ```

      #### Common fixes

      Change the type argument to one of the valid types:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8)
        external Array<Uint8> a0;
      }
      ```
  PACKED_ANNOTATION:
    problemMessage: "Structs must have at most one 'Packed' annotation."
    correctionMessage: "Try removing extra 'Packed' annotations."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a subclass of `Struct` has more
      than one `Packed` annotation.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C`, which
      is a subclass of `Struct`, has two `Packed` annotations:

      ```dart
      import 'dart:ffi';

      @Packed(1)
      [!@Packed(1)!]
      final class C extends Struct {
        external Pointer<Uint8> notEmpty;
      }
      ```

      #### Common fixes

      Remove all but one of the annotations:

      ```dart
      import 'dart:ffi';

      @Packed(1)
      final class C extends Struct {
        external Pointer<Uint8> notEmpty;
      }
      ```
  PACKED_ANNOTATION_ALIGNMENT:
    problemMessage: Only packing to 1, 2, 4, 8, and 16 bytes is supported.
    correctionMessage: "Try changing the 'Packed' annotation alignment to 1, 2, 4, 8, or 16."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the argument to the `Packed`
      annotation isn't one of the allowed values: 1, 2, 4, 8, or 16.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the argument to the
      `Packed` annotation (`3`) isn't one of the allowed values:

      ```dart
      import 'dart:ffi';

      @Packed([!3!])
      final class C extends Struct {
        external Pointer<Uint8> notEmpty;
      }
      ```

      #### Common fixes

      Change the alignment to be one of the allowed values:

      ```dart
      import 'dart:ffi';

      @Packed(4)
      final class C extends Struct {
        external Pointer<Uint8> notEmpty;
      }
      ```
  VARIABLE_LENGTH_ARRAY_NOT_LAST:
    problemMessage: "Variable length 'Array's must only occur as the last field of Structs."
    correctionMessage: "Try adjusting the arguments in the 'Array' annotation."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a variable length inline `Array`
      is not the last member of a `Struct`.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `a0` has a
      type with three nested arrays, but only two dimensions are given in the
      `Array` annotation:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        [!@Array.variable()!]
        external Array<Uint8> a0;

        @Uint8()
        external int a1;
      }
      ```

      #### Common fixes

      Move the variable length inline `Array` to be the last field in the struct.

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Uint8()
        external int a1;

        @Array.variable()
        external Array<Uint8> a0;
      }
      ```

      If the inline array has a fixed size, annotate it with the size:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(10)
        external Array<Uint8> a0;

        @Uint8()
        external int a1;
      }
      ```
  SIZE_ANNOTATION_DIMENSIONS:
    problemMessage: "'Array's must have an 'Array' annotation that matches the dimensions."
    correctionMessage: "Try adjusting the arguments in the 'Array' annotation."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the number of dimensions
      specified in an `Array` annotation doesn't match the number of nested
      arrays specified by the type of a field.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the field `a0` has a
      type with three nested arrays, but only two dimensions are given in the
      `Array` annotation:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        [!@Array(8, 8)!]
        external Array<Array<Array<Uint8>>> a0;
      }
      ```

      #### Common fixes

      If the type of the field is correct, then fix the annotation to have the
      required number of dimensions:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8, 8, 4)
        external Array<Array<Array<Uint8>>> a0;
      }
      ```

      If the type of the field is wrong, then fix the type of the field:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Array(8, 8)
        external Array<Array<Uint8>> a0;
      }
      ```
  SUBTYPE_OF_FFI_CLASS_IN_EXTENDS:
    removedIn: "3.0"
    sharedName: SUBTYPE_OF_FFI_CLASS
    problemMessage: "The class '{0}' can't extend '{1}'."
    correctionMessage: "Try extending 'Struct' or 'Union'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subclass
      1: the name of the class being extended, implemented, or mixed in
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class extends any FFI class
      other than `Struct` or `Union`, or implements or mixes in any FFI class.
      `Struct` and `Union` are the only FFI classes that can be subtyped, and
      then only by extending them.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C` extends
      `Double`:

      ```dart
      import 'dart:ffi';

      final class C extends [!Double!] {}
      ```

      #### Common fixes

      If the class should extend either `Struct` or `Union`, then change the
      declaration of the class:

      ```dart
      import 'dart:ffi';

      final class C extends Struct {
        @Int32()
        external int i;
      }
      ```

      If the class shouldn't extend either `Struct` or `Union`, then remove any
      references to FFI classes:

      ```dart
      final class C {}
      ```
  SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS:
    removedIn: "3.0"
    sharedName: SUBTYPE_OF_FFI_CLASS
    problemMessage: "The class '{0}' can't implement '{1}'."
    correctionMessage: "Try implementing 'Allocator' or 'Finalizable'."
    hasPublishedDocs: true
    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:
    removedIn: "3.0"
    sharedName: SUBTYPE_OF_FFI_CLASS
    problemMessage: "The class '{0}' can't mix in '{1}'."
    correctionMessage: "Try extending 'Struct' or 'Union'."
    hasPublishedDocs: true
    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
    problemMessage: "The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
    correctionMessage: "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subclass
      1: the name of the class being extended, implemented, or mixed in
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a class extends, implements, or
      mixes in a class that extends either `Struct` or `Union`. Classes can only
      extend either `Struct` or `Union` directly.

      For more information about FFI, see [C interop using dart:ffi][ffi].

      #### Example

      The following code produces this diagnostic because the class `C` extends
      `S`, and `S` extends `Struct`:

      ```dart
      import 'dart:ffi';

      final class S extends Struct {
        external Pointer f;
      }

      final class C extends [!S!] {
        external Pointer g;
      }
      ```

      #### Common fixes

      If you're trying to define a struct or union that shares some fields
      declared by a different struct or union, then extend `Struct` or `Union`
      directly and copy the shared fields:

      ```dart
      import 'dart:ffi';

      final class S extends Struct {
        external Pointer f;
      }

      final class C extends Struct {
        external Pointer f;

        external Pointer g;
      }
      ```
  SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
    sharedName: SUBTYPE_OF_STRUCT_CLASS
    problemMessage: "The class '{0}' can't implement '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
    correctionMessage: "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly."
    hasPublishedDocs: true
    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
    problemMessage: "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
    correctionMessage: "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the subclass
      1: the name of the class being extended, implemented, or mixed in
HintCode:
  DEPRECATED_COLON_FOR_DEFAULT_VALUE:
    problemMessage: Using a colon as the separator before a default value is deprecated and will not be supported in language version 3.0 and later.
    correctionMessage: Try replacing the colon with an equal sign.
    hasPublishedDocs: true
    comment: |-
      No parameters.

      Note: Since this diagnostic is only produced in pre-3.0 code, we do not
      plan to go through the exercise of converting it to a Warning.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a colon (`:`) is used as the
      separator before the default value of an optional named parameter.
      While this syntax is allowed, it is deprecated in favor of
      using an equal sign (`=`).

      #### Example

      The following code produces this diagnostic because a colon is being used
      before the default value of the optional parameter `i`:

      ```dart
      void f({int i [!:!] 0}) {}
      ```

      #### Common fixes

      Replace the colon with an equal sign.

      ```dart
      void f({int i = 0}) {}
      ```
  DEPRECATED_MEMBER_USE:
    problemMessage: "'{0}' is deprecated and shouldn't be used."
    correctionMessage: 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.

      #### Example

      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
    problemMessage: "'{0}' is deprecated and shouldn't be used. {1}"
    correctionMessage: 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:
    problemMessage: "'{0}' is deprecated and shouldn't be used."
    correctionMessage: Try replacing the use of the deprecated member with the replacement.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member

      This code is deprecated in favor of the
      'deprecated_member_from_same_package' lint rule, and will be removed.
    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.

      #### Example

      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
    problemMessage: "'{0}' is deprecated and shouldn't be used. {1}"
    correctionMessage: Try replacing the use of the deprecated member with the replacement.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member
      1: message details

      This code is deprecated in favor of the
      'deprecated_member_from_same_package' lint rule, and will be removed.
  DIVISION_OPTIMIZATION:
    removedIn: "3.5"
    problemMessage: The operator x ~/ y is more efficient than (x / y).toInt().
    correctionMessage: "Try re-writing the expression to use the '~/' operator."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the result of dividing two
      numbers is converted to an integer using `toInt`. Dart has a built-in
      integer division operator that is both more efficient and more concise.

      #### Example

      The following code produces this diagnostic because the result of dividing
      `x` and `y` is converted to an integer using `toInt`:

      ```dart
      int divide(int x, int y) => [!(x / y).toInt()!];
      ```

      #### Common fixes

      Use the integer division operator (`~/`):

      ```dart
      int divide(int x, int y) => x ~/ y;
      ```
  IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
    problemMessage: "The imported library defines a top-level function named 'loadLibrary' that is hidden by deferring this library."
    correctionMessage: 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, check out
      [Lazily loading a library](https://dart.dev/language/libraries#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();
      }
      ```
  IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
    removedIn: "3.0"
    problemMessage: "The library '{0}' is legacy, and shouldn't be imported into a null safe library."
    correctionMessage: Try migrating the imported library.
    hasPublishedDocs: true
    comment: |-
      https://github.com/dart-lang/sdk/issues/44063

      Parameters:
      0: the name of the library
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a library that is null safe
      imports a library that isn't null safe.

      #### Example

      Given a file `a.dart` that contains the following:

      ```dart
      %uri="lib/a.dart"
      // @dart = 2.9

      class A {}
      ```

      The following code produces this diagnostic because a library that null
      safe is importing a library that isn't null safe:

      ```dart
      import [!'a.dart'!];

      A? f() => null;
      ```

      #### Common fixes

      If you can migrate the imported library to be null safe, then migrate it
      and update or remove the migrated library's language version.

      If you can't migrate the imported library, then the importing library
      needs to have a language version that is before 2.12, when null safety was
      enabled by default.
  UNNECESSARY_IMPORT:
    problemMessage: "The import of '{0}' is unnecessary because all of the used elements are also provided by the import of '{1}'."
    correctionMessage: Try removing the import directive.
    hasPublishedDocs: true
    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 `a.dart` that contains the following:

      ```dart
      %uri="lib/a.dart"
      class A {}
      ```

      And, given a file `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.
ManifestWarningCode:
  CAMERA_PERMISSIONS_INCOMPATIBLE:
    problemMessage: Camera permissions make app incompatible for Chrome OS, consider adding optional features "android.hardware.camera" and "android.hardware.camera.autofocus".
    correctionMessage: 'Try adding `<uses-feature android:name="android.hardware.camera"  android:required="false">` `<uses-feature android:name="android.hardware.camera.autofocus"  android:required="false">`.'
    hasPublishedDocs: false
    comment: |-
      A code indicating that the camera permissions is not supported on Chrome
      OS.
  NON_RESIZABLE_ACTIVITY:
    problemMessage: The `<activity>` element should be allowed to be resized to allow users to take advantage of the multi-window environment on Chrome OS
    correctionMessage: Consider declaring the corresponding activity element with `resizableActivity="true"` attribute.
    hasPublishedDocs: false
    comment: A code indicating that the activity is set to be non resizable.
  NO_TOUCHSCREEN_FEATURE:
    problemMessage: 'The default "android.hardware.touchscreen" needs to be optional for Chrome OS. '
    correctionMessage: 'Consider adding <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> to the manifest.'
    hasPublishedDocs: false
    comment: |-
      A code indicating that the touchscreen feature is not specified in the
      manifest.
  PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
    problemMessage: "Permission makes app incompatible for Chrome OS, consider adding optional {0} feature tag, "
    correctionMessage: ' Try adding `<uses-feature android:name="{0}"  android:required="false">`.'
    hasPublishedDocs: false
    comment: |-
      A code indicating that a specified permission is not supported on Chrome
      OS.

      Parameters:
      0: the name of the feature tag
  SETTING_ORIENTATION_ON_ACTIVITY:
    problemMessage: 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
    correctionMessage: Consider declaring the corresponding activity element with `screenOrientation="unspecified"` or `"fullSensor"` attribute.
    hasPublishedDocs: false
    comment: A code indicating that the activity is locked to an orientation.
  UNSUPPORTED_CHROME_OS_FEATURE:
    problemMessage: "The feature {0} isn't supported on Chrome OS, consider making it optional."
    correctionMessage: 'Try changing to `android:required="false"` for this feature.'
    hasPublishedDocs: false
    comment: |-
      A code indicating that a specified feature is not supported on Chrome OS.

      Parameters:
      0: the name of the feature
  UNSUPPORTED_CHROME_OS_HARDWARE:
    problemMessage: "The feature {0} isn't supported on Chrome OS, consider making it optional."
    correctionMessage: 'Try adding `android:required="false"` for this feature.'
    hasPublishedDocs: false
    comment: |-
      A code indicating that a specified hardware feature is not supported on
      Chrome OS.

      Parameters:
      0: the name of the feature
ParserErrorCode:
  ABSTRACT_STATIC_METHOD:
    problemMessage: "Static methods can't be declared to be 'abstract'."
    correctionMessage: "Try removing the keyword 'abstract'."
  ASYNC_KEYWORD_USED_AS_IDENTIFIER:
    problemMessage: "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.
  CONST_CONSTRUCTOR_WITH_BODY:
    problemMessage: "Const constructors can't have a body."
    correctionMessage: "Try removing either the 'const' keyword or the body."
  COVARIANT_CONSTRUCTOR:
    problemMessage: "A constructor can't be declared to be 'covariant'."
    correctionMessage: "Try removing the keyword 'covariant'."
  DECLARATION_NAMED_AUGMENTED_INSIDE_AUGMENTATION:
    problemMessage: "The identifier 'augmented' has a special meaning inside augmenting declarations."
    correctionMessage: "Try using a different name."
  DEFAULT_VALUE_IN_FUNCTION_TYPE:
    problemMessage: "Parameters in a function type can't have default values."
    correctionMessage: 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) {
      }
      ```
  EMPTY_ENUM_BODY:
    problemMessage: An enum must declare at least one constant name.
    correctionMessage: Try declaring a constant.
  EXPECTED_CASE_OR_DEFAULT:
    problemMessage: "Expected 'case' or 'default'."
    correctionMessage: Try placing this code inside a case clause.
  EXPECTED_CLASS_MEMBER:
    problemMessage: Expected a class member.
    correctionMessage: Try placing this code inside a class member.
  EXPECTED_EXECUTABLE:
    problemMessage: Expected a method, getter, setter or operator declaration.
    correctionMessage: This appears to be incomplete code. Try removing it or completing it.
  EXPECTED_LIST_OR_MAP_LITERAL:
    problemMessage: Expected a list or map literal.
    correctionMessage: Try inserting a list or map literal, or remove the type arguments.
  EXPECTED_NAMED_TYPE_EXTENDS:
    sharedName: EXPECTED_NAMED_TYPE
    problemMessage: Expected a class name.
    correctionMessage: Try using a class name, possibly with type arguments.
  EXPECTED_NAMED_TYPE_IMPLEMENTS:
    sharedName: EXPECTED_NAMED_TYPE
    problemMessage: Expected the name of a class or mixin.
    correctionMessage: Try using a class or mixin name, possibly with type arguments.
  EXPECTED_NAMED_TYPE_ON:
    sharedName: EXPECTED_NAMED_TYPE
    problemMessage: Expected the name of a class or mixin.
    correctionMessage: Try using a class or mixin name, possibly with type arguments.
  EXPECTED_NAMED_TYPE_WITH:
    sharedName: EXPECTED_NAMED_TYPE
    problemMessage: Expected a mixin name.
    correctionMessage: Try using a mixin name, possibly with type arguments.
  EXPECTED_REPRESENTATION_FIELD:
    problemMessage: Expected a representation field.
    correctionMessage: Try providing the representation field for this extension type.
  EXPECTED_REPRESENTATION_TYPE:
    problemMessage: Expected a representation type.
    correctionMessage: Try providing the representation type for this extension type.
  EXPECTED_STRING_LITERAL:
    problemMessage: Expected a string literal.
  EXPECTED_TOKEN:
    problemMessage: "Expected to find '{0}'."
    comment: |-
      Parameters:
      0: the token that was expected but not found
  EXPECTED_TYPE_NAME:
    problemMessage: Expected a type name.
  EXTERNAL_GETTER_WITH_BODY:
    problemMessage: "External getters can't have a body."
    correctionMessage: "Try removing the body of the getter, or removing the keyword 'external'."
  EXTERNAL_OPERATOR_WITH_BODY:
    problemMessage: "External operators can't have a body."
    correctionMessage: "Try removing the body of the operator, or removing the keyword 'external'."
  EXTERNAL_SETTER_WITH_BODY:
    problemMessage: "External setters can't have a body."
    correctionMessage: "Try removing the body of the setter, or removing the keyword 'external'."
  FACTORY_WITHOUT_BODY:
    problemMessage: "A non-redirecting 'factory' constructor must have a body."
    correctionMessage: Try adding a body to the constructor.
  FACTORY_WITH_INITIALIZERS:
    problemMessage: "A 'factory' constructor can't have initializers."
    correctionMessage: "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers."
  FINAL_CONSTRUCTOR:
    problemMessage: "A constructor can't be declared to be 'final'."
    correctionMessage: "Try removing the keyword 'final'."
  FINAL_METHOD:
    problemMessage: "Getters, setters and methods can't be declared to be 'final'."
    correctionMessage: "Try removing the keyword 'final'."
  GETTER_IN_FUNCTION:
    problemMessage: "Getters can't be defined within methods or functions."
    correctionMessage: Try moving the getter outside the method or function, or converting the getter to a function.
  GETTER_WITH_PARAMETERS:
    problemMessage: Getters must be declared without a parameter list.
    correctionMessage: "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter."
  INVALID_CODE_POINT:
    problemMessage: "The escape sequence '{0}' isn't a valid code point."
    comment: |-
      Parameters:
      0: the invalid escape sequence
  INVALID_COMMENT_REFERENCE:
    problemMessage: "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else."
  INVALID_GENERIC_FUNCTION_TYPE:
    problemMessage: Invalid generic function type.
    correctionMessage: "Try using a generic function type (returnType 'Function(' parameters ')')."
  INVALID_LITERAL_IN_CONFIGURATION:
    problemMessage: "The literal in a configuration can't contain interpolation."
    correctionMessage: Try removing the interpolation expressions.
  INVALID_OPERATOR_FOR_SUPER:
    problemMessage: "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_STAR_AFTER_ASYNC:
    problemMessage: "The modifier 'async*' isn't allowed for an expression function body."
    correctionMessage: Try converting the body to a block.
  INVALID_SYNC:
    problemMessage: "The modifier 'sync' isn't allowed for an expression function body."
    correctionMessage: Try converting the body to a block.
  INVALID_USE_OF_IDENTIFIER_AUGMENTED:
    problemMessage: The identifier 'augmented' can only be used to reference the augmented declaration inside an augmentation.
    correctionMessage: Try using a different identifier.
    hasPublishedDocs: false
  LOCAL_FUNCTION_DECLARATION_MODIFIER:
    problemMessage: "Local function declarations can't specify any modifiers."
    correctionMessage: Try removing the modifier.
  MISSING_CLOSING_PARENTHESIS:
    problemMessage: The closing parenthesis is missing.
    correctionMessage: Try adding the closing parenthesis.
  MISSING_ENUM_BODY:
    problemMessage: An enum definition must have a body with at least one constant name.
    correctionMessage: Try adding a body and defining at least one constant.
  MISSING_EXPRESSION_IN_INITIALIZER:
    problemMessage: Expected an expression after the assignment operator.
    correctionMessage: Try adding the value to be assigned, or remove the assignment operator.
  MISSING_FUNCTION_BODY:
    problemMessage: A function body must be provided.
    correctionMessage: Try adding a function body.
  MISSING_FUNCTION_KEYWORD:
    problemMessage: "Function types must have the keyword 'Function' before the parameter list."
    correctionMessage: "Try adding the keyword 'Function'."
  MISSING_FUNCTION_PARAMETERS:
    problemMessage: Functions must have an explicit list of parameters.
    correctionMessage: Try adding a parameter list.
  MISSING_GET:
    problemMessage: "Getters must have the keyword 'get' before the getter name."
    correctionMessage: "Try adding the keyword 'get'."
  MISSING_IDENTIFIER:
    problemMessage: Expected an identifier.
  MISSING_METHOD_PARAMETERS:
    problemMessage: Methods must have an explicit list of parameters.
    correctionMessage: Try adding a parameter list.
  MISSING_NAME_FOR_NAMED_PARAMETER:
    problemMessage: Named parameters in a function type must have a name
    correctionMessage: Try providing a name for the parameter or removing the curly braces.
  MISSING_NAME_IN_LIBRARY_DIRECTIVE:
    problemMessage: Library directives must include a library name.
    correctionMessage: "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:
    problemMessage: Part-of directives must include a library name.
    correctionMessage: "Try adding a library name after the 'of'."
  MISSING_STAR_AFTER_SYNC:
    problemMessage: "The modifier 'sync' must be followed by a star ('*')."
    correctionMessage: Try removing the modifier, or add a star.
  MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
    problemMessage: "There is no '{0}' to close the parameter group."
    correctionMessage: "Try inserting a '{0}' at the end of the group."
    comment: |-
      Parameters:
      0: the terminator that is missing
  MISSING_TYPEDEF_PARAMETERS:
    problemMessage: Typedefs must have an explicit list of parameters.
    correctionMessage: Try adding a parameter list.
  MISSING_VARIABLE_IN_FOR_EACH:
    problemMessage: "A loop variable must be declared in a for-each loop before the 'in', but none was found."
    correctionMessage: Try declaring a loop variable.
  MIXED_PARAMETER_GROUPS:
    problemMessage: "Can't have both positional and named parameters in a single parameter list."
    correctionMessage: Try choosing a single style of optional parameters.
  MULTIPLE_IMPLEMENTS_CLAUSES:
    problemMessage: Each class or mixin definition can have at most one implements clause.
    correctionMessage: Try combining all of the implements clauses into a single clause.
  MULTIPLE_NAMED_PARAMETER_GROUPS:
    problemMessage: "Can't have multiple groups of named parameters in a single parameter list."
    correctionMessage: Try combining all of the groups into a single group.
  MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
    problemMessage: "Can't have multiple groups of positional parameters in a single parameter list."
    correctionMessage: Try combining all of the groups into a single group.
  MULTIPLE_REPRESENTATION_FIELDS:
    problemMessage: Each extension type should have exactly one representation field.
    correctionMessage: Try combining fields into a record, or removing extra fields.
  MULTIPLE_VARIABLES_IN_FOR_EACH:
    problemMessage: "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found."
    correctionMessage: Try moving all but one of the declarations inside the loop body.
    comment: |-
      Parameters:
      0: the number of variables being declared
  NAMED_FUNCTION_EXPRESSION:
    problemMessage: "Function expressions can't be named."
    correctionMessage: Try removing the name, or moving the function expression to a function declaration statement.
  NAMED_FUNCTION_TYPE:
    problemMessage: "Function types can't be named."
    correctionMessage: "Try replacing the name with the keyword 'Function'."
  NAMED_PARAMETER_OUTSIDE_GROUP:
    problemMessage: "Named parameters must be enclosed in curly braces ('{' and '}')."
    correctionMessage: Try surrounding the named parameters in curly braces.
  NATIVE_CLAUSE_IN_NON_SDK_CODE:
    problemMessage: Native clause can only be used in the SDK and code that is loaded through native extensions.
    correctionMessage: Try removing the native clause.
  NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
    problemMessage: Native functions can only be declared in the SDK and code that is loaded through native extensions.
    correctionMessage: "Try removing the word 'native'."
  NON_CONSTRUCTOR_FACTORY:
    problemMessage: Only a constructor can be declared to be a factory.
    correctionMessage: "Try removing the keyword 'factory'."
  NON_IDENTIFIER_LIBRARY_NAME:
    problemMessage: The name of a library must be an identifier.
    correctionMessage: Try using an identifier as the name of the library.
  NON_PART_OF_DIRECTIVE_IN_PART:
    problemMessage: The part-of directive must be the only directive in a part.
    correctionMessage: Try removing the other directives, or moving them to the library for which this is a part.
  NON_STRING_LITERAL_AS_URI:
    problemMessage: The URI must be a string literal.
    correctionMessage: Try enclosing the URI in either single or double quotes.
  NON_USER_DEFINABLE_OPERATOR:
    problemMessage: "The operator '{0}' isn't user definable."
    comment: |-
      Parameters:
      0: the operator that the user is trying to define
  NORMAL_BEFORE_OPTIONAL_PARAMETERS:
    problemMessage: Normal parameters must occur before optional parameters.
    correctionMessage: Try moving all of the normal parameters before the optional parameters.
  PART_OF_NAME:
    problemMessage: "The 'part of' directive can't use a name with the enhanced-parts feature."
    correctionMessage: "Try using 'part of' with a URI instead."
  POSITIONAL_AFTER_NAMED_ARGUMENT:
    problemMessage: Positional arguments must occur before named arguments.
    correctionMessage: Try moving all of the positional arguments before the named arguments.
  POSITIONAL_PARAMETER_OUTSIDE_GROUP:
    problemMessage: "Positional parameters must be enclosed in square brackets ('[' and ']')."
    correctionMessage: Try surrounding the positional parameters in square brackets.
  REPRESENTATION_FIELD_MODIFIER:
    problemMessage: "Representation fields can't have modifiers."
    correctionMessage: Try removing the modifier.
  REPRESENTATION_FIELD_TRAILING_COMMA:
    problemMessage: The representation field can't have a trailing comma.
    correctionMessage: Try removing the trailing comma.
  SETTER_IN_FUNCTION:
    problemMessage: "Setters can't be defined within methods or functions."
    correctionMessage: Try moving the setter outside the method or function.
  STATIC_GETTER_WITHOUT_BODY:
    problemMessage: "A 'static' getter must have a body."
    correctionMessage: "Try adding a body to the getter, or removing the keyword 'static'."
  STATIC_SETTER_WITHOUT_BODY:
    problemMessage: "A 'static' setter must have a body."
    correctionMessage: "Try adding a body to the setter, or removing the keyword 'static'."
  UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
    problemMessage: "There is no '{0}' to open a parameter group."
    correctionMessage: "Try inserting the '{0}' at the appropriate location."
    comment: |-
      Parameters:
      0: the starting character that was missing
  UNEXPECTED_TOKEN:
    problemMessage: "Unexpected text '{0}'."
    correctionMessage: Try removing the text.
    comment: |-
      Parameters:
      0: the unexpected text that was found
  VAR_CLASS:
    problemMessage: "Classes can't be declared to be 'var'."
    correctionMessage: "Try removing the keyword 'var'."
  VAR_ENUM:
    problemMessage: "Enums can't be declared to be 'var'."
    correctionMessage: "Try removing the keyword 'var'."
  VAR_TYPEDEF:
    problemMessage: "Typedefs can't be declared to be 'var'."
    correctionMessage: "Try removing the keyword 'var', or replacing it with the name of the return type."
  WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
    problemMessage: "The default value of a positional parameter should be preceded by '='."
    correctionMessage: "Try replacing the ':' with '='."
  WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
    problemMessage: "Expected '{0}' to close parameter group."
    correctionMessage: "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:
    problemMessage: "The asset directory '{0}' doesn't exist."
    correctionMessage: 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:
    problemMessage: "The asset file '{0}' doesn't exist."
    correctionMessage: 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:
    problemMessage: "The value of the 'assets' field is expected to be a list of relative file paths."
    correctionMessage: 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 `assets` 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_MISSING_PATH:
    problemMessage: "Asset map entry must contain a 'path' field."
    correctionMessage: "Try adding a 'path' field."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an asset map is missing a
      `path` value.

      #### Example

      The following code produces this diagnostic because the asset map
      is missing a `path` value:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - flavors:
            - premium
      ```

      #### Common fixes

      Change the asset map so that it contains a `path` field with a string
      value (a valid POSIX-style file path):

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - path: assets/image.gif
            flavors:
            - premium
      ```
  ASSET_NOT_STRING:
    problemMessage: Assets are required to be file paths (strings).
    correctionMessage: Try converting the value to be a string.
    hasPublishedDocs: true
    comment: |-
      No parameters.

      This code is deprecated in favor of the
      'ASSET_NOT_STRING_OR_MAP' code, and will be removed.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an `assets` list contains a
      value that isn't a string.

      #### Example

      The following code produces this diagnostic because the `assets` list
      contains a map:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - [!image.gif: true!]
      ```

      #### Common fixes

      Change the `assets` list so that it only contains valid POSIX-style file
      paths:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - assets/image.gif
      ```
  ASSET_NOT_STRING_OR_MAP:
    problemMessage: An asset value is required to be a file path (string) or map.
    correctionMessage: Try converting the value to be a string or map.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an asset value isn't a string
      or a map.

      #### Example

      The following code produces this diagnostic because the asset value
      is a list:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - [![one, two, three]!]
      ```

      #### Common fixes

      If you need to specify more than just the path to the asset, then replace
      the value with a map with a `path` key (a valid POSIX-style file path):

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - path: assets/image.gif
            flavors:
            - premium
      ```

      If you only need to specify the path, then replace the value with the path
      to the asset (a valid POSIX-style file path):

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - assets/image.gif
      ```
  ASSET_PATH_NOT_STRING:
    problemMessage: Asset paths are required to be file paths (strings).
    correctionMessage: Try converting the value to be a string.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an asset map contains a
      `path` value that isn't a string.

      #### Example

      The following code produces this diagnostic because the asset map
      contains a `path` value which is a list:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - path: [![one, two, three]!]
            flavors:
            - premium
      ```

      #### Common fixes

      Change the `asset` map so that it contains a `path` value which is a
      string (a valid POSIX-style file path):

      ```yaml
      %uri="pubspec.yaml"
      name: example
      flutter:
        assets:
          - path: image.gif
            flavors:
            - premium
      ```
  DEPENDENCIES_FIELD_NOT_MAP:
    problemMessage: "The value of the '{0}' field is expected to be a map."
    correctionMessage: Try converting the value to be a map.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the field
    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:
    problemMessage: "The '{0}' field is no longer used and can be removed."
    correctionMessage: Try removing the field.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the field
    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:
    problemMessage: "The value of the 'flutter' field is expected to be a map."
    correctionMessage: 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:
    problemMessage: "Publishable packages can't have '{0}' dependencies."
    correctionMessage: "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 publishable package
      includes a package in the `dependencies` list of its `pubspec.yaml` file
      that isn't a pub-hosted dependency.

      To learn more about the different types of dependency sources,
      check out [Package dependencies](https://dart.dev/tools/pub/dependencies).

      #### Example

      The following code produces this diagnostic because the dependency on
      the package `transmogrify` isn't a pub-hosted dependency.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      dependencies:
        transmogrify:
          [!path!]: ../transmogrify
      ```

      #### Common fixes

      If you want to publish the package to `pub.dev`, then change
      the dependency to a hosted package that is published on `pub.dev`.

      If the package isn't intended to be published on `pub.dev`, then
      add a `publish_to: none` entry to its `pubspec.yaml` file to
      mark it as not intended to be published:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      publish_to: none
      dependencies:
        transmogrify:
          path: ../transmogrify
      ```
  INVALID_PLATFORMS_FIELD:
    problemMessage: "The 'platforms' field must be a map with platforms as keys."
    correctionMessage: "Try changing the 'platforms' field to a map with platforms as keys."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a top-level `platforms`
      field is specified, but its value is not a map with keys.
      To learn more about specifying your package's supported platforms,
      check out the [documentation on platform declarations](https://dart.dev/tools/pub/pubspec#platforms).

      #### Example

      The following `pubspec.yaml` produces this diagnostic because `platforms`
      should be a map.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        [!- android
        - web
        - ios!]
      ```

      #### Common fixes

      If you can rely on automatic platform detection, then omit the
      top-level `platforms` field.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      ```

      If you need to manually specify the list of supported platforms, then
      write the `platforms` field as a map with platform names as keys.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        android:
        web:
        ios:
      ```
  UNKNOWN_PLATFORM:
    problemMessage: "The platform '{0}' is not a recognized platform."
    correctionMessage: "Try correcting the platform name or removing it."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the unknown platform.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an unknown platform name is
      used as a key in the `platforms` map.
      To learn more about specifying your package's supported platforms,
      check out the [documentation on platform declarations](https://dart.dev/tools/pub/pubspec#platforms).

      #### Example

      The following `pubspec.yaml` produces this diagnostic because the platform
      `browser` is unknown.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        [!browser:!]
      ```

      #### Common fixes

      If you can rely on automatic platform detection, then omit the
      top-level `platforms` key.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      ```

      If you need to manually specify the list of supported platforms, then
      write the `platforms` field as a map with known platform names as keys.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        # These are the known platforms
        android:
        ios:
        linux:
        macos:
        web:
        windows:
      ```
  PLATFORM_VALUE_DISALLOWED:
    problemMessage: "Keys in the `platforms` field can't have values."
    correctionMessage: "Try removing the value, while keeping the key."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a key in the `platforms` map
      has a value.
      To learn more about specifying your package's supported platforms,
      check out the [documentation on platform declarations](https://dart.dev/tools/pub/pubspec#platforms).

      #### Example

      The following `pubspec.yaml` produces this diagnostic because the key
      `web` has a value.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        web: [!"chrome"!]
      ```

      #### Common fixes

      Omit the value and leave the key without a value:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      platforms:
        web:
      ```

      Values for keys in the `platforms` field are currently reserved for
      potential future behavior.
  MISSING_NAME:
    problemMessage: "The 'name' field is required but missing."
    correctionMessage: "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
      ```
  MISSING_DEPENDENCY:
    problemMessage: "Missing a dependency on imported package '{0}'."
    correctionMessage: "Try adding {0}."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the list of packages missing from the dependencies and the list of
      packages missing from the dev_dependencies (if any) in the pubspec file.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when there's a package that has been
      imported in the source but is not listed as a dependency of the
      importing package.

      #### Example

      The following code produces this diagnostic because the package `path` is
      not listed as a dependency, while there is an import statement
      with package `path` in the source code of package `example`:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      dependencies:
        meta: ^1.0.2
      ```

      #### Common fixes

      Add the missing package `path` to the `dependencies` field:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      dependencies:
        meta: ^1.0.2
        path: any
      ```
  NAME_NOT_STRING:
    problemMessage: "The value of the 'name' field is required to be a string."
    correctionMessage: 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:
    problemMessage: "The path '{0}' doesn't exist."
    correctionMessage: 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:
    problemMessage: "The path '{0}' isn't a POSIX-style path."
    correctionMessage: 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:
    problemMessage: "The directory '{0}' doesn't contain a pubspec."
    correctionMessage: 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
      `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 the correct path.
  UNNECESSARY_DEV_DEPENDENCY:
    problemMessage: "The dev dependency on {0} is unnecessary because there is also a normal dependency on that package."
    correctionMessage: 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
      ```
  WORKSPACE_FIELD_NOT_LIST:
    problemMessage: "The value of the 'workspace' field is required to be a list of relative file paths."
    correctionMessage: Try converting the value to be a list of relative file paths.
    hasPublishedDocs: false
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the value of the `workspace` key
      isn't a list.

      #### Example

      The following code produces this diagnostic because the value of the
      `workspace` key is a string when a list is expected:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace: [!notPaths!]
      ```

      #### Common fixes

      Change the value of the workspace field so that it's a list:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace:
          - pkg/package_1
          - pkg/package_2
      ```

  WORKSPACE_VALUE_NOT_STRING:
    problemMessage: Workspace entries are required to be directory paths (strings).
    correctionMessage: Try converting the value to be a string.
    hasPublishedDocs: false
    comment: |-
      No parameters.

    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `workspace` list contains a
      value that isn't a string.

      #### Example

      The following code produces this diagnostic because the `workspace` list
      contains a map:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace:
          - [!image.gif: true!]
      ```

      #### Common fixes

      Change the `workspace` list so that it only contains valid POSIX-style directory
      paths:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace:
          - pkg/package_1
          - pkg/package_2
      ```

  WORKSPACE_VALUE_NOT_SUBDIRECTORY:
    problemMessage: Workspace values must be a relative path of a subdirectory of '{0}'.
    correctionMessage: Try using a subdirectory of the directory containing the 'pubspec.yaml' file.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the path of the directory that contains the pubspec.yaml file.

    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `workspace` list contains a
      value that is not a subdirectory of the directory containing the `pubspec.yaml`` file.

      #### Example

      The following code produces this diagnostic because the value in the `workspace` list is not a
      relative path of a subdirectory of the directory containing the 'pubspec.yaml' file:

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace:
          - /home/my_package
      ```

      #### Common fixes

      Change the `workspace` list so that it only contains only subdirectory paths.

      ```yaml
      %uri="pubspec.yaml"
      name: example
      workspace:
          - pkg/package_1
          - pkg/package_2
      ```
StaticWarningCode:
  DEAD_NULL_AWARE_EXPRESSION:
    problemMessage: "The left operand can't be null, so the right operand is never executed."
    correctionMessage: 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.

      #### Examples

      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:
    problemMessage: "The receiver can't be null, so the null-aware operator '{0}' is unnecessary."
    correctionMessage: "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.

      #### Examples

      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 isn't 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.

      The following code produces this diagnostic because `s` can't be `null`:

      ```dart
      List<String> makeSingletonList(String s) {
        return <String>[[!?!]s];
      }
      ```

      #### 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
    problemMessage: "The receiver can't be 'null' because of short-circuiting, so the null-aware operator '{0}' can't be used."
    correctionMessage: "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_NULL_AWARE_ELEMENT:
    sharedName: INVALID_NULL_AWARE_OPERATOR
    problemMessage: "The element can't be null, so the null-aware operator '?' is unnecessary."
    correctionMessage: "Try removing the operator '?'."
    hasPublishedDocs: true
    comment: No parameters.
  INVALID_NULL_AWARE_MAP_ENTRY_KEY:
    sharedName: INVALID_NULL_AWARE_OPERATOR
    problemMessage: "The map entry key can't be null, so the null-aware operator '?' is unnecessary."
    correctionMessage: "Try removing the operator '?'."
    hasPublishedDocs: true
    comment: No parameters.
  INVALID_NULL_AWARE_MAP_ENTRY_VALUE:
    sharedName: INVALID_NULL_AWARE_OPERATOR
    problemMessage: "The map entry value can't be null, so the null-aware operator '?' is unnecessary."
    correctionMessage: "Try removing the operator '?'."
    hasPublishedDocs: true
    comment: No parameters.
  MISSING_ENUM_CONSTANT_IN_SWITCH:
    problemMessage: "Missing case clause for '{0}'."
    correctionMessage: 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 enum.

      Note that `null` is always a possible value for an enum and therefore also
      must be handled.

      #### Example

      The following code produces this diagnostic because the enum value `e2`
      isn't handled:

      ```dart
      %language=2.19
      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:
    problemMessage: "The '!' will have no effect because the receiver can't be null."
    correctionMessage: "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;
      }
      ```
  UNNECESSARY_NULL_ASSERT_PATTERN:
    problemMessage: The null-assert pattern will have no effect because the matched type isn't nullable.
    correctionMessage: Try replacing the null-assert pattern with its nested pattern.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a null-assert pattern is used
      to match a value that isn't nullable.

      #### Example

      The following code produces this diagnostic because the variable `x` isn't
      nullable:

      ```dart
      void f(int x) {
        if (x case var a[!!!] when a > 0) {}
      }
      ```

      #### Common fixes

      Remove the null-assert pattern:

      ```dart
      void f(int x) {
        if (x case var a when a > 0) {}
      }
      ```
  UNNECESSARY_NULL_CHECK_PATTERN:
    problemMessage: The null-check pattern will have no effect because the matched type isn't nullable.
    correctionMessage: Try replacing the null-check pattern with its nested pattern.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a null-check pattern is used to
      match a value that isn't nullable.

      #### Example

      The following code produces this diagnostic because the value `x` isn't
      nullable:

      ```dart
      void f(int x) {
        if (x case var a[!?!] when a > 0) {}
      }
      ```

      #### Common fixes

      Remove the null-check pattern:

      ```dart
      void f(int x) {
        if (x case var a when a > 0) {}
      }
      ```
WarningCode:
  ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
    problemMessage: "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`.

      #### Examples

      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:
    problemMessage: "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or top-level variable."
    correctionMessage: Try removing the assignment.
    hasPublishedDocs: true
    comment: |-
      Users should not assign values marked `@doNotStore`.

      Parameters:
      0: the name of the field or variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the value of a function
      (including methods and getters) that is explicitly or implicitly marked by
      the [`doNotStore`][meta-doNotStore] annotation is stored in either a field
      or top-level variable.

      #### Example

      The following code produces this diagnostic because the value of the
      function `f` is being stored in the top-level variable `x`:

      ```dart
      import 'package:meta/meta.dart';

      @doNotStore
      int f() => 1;

      var x = [!f()!];
      ```

      #### Common fixes

      Replace references to the field or variable with invocations of the
      function producing the value.
  BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR:
    problemMessage: "This 'onError' handler must return a value assignable to '{0}', but ends without returning a value."
    correctionMessage: Try adding a return statement.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the return type as derived by the type of the [Future].
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the closure passed to the
      `onError` parameter of the `Future.catchError` method is required to
      return a non-`null` value (because of the `Future`s type argument) but can
      implicitly return `null`.

      #### Example

      The following code produces this diagnostic because the closure passed to
      the `catchError` method is required to return an `int` but doesn't end
      with an explicit `return`, causing it to implicitly return `null`:

      ```dart
      void g(Future<int> f) {
        f.catchError((e, st) [!{!]});
      }
      ```

      #### Common fixes

      If the closure should sometimes return a non-`null` value, then add an
      explicit return to the closure:

      ```dart
      void g(Future<int> f) {
        f.catchError((e, st) {
          return -1;
        });
      }
      ```

      If the closure should always return `null`, then change the type argument
      of the `Future` to be either `void` or `Null`:

      ```dart
      void g(Future<void> f) {
        f.catchError((e, st) {});
      }
      ```
  BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
    problemMessage: "This function has a nullable return type of '{0}', but ends without returning a value."
    correctionMessage: "Try adding a return statement, or if no value is ever returned, try changing the return type to 'void'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the declared return type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a method or function can
      implicitly return `null` by falling off the end. While this is valid Dart
      code, it's better for the return of `null` to be explicit.

      #### Example

      The following code produces this diagnostic because the function `f`
      implicitly returns `null`:

      ```dart
      String? [!f!]() {}
      ```

      #### Common fixes

      If the return of `null` is intentional, then make it explicit:

      ```dart
      String? f() {
        return null;
      }
      ```

      If the function should return a non-null value along that path, then add
      the missing return statement:

      ```dart
      String? f() {
        return '';
      }
      ```
  CAST_FROM_NULL_ALWAYS_FAILS:
    problemMessage: "This cast always throws an exception because the expression always evaluates to 'null'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an expression whose type is
      `Null` is being cast to a non-nullable type.

      #### Example

      The following code produces this diagnostic because `n` is known to always
      be `null`, but it's being cast to a non-nullable type:

      ```dart
      void f(Null n) {
        [!n as int!];
      }
      ```

      #### Common fixes

      Remove the unnecessary cast:

      ```dart
      void f(Null n) {
        n;
      }
      ```
  CAST_FROM_NULLABLE_ALWAYS_FAILS:
    problemMessage: "This cast will always throw an exception because the nullable local variable '{0}' is not assigned."
    correctionMessage: "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 unassigned variable
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a local variable that has a
      nullable type hasn't been assigned and is cast to a non-nullable type.
      Because the variable hasn't been assigned it has the default value of
      `null`, causing the cast to throw an exception.

      #### Example

      The following code produces this diagnostic because the variable `x` is
      cast to a non-nullable type (`int`) when it's known to have the value
      `null`:

      ```dart
      void f() {
        num? x;
        [!x!] as int;
        print(x);
      }
      ```

      #### Common fixes

      If the variable is expected to have a value before the cast, then add an
      initializer or an assignment:

      ```dart
      void f() {
        num? x = 3;
        x as int;
        print(x);
      }
      ```

      If the variable isn't expected to be assigned, then remove the cast:

      ```dart
      void f() {
        num? x;
        print(x);
      }
      ```
  CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE:
    problemMessage: "The matched value type '{0}' can never be equal to this constant of type '{1}'."
    correctionMessage: "Try a constant of the same type as the matched value type."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the matched value type
      1: the constant value type
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a constant pattern can never
      match the value it's being tested against because the type of the constant
      is known to never match the type of the value.

      #### Example

      The following code produces this diagnostic because the type of the
      constant pattern `(true)` is `bool`, and the type of the value being
      matched (`x`) is `int`, and a Boolean can never match an integer:

      ```dart
      void f(int x) {
        if (x case [!true!]) {}
      }
      ```

      #### Common fixes

      If the type of the value is correct, then rewrite the pattern to be
      compatible:

      ```dart
      void f(int x) {
        if (x case 3) {}
      }
      ```

      If the type of the constant is correct, then rewrite the value to be
      compatible:

      ```dart
      void f(bool x) {
        if (x case true) {}
      }
      ```
  DEAD_CODE:
    problemMessage: Dead code.
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' are never reached."
    correctionMessage: 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.

      #### Example

      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_LATE_WILDCARD_VARIABLE_INITIALIZER:
    problemMessage: "Dead code: The assigned-to wildcard variable is marked late and can never be referenced so this initializer will never be evaluated."
    correctionMessage: Try removing the code, removing the late modifier or changing the variable to a non-wildcard.
    sharedName: DEAD_CODE
    hasPublishedDocs: true
    comment: No parameters.
  DEAD_CODE_ON_CATCH_SUBTYPE:
    problemMessage: "Dead code: This on-catch block won't be executed because '{0}' is a subtype of '{1}' and hence will have been caught already."
    correctionMessage: 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.

      #### Example

      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_EXPORT_USE:
    problemMessage: "The ability to import '{0}' indirectly is deprecated."
    correctionMessage: "Try importing '{0}' directly."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the element
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when one library imports a name from
      a second library, and the second library exports the name from a third
      library but has indicated that it won't export the third library in the
      future.

      #### Example

      Given a library `a.dart` defining the class `A`:

      ```dart
      %uri="lib/a.dart"
      class A {}
      ```

      And a second library `b.dart` that exports `a.dart` but has marked the
      export as being deprecated:

      ```dart
      %uri="lib/b.dart"
      import 'a.dart';

      @deprecated
      export 'a.dart';
      ```

      The following code produces this diagnostic because the class `A` won't be
      exported from `b.dart` in some future version:

      ```dart
      import 'b.dart';

      [!A!]? a;
      ```

      #### Common fixes

      If the name is available from a different library that you can import,
      then replace the existing import with an import for that library (or add
      an import for the defining library if you still need the old import):

      ```dart
      import 'a.dart';

      A? a;
      ```

      If the name isn't available, then look for instructions from the library
      author or contact them directly to find out how to update your code.
  DEPRECATED_EXTENDS_FUNCTION:
    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
    problemMessage: "Extending 'Function' is deprecated."
    correctionMessage: "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 {}
      ```
  DEPRECATED_IMPLEMENTS_FUNCTION:
    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
    problemMessage: "Implementing 'Function' has no effect."
    correctionMessage: "Try removing 'Function' from the 'implements' clause."
    hasPublishedDocs: true
    comment: No parameters.
  DEPRECATED_MIXIN_FUNCTION:
    sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
    problemMessage: "Mixing in 'Function' is deprecated."
    correctionMessage: "Try removing 'Function' from the 'with' clause."
    hasPublishedDocs: true
    comment: No parameters.
  DEPRECATED_NEW_IN_COMMENT_REFERENCE:
    problemMessage: "Using the 'new' keyword in a comment reference is deprecated."
    correctionMessage: Try referring to a constructor by its name.
    comment: No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a comment reference (the name
      of a declaration enclosed in square brackets in a documentation comment)
      uses the keyword `new` to refer to a constructor. This form is deprecated.

      #### Examples

      The following code produces this diagnostic because the unnamed
      constructor is being referenced using `new C`:

      ```dart
      /// See [[!new!] C].
      class C {
        C();
      }
      ```

      The following code produces this diagnostic because the constructor named
      `c` is being referenced using `new C.c`:

      ```dart
      /// See [[!new!] C.c].
      class C {
        C.c();
      }
      ```

      #### Common fixes

      If you're referencing a named constructor, then remove the keyword `new`:

      ```dart
      /// See [C.c].
      class C {
        C.c();
      }
      ```

      If you're referencing the unnamed constructor, then remove the keyword
      `new` and append `.new` after the class name:

      ```dart
      /// See [C.new].
      class C {
        C.c();
      }
      ```
  DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS:
    problemMessage: "The '{0}' directive has '{1}' arguments, but only '{2}' are expected."
    correctionMessage: Try removing the extra arguments.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive
      1: the actual number of arguments
      2: the expected number of arguments
  DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT:
    problemMessage: "The '{0}' directive has an unexpected named argument, '{1}'."
    correctionMessage: "Try removing the unexpected argument."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive
      1: the name of the unexpected argument
  DOC_DIRECTIVE_MISSING_CLOSING_BRACE:
    problemMessage: "Doc directive is missing a closing curly brace ('}')."
    correctionMessage: "Try closing the directive with a curly brace."
    hasPublishedDocs: false
  DOC_DIRECTIVE_MISSING_CLOSING_TAG:
    problemMessage: "Doc directive is missing a closing tag."
    correctionMessage: "Try closing the directive with the appropriate closing tag, '{0}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the corresponding doc directive tag
  DOC_DIRECTIVE_MISSING_ONE_ARGUMENT:
    sharedName: DOC_DIRECTIVE_MISSING_ARGUMENT
    problemMessage: "The '{0}' directive is missing a '{1}' argument."
    correctionMessage: "Try adding a '{1}' argument before the closing '}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive
      1: the name of the missing argument
  DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT:
    problemMessage: "The '{0}' argument must be formatted as {1}."
    correctionMessage: "Try formatting '{0}' as {1}."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive argument
      1: the expected format
  DOC_DIRECTIVE_MISSING_OPENING_TAG:
    problemMessage: "Doc directive is missing an opening tag."
    correctionMessage: "Try opening the directive with the appropriate opening tag, '{0}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the corresponding doc directive tag
  DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS:
    sharedName: DOC_DIRECTIVE_MISSING_ARGUMENT
    problemMessage: "The '{0}' directive is missing a '{1}', a '{2}', and a '{3}' argument."
    correctionMessage: "Try adding the missing arguments before the closing '}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive
      1: the name of the first missing argument
      2: the name of the second missing argument
      3: the name of the third missing argument
  DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS:
    sharedName: DOC_DIRECTIVE_MISSING_ARGUMENT
    problemMessage: "The '{0}' directive is missing a '{1}' and a '{2}' argument."
    correctionMessage: "Try adding the missing arguments before the closing '}'."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the doc directive
      1: the name of the first missing argument
      2: the name of the second missing argument
  DOC_DIRECTIVE_UNKNOWN:
    problemMessage: "Doc directive '{0}' is unknown."
    correctionMessage: "Try using one of the supported doc directives."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the unknown doc directive.
  DOC_IMPORT_CANNOT_BE_DEFERRED:
    problemMessage: "Doc imports can't be deferred."
    correctionMessage: Try removing the 'deferred' keyword.
    hasPublishedDocs: false
  DOC_IMPORT_CANNOT_HAVE_COMBINATORS:
    problemMessage: "Doc imports can't have show or hide combinators."
    correctionMessage: Try removing the combinator.
    hasPublishedDocs: false
  DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS:
    problemMessage: "Doc imports can't have configurations."
    correctionMessage: Try removing the configurations.
    hasPublishedDocs: false
  DOC_IMPORT_CANNOT_HAVE_PREFIX:
    problemMessage: "Doc imports can't have prefixes."
    correctionMessage: Try removing the prefix.
    hasPublishedDocs: false
  DUPLICATE_EXPORT:
    problemMessage: Duplicate export.
    correctionMessage: Try removing all but one export of the library.
    hasPublishedDocs: true
    comment: |-
      Duplicate exports.

      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an export directive is found
      that is the same as an export before it in the file. The second export
      doesn't add value and should be removed.

      #### Example

      The following code produces this diagnostic because the same library is
      being exported twice:

      ```dart
      export 'package:meta/meta.dart';
      export [!'package:meta/meta.dart'!];
      ```

      #### Common fixes

      Remove the unnecessary export:

      ```dart
      export 'package:meta/meta.dart';
      ```
  DUPLICATE_HIDDEN_NAME:
    problemMessage: Duplicate hidden name.
    correctionMessage: 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:
    problemMessage: "The diagnostic '{0}' doesn't need to be ignored here because it's already being ignored."
    correctionMessage: 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.

      #### Examples

      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:
    problemMessage: Duplicate import.
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: Duplicate shown name.
    correctionMessage: 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:
    problemMessage: "Two elements in a set literal shouldn't be equal."
    correctionMessage: 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:
    problemMessage: "Two keys in a map literal shouldn't be equal."
    correctionMessage: 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.
  INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
    problemMessage: "The type argument(s) of '{0}' can't be inferred."
    correctionMessage: "Use explicit type argument(s) for '{0}'."
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" is enabled, collection literal types must be
      inferred via the context type, or have type arguments.

      Parameters:
      0: the name of the collection
  INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
    problemMessage: "The type argument(s) of the function '{0}' can't be inferred."
    correctionMessage: "Use explicit type argument(s) for '{0}'."
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" is enabled, types in function invocations must be
      inferred via the context type, or have type arguments.

      Parameters:
      0: the name of the function
  INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
    problemMessage: "The return type of '{0}' cannot be inferred."
    correctionMessage: "Declare the return type of '{0}'."
    hasPublishedDocs: false
    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

      Parameters:
      0: the name of the function or method
  INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
    problemMessage: "The type argument(s) of the generic function type '{0}' can't be inferred."
    correctionMessage: "Use explicit type argument(s) for '{0}'."
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" is enabled, types in function invocations must be
      inferred via the context type, or have type arguments.

      Parameters:
      0: the name of the type
  INFERENCE_FAILURE_ON_INSTANCE_CREATION:
    problemMessage: "The type argument(s) of the constructor '{0}' can't be inferred."
    correctionMessage: "Use explicit type argument(s) for '{0}'."
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" is enabled, types in instance creation
      (constructor calls) must be inferred via the context type, or have type
      arguments.

      Parameters:
      0: the name of the constructor
  INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
    problemMessage: "The type of {0} can't be inferred without either a type or initializer."
    correctionMessage: Try specifying the type of the variable.
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" in enabled, uninitialized variables must be
      declared with a specific type.

      Parameters:
      0: the name of the variable
  INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
    problemMessage: "The type of {0} can't be inferred; a type must be explicitly provided."
    correctionMessage: Try specifying the type of the parameter.
    hasPublishedDocs: false
    comment: |-
      When "strict-inference" in enabled, function parameters must be
      declared with a specific type, or inherit a type.

      Parameters:
      0: the name of the parameter
  INVALID_ANNOTATION_TARGET:
    problemMessage: "The annotation '{0}' can only be used on {1}."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the annotation
      1: the list of valid targets
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an annotation is applied to a
      kind of declaration that it doesn't support.

      #### Example

      The following code produces this diagnostic because the `optionalTypeArgs`
      annotation isn't defined to be valid for top-level variables:

      ```dart
      import 'package:meta/meta.dart';

      @[!optionalTypeArgs!]
      int x = 0;
      ```

      #### Common fixes

      Remove the annotation from the declaration.
  INVALID_EXPORT_OF_INTERNAL_ELEMENT:
    problemMessage: "The member '{0}' can't be exported as a part of a package's public API."
    correctionMessage: "Try using a hide clause to hide '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the element
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a [public library][] exports a
      declaration that is marked with the [`internal`][meta-internal]
      annotation.

      #### Example

      Given a file `a.dart` in the `src` directory that contains:

      ```dart
      %uri="lib/src/a.dart"
      import 'package:meta/meta.dart';

      @internal class One {}
      ```

      The following code, when found in a [public library][] produces this
      diagnostic because the `export` directive is exporting a name that is only
      intended to be used internally:

      ```dart
      [!export 'src/a.dart';!]
      ```

      #### Common fixes

      If the export is needed, then add a `hide` clause to hide the internal
      names:

      ```dart
      export 'src/a.dart' hide One;
      ```

      If the export isn't needed, then remove it.
  INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
    problemMessage: "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}'."
    correctionMessage: "Try using a hide clause to hide '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the element
      1: ?
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a [public library][] exports a
      top-level function  with a return type or at least one parameter type that
      is marked with the [`internal`][meta-internal] annotation.

      #### Example

      Given a file `a.dart` in the `src` directory that contains the
      following:

      ```dart
      %uri="lib/src/a.dart"
      import 'package:meta/meta.dart';

      @internal
      typedef IntFunction = int Function();

      int f(IntFunction g) => g();
      ```

      The following code produces this diagnostic because the function `f` has a
      parameter of type `IntFunction`, and `IntFunction` is only intended to be
      used internally:

      ```dart
      [!export 'src/a.dart' show f;!]
      ```

      #### Common fixes

      If the function must be public, then make all the types in the function's
      signature public types.

      If the function doesn't need to be exported, then stop exporting it,
      either by removing it from the `show` clause, adding it to the `hide`
      clause, or by removing the export.
  INVALID_FACTORY_METHOD_DECL:
    problemMessage: "Factory method '{0}' must have a return type."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: The name of the method
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a method that is annotated with
      the [`factory`][meta-factory] annotation has a return type of `void`.

      #### Example

      The following code produces this diagnostic because the method `createC`
      is annotated with the [`factory`][meta-factory] annotation but doesn't
      return any value:

      ```dart
      import 'package:meta/meta.dart';

      class Factory {
        @factory
        void [!createC!]() {}
      }

      class C {}
      ```

      #### Common fixes

      Change the return type to something other than `void`:

      ```dart
      import 'package:meta/meta.dart';

      class Factory {
        @factory
        C createC() => C();
      }

      class C {}
      ```
  INVALID_FACTORY_METHOD_IMPL:
    problemMessage: "Factory method '{0}' doesn't return a newly allocated object."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the method
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a method that is annotated with
      the [`factory`][meta-factory] annotation doesn't return a newly allocated
      object.

      #### Example

      The following code produces this diagnostic because the method `createC`
      returns the value of a field rather than a newly created instance of `C`:

      ```dart
      import 'package:meta/meta.dart';

      class Factory {
        C c = C();

        @factory
        C [!createC!]() => c;
      }

      class C {}
      ```

      #### Common fixes

      Change the method to return a newly created instance of the return type:

      ```dart
      import 'package:meta/meta.dart';

      class Factory {
        @factory
        C createC() => C();
      }

      class C {}
      ```
  INVALID_INTERNAL_ANNOTATION:
    problemMessage: "Only public elements in a package's private API can be annotated as being internal."
    hasPublishedDocs: true
    comment: |-
      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a declaration is annotated with
      the [`internal`][meta-internal] annotation and that declaration is either
      in a [public library][] or has a private name.

      #### Example

      The following code, when in a [public library][], produces this diagnostic
      because the [`internal`][meta-internal] annotation can't be applied to
      declarations in a [public library][]:

      ```dart
      import 'package:meta/meta.dart';

      @[!internal!]
      class C {}
      ```

      The following code, whether in a public or internal library, produces this
      diagnostic because the [`internal`][meta-internal] annotation can't be
      applied to declarations with private names:

      ```dart
      import 'package:meta/meta.dart';

      @[!internal!]
      class _C {}

      void f(_C c) {}
      ```

      #### Common fixes

      If the declaration has a private name, then remove the annotation:

      ```dart
      class _C {}

      void f(_C c) {}
      ```

      If the declaration has a public name and is intended to be internal to the
      package, then move the annotated declaration into an internal library (in
      other words, a library inside the `src` directory).

      Otherwise, remove the use of the annotation:

      ```dart
      class C {}
      ```
  INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The language version override can't specify a version greater than the latest known language version: {0}.{1}."
    correctionMessage: Try removing the language version override.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the latest major version
      1: the latest minor version
  INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override number must begin with '@dart'."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    comment: |-
      No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a comment that appears to be an
      attempt to specify a language version override doesn't conform to the
      requirements for such a comment. For more information, see
      [Per-library language version selection](https://dart.dev/resources/language/evolution#per-library-language-version-selection).

      #### Example

      The following code produces this diagnostic because the word `dart` must
      be lowercase in such a comment and because there's no equal sign between
      the word `dart` and the version number:

      ```dart
      [!// @Dart 2.13!]
      ```

      #### Common fixes

      If the comment is intended to be a language version override, then change
      the comment to follow the correct format:

      ```dart
      // @dart = 2.13
      ```
  INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: The language version override must be specified before any declaration or directive.
    correctionMessage: Try moving the language version override to the top of the file.
    hasPublishedDocs: true
  INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override comment must be specified with the word 'dart' in all lower case."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override comment must be specified with a version number, like '2.0', after the '=' character."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override number can't be prefixed with a letter."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override comment can't be followed by any non-whitespace characters."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: The Dart language version override comment must be specified with exactly two slashes.
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
    sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
    problemMessage: "The Dart language version override comment must be specified with an '=' character."
    correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
    hasPublishedDocs: true
    comment: |-
      No parameters.
  INVALID_LITERAL_ANNOTATION:
    problemMessage: Only const constructors can have the `@literal` annotation.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the [`literal`][meta-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:
    problemMessage: "The annotation '@nonVirtual' can only be applied to a concrete instance member."
    correctionMessage: Try removing '@nonVirtual'.
    hasPublishedDocs: true
    comment: |-
      This warning is generated anywhere where `@nonVirtual` annotates something
      other than a non-abstract instance member in a class or mixin.

      No Parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the `nonVirtual` annotation is
      found on a declaration other than a member of a class, mixin, or enum, or
      if the member isn't a concrete instance member.

      #### Examples

      The following code produces this diagnostic because the annotation is on a
      class declaration rather than a member inside the class:

      ```dart
      import 'package:meta/meta.dart';

      @[!nonVirtual!]
      class C {}
      ```

      The following code produces this diagnostic because the method `m` is an
      abstract method:

      ```dart
      import 'package:meta/meta.dart';

      abstract class C {
        @[!nonVirtual!]
        void m();
      }
      ```

      The following code produces this diagnostic because the method `m` is a
      static method:

      ```dart
      import 'package:meta/meta.dart';

      abstract class C {
        @[!nonVirtual!]
        static void m() {}
      }
      ```

      #### Common fixes

      If the declaration isn't a member of a class, mixin, or enum, then remove
      the annotation:

      ```dart
      class C {}
      ```

      If the member is intended to be a concrete instance member, then make it
      so:

      ```dart
      import 'package:meta/meta.dart';

      abstract class C {
        @nonVirtual
        void m() {}
      }
      ```

      If the member is not intended to be a concrete instance member, then
      remove the annotation:

      ```dart
      abstract class C {
        static void m() {}
      }
      ```
  INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
    problemMessage: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
    hasPublishedDocs: true
    comment: |-
      This warning 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
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a member of a class, mixin, or
      enum overrides a member that has the `@nonVirtual` annotation on it.

      #### Example

      The following code produces this diagnostic because the method `m` in `B`
      overrides the method `m` in `A`, and the method `m` in `A` is annotated
      with the `@nonVirtual` annotation:

      ```dart
      import 'package:meta/meta.dart';

      class A {
        @nonVirtual
        void m() {}
      }

      class B extends A {
        @override
        void [!m!]() {}
      }
      ```

      #### Common fixes

      If the annotation on the method in the superclass is correct (the method
      in the superclass is not intended to be overridden), then remove or rename
      the overriding method:

      ```dart
      import 'package:meta/meta.dart';

      class A {
        @nonVirtual
        void m() {}
      }

      class B extends A {}
      ```

      If the method in the superclass is intended to be overridden, then remove
      the `@nonVirtual` annotation:

      ```dart
      class A {
        void m() {}
      }

      class B extends A {
        @override
        void m() {}
      }
      ```
  INVALID_REQUIRED_NAMED_PARAM:
    problemMessage: "The type parameter '{0}' is annotated with @required but only named parameters without a default value can be annotated with it."
    correctionMessage: Remove @required.
    hasPublishedDocs: false
    comment: |-
      This warning 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:
    problemMessage: "Incorrect use of the annotation @required on the optional positional parameter '{0}'. Optional positional parameters cannot be required."
    correctionMessage: Remove @required.
    hasPublishedDocs: false
    comment: |-
      This warning is generated anywhere where `@required` annotates an optional
      positional parameter.

      Parameters:
      0: the name of the member
  INVALID_REQUIRED_POSITIONAL_PARAM:
    problemMessage: "Redundant use of the annotation @required on the required positional parameter '{0}'."
    correctionMessage: Remove @required.
    hasPublishedDocs: false
    comment: |-
      This warning is generated anywhere where `@required` annotates a
      non-optional positional parameter.

      Parameters:
      0: the name of the member
  invalid_use_of_do_not_submit_member:
    problemMessage: "Uses of '{0}' should not be submitted to source control."
    correctionMessage: "Try removing the reference to '{0}'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a member that is annotated with
      [`@doNotSubmit`][meta-doNotSubmit] is referenced outside of a member
      declaration that is also annotated with `@doNotSubmit`.

      #### Example

      Given a file `a.dart` containing the following declaration:

      ```dart
      %uri="lib/a.dart"
      import 'package:meta/meta.dart';

      @doNotSubmit
      void emulateCrash() { /* ... */ }
      ```

      The following code produces this diagnostic because the declaration is
      being referenced outside of a member that is also annotated with
      `@doNotSubmit`:

      ```dart
      import 'a.dart';

      void f() {
        [!emulateCrash!]();
      }
      ```

      #### Common fixes

      Most commonly, when complete with local testing, the reference to the
      member should be removed.

      If building additional functionality on top of the member, annotate the
      newly added member with `@doNotSubmit` as well:

      ```dart
      import 'package:meta/meta.dart';

      import 'a.dart';

      @doNotSubmit
      void emulateCrashWithOtherFunctionality() {
        emulateCrash();
        // do other things.
      }
      ```
  INVALID_USE_OF_INTERNAL_MEMBER:
    problemMessage: "The member '{0}' can only be used within its package."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a reference to a declaration
      that is annotated with the [`internal`][meta-internal] annotation is found
      outside the package containing the declaration.

      #### Example

      Given a package `p` that defines a library containing a declaration marked
      with the [`internal`][meta-internal] annotation:

      ```dart
      %uri="package:p/src/p.dart"
      import 'package:meta/meta.dart';

      @internal
      class C {}
      ```

      The following code produces this diagnostic because it's referencing the
      class `C`, which isn't intended to be used outside the package `p`:

      ```dart
      import 'package:p/src/p.dart';

      void f([!C!] c) {}
      ```

      #### Common fixes

      Remove the reference to the internal declaration.
  INVALID_USE_OF_PROTECTED_MEMBER:
    problemMessage: "The member '{0}' can only be used within instance members of subclasses of '{1}'."
    hasPublishedDocs: false
    comment: |-
      This warning 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:
    problemMessage: "The member '{0}' can only be used for overriding."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an instance member that is
      annotated with [`visibleForOverriding`][meta-visibleForOverriding] is
      referenced outside the library in which it's declared for any reason other
      than to override it.

      #### Example

      Given a file `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:
    problemMessage: "The member '{0}' can only be used within '{1}' or a template library."
    hasPublishedDocs: false
    comment: |-
      This warning 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:
    problemMessage: "The member '{0}' can only be used within '{1}' or a test."
    hasPublishedDocs: true
    comment: |-
      This warning 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
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a member annotated with
      `@visibleForTesting` is referenced anywhere other than the library in
      which it is declared or in a library in the `test` directory.

      #### Example

      Given a file `c.dart` that contains the following:

      ```dart
      %uri="lib/c.dart"
      import 'package:meta/meta.dart';

      class C {
        @visibleForTesting
        void m() {}
      }
      ```

      The following code, when not inside the `test` directory, produces this
      diagnostic because the method `m` is marked as being visible only for
      tests:

      ```dart
      import 'c.dart';

      void f(C c) {
        c.[!m!]();
      }
      ```

      #### Common fixes

      If the annotated member should not be referenced outside of tests, then
      remove the reference:

      ```dart
      import 'c.dart';

      void f(C c) {}
      ```

      If it's OK to reference the annotated member outside of tests, then remove
      the annotation:

      ```dart
      class C {
        void m() {}
      }
      ```
  INVALID_VISIBILITY_ANNOTATION:
    problemMessage: "The member '{0}' is annotated with '{1}', but this annotation is only meaningful on declarations of public members."
    hasPublishedDocs: true
    comment: |-
      This warning 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`][meta-visibleForTesting] annotation is applied to
      a non-public declaration.

      #### Example

      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:
    problemMessage: "The annotation 'visibleForOverriding' can only be applied to a public instance member that can be overridden."
    hasPublishedDocs: true
    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`][meta-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 {}
      ```
  INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION:
    problemMessage: "The annotation 'visibleOutsideTemplate' can only be applied to a member of a class, enum, or mixin that is annotated with 'visibleForTemplate'."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the `@visibleOutsideTemplate`
      annotation is used incorrectly. This annotation is only meant to annotate
      members of a class, enum, or mixin that has the `@visibleForTemplate`
      annotation, to opt those members out of the visibility restrictions that
      `@visibleForTemplate` imposes.

      #### Examples

      The following code produces this diagnostic because there is no
      `@visibleForTemplate` annotation at the class level:

      ```dart
      import 'package:angular_meta/angular_meta.dart';

      class C {
        @[!visibleOutsideTemplate!]
        int m() {
          return 1;
        }
      }
      ```

      The following code produces this diagnostic because the annotation is on
      a class declaration, not a member of a class, enum, or mixin:

      ```dart
      import 'package:angular_meta/angular_meta.dart';

      @[!visibleOutsideTemplate!]
      class C {}
      ```

      #### Common fixes

      If the class is only visible so that templates can reference it, then add
      the `@visibleForTemplate` annotation to the class:

      ```dart
      import 'package:angular_meta/angular_meta.dart';

      @visibleForTemplate
      class C {
        @visibleOutsideTemplate
        int m() {
          return 1;
        }
      }
      ```

      If the `@visibleOutsideTemplate` annotation is on anything other than a
      member of a class, enum, or mixin with the `@visibleForTemplate`
      annotation, remove the annotation:

      ```dart
      class C {}
      ```
  RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
    sharedName: INVALID_RETURN_TYPE_FOR_CATCH_ERROR
    problemMessage: "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
    problemMessage: "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.

      #### Examples

      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_REOPEN_ANNOTATION:
    problemMessage: "The annotation '@reopen' can only be applied to a class that opens capabilities that the supertype intentionally disallows."
    correctionMessage: Try removing the '@reopen' annotation.
    hasPublishedDocs: false
    comment: |-
      This warning is generated anywhere where `@reopen` annotates a class which
      did not reopen any type.

      No parameters.
  INVALID_SEALED_ANNOTATION:
    removedIn: "3.5"
    problemMessage: "The annotation '@sealed' can only be applied to classes."
    correctionMessage: Try removing the '@sealed' annotation.
    hasPublishedDocs: true
    comment: |-
      This warning is generated anywhere where `@sealed` annotates something
      other than a class.

      No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a declaration other than a
      class declaration has the `@sealed` annotation on it.

      #### Example

      The following code produces this diagnostic because the `@sealed`
      annotation is on a method declaration:

      ```dart
      import 'package:meta/meta.dart';

      class A {
        @[!sealed!]
        void m() {}
      }
      ```

      #### Common fixes

      Remove the annotation:

      ```dart
      class A {
        void m() {}
      }
      ```
  MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE:
    sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
    problemMessage: "Missing concrete implementation of '{0}'."
    correctionMessage: Try overriding the missing member.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an instance member that has the
      `@mustBeOverridden` annotation isn't overridden in a subclass.

      #### Example

      The following code produces this diagnostic because the class `B` doesn't
      have an override of the inherited method `A.m` when `A.m` is annotated
      with `@mustBeOverridden`:

      ```dart
      import 'package:meta/meta.dart';

      class A {
        @mustBeOverridden
        void m() {}
      }

      class [!B!] extends A {}
      ```

      #### Common fixes

      If the annotation is appropriate for the member, then override the member
      in the subclass:

      ```dart
      import 'package:meta/meta.dart';

      class A {
        @mustBeOverridden
        void m() {}
      }

      class B extends A {
        @override
        void m() {}
      }
      ```

      If the annotation isn't appropriate for the member, then remove the
      annotation:

      ```dart
      class A {
        void m() {}
      }

      class B extends A {}
      ```
  MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO:
    sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
    problemMessage: "Missing concrete implementations of '{0}' and '{1}'."
    correctionMessage: Try overriding the missing members.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the first member
      1: the name of the second member
  MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS:
    sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
    problemMessage: "Missing concrete implementations of '{0}', '{1}', and {2} more."
    correctionMessage: Try overriding the missing members.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the first member
      1: the name of the second member
      2: the number of additional missing members that aren't listed
  MISSING_REQUIRED_PARAM:
    problemMessage: "The parameter '{0}' is required."
    hasPublishedDocs: true
    comment: |-
      Generates a warning 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.

      #### Example

      The following code produces this diagnostic because the named parameter `x`
      is required:

      ```dart
      import 'package:meta/meta.dart';

      void f({@required int? x}) {}

      void g() {
        [!f!]();
      }
      ```

      #### Common fixes

      Provide the required value:

      ```dart
      import 'package:meta/meta.dart';

      void f({@required int? x}) {}

      void g() {
        f(x: 2);
      }
      ```
  MISSING_REQUIRED_PARAM_WITH_DETAILS:
    sharedName: MISSING_REQUIRED_PARAM
    problemMessage: "The parameter '{0}' is required. {1}."
    hasPublishedDocs: true
    comment: |-
      Generates a warning 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:
    removedIn: "3.0"
    problemMessage: "This function has a return type of '{0}', but doesn't end with a return statement."
    correctionMessage: "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.

      #### Example

      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:
    problemMessage: "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."
    correctionMessage: Try composing with this class, or refer to its documentation for more information.
    hasPublishedDocs: true
    comment: |-
      This warning 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`][meta-sealed]. Classes that are sealed can't be extended,
      implemented, mixed in, or used as a superclass constraint.

      #### Example

      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:
    problemMessage: "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: |-
      Generates a warning for classes that inherit from classes annotated with
      `@immutable` but that are not immutable.

      Parameters:
      0: the name of the class
    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`][meta-immutable] or if it's a subclass of an immutable class.

      #### Example

      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:
    problemMessage: "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`][meta-mustCallSuper] doesn't invoke
      the overridden method as required.

      #### Example

      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_ARGUMENT_FOR_CONST_PARAMETER:
    problemMessage: "Argument '{0}' must be a constant."
    correctionMessage: Try replacing the argument with a constant.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the argument
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a parameter is
      annotated with the [`mustBeConst`][meta-mustBeConst] annotation and
      the corresponding argument is not a constant expression.

      #### Example

      The following code produces this diagnostic on the invocation of
      the function `f` because the value of the argument passed to the
      function `g` isn't a constant:

      ```dart
      import 'package:meta/meta.dart' show mustBeConst;

      int f(int value) => g([!value!]);

      int g(@mustBeConst int value) => value + 1;
      ```

      #### Common fixes

      If a suitable constant is available to use, then replace the argument
      with a constant:

      ```dart
      import 'package:meta/meta.dart' show mustBeConst;

      const v = 3;

      int f() => g(v);

      int g(@mustBeConst int value) => value + 1;
      ```
  NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
    sharedName: NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR
    problemMessage: "This instance creation must be 'const', because the {0} constructor is marked as '@literal'."
    correctionMessage: "Try replacing the 'new' keyword with 'const'."
    hasPublishedDocs: true
    comment: |-
      Generate a warning 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:
    problemMessage: "This instance creation must be 'const', because the {0} constructor is marked as '@literal'."
    correctionMessage: "Try adding a 'const' keyword."
    hasPublishedDocs: true
    comment: |-
      Generates a warning 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`][meta-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.

      #### Example

      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();
      ```
  NON_NULLABLE_EQUALS_PARAMETER:
    problemMessage: "The parameter type of '==' operators should be non-nullable."
    correctionMessage: Try using a non-nullable type.
    hasPublishedDocs: false
    comment: No parameters.
  NULLABLE_TYPE_IN_CATCH_CLAUSE:
    problemMessage: "A potentially nullable type can't be used in an 'on' clause because it isn't valid to throw a nullable expression."
    correctionMessage: 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:
    problemMessage: "'{0}' shouldn't be called with a 'null' argument for the non-nullable type argument '{1}'."
    correctionMessage: Try adding a non-null argument.
    hasPublishedDocs: true
    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_CHECK_ALWAYS_FAILS:
    problemMessage: "This null-check will always throw an exception because the expression will always evaluate to 'null'."
    comment: |-
      No parameters.
    hasPublishedDocs: true
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when the null check operator (`!`)
      is used on an expression whose value can only be `null`. In such a case
      the operator always throws an exception, which likely isn't the intended
      behavior.

      #### Example

      The following code produces this diagnostic because the function `g` will
      always return `null`, which means that the null check in `f` will always
      throw:

      ```dart
      void f() {
        [!g()!!];
      }

      Null g() => null;
      ```

      #### Common fixes

      If you intend to always throw an exception, then replace the null check
      with an explicit `throw` expression to make the intent more clear:

      ```dart
      void f() {
        g();
        throw TypeError();
      }

      Null g() => null;
      ```
  OVERRIDE_ON_NON_OVERRIDING_FIELD:
    sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
    problemMessage: "The field doesn't override an inherited getter or setter."
    correctionMessage: 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
    problemMessage: "The getter doesn't override an inherited getter."
    correctionMessage: 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
    problemMessage: "The method doesn't override an inherited method."
    correctionMessage: 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.

      #### Example

      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
    problemMessage: "The setter doesn't override an inherited setter."
    correctionMessage: 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.
  PATTERN_NEVER_MATCHES_VALUE_TYPE:
    problemMessage: "The matched value type '{0}' can never match the required type '{1}'."
    correctionMessage: "Try using a different pattern."
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the matched value type
      1: the required pattern type
  RECEIVER_OF_TYPE_NEVER:
    problemMessage: "The receiver is of type 'Never', and will never complete with a value."
    correctionMessage: Try checking for throw expressions or type errors in the receiver
    hasPublishedDocs: false
    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
  REDECLARE_ON_NON_REDECLARING_MEMBER:
    problemMessage: "The {0} doesn't redeclare a {0} declared in a superinterface."
    correctionMessage: Try updating this member to match a declaration in a superinterface, or removing the redeclare annotation.
    hasPublishedDocs: true
    comment: |-
      An error code indicating the use of a redeclare annotation on a member that does not redeclare.

      Parameters:
      0: the kind of member
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a member of an extension type
      is annotated with `@redeclare`, but none of the implemented interfaces
      has a member with the same name.

      #### Example

      The following code produces this diagnostic because the member `n`
      declared by the extension type `E` is annotated with `@redeclare`, but `C`
      doesn't have a member named `n`:

      ```dart
      import 'package:meta/meta.dart';

      class C {
        void m() {}
      }

      extension type E(C c) implements C {
        @redeclare
        void [!n!]() {}
      }
      ```

      #### Common fixes

      If the annotated member has the right name, then remove the annotation:

      ```dart
      class C {
        void m() {}
      }

      extension type E(C c) implements C {
        void n() {}
      }
      ```

      If the annotated member is suppose to replace a member from the
      implemented interfaces, then change the name of the annotated member to
      match the member being replaced:

      ```dart
      import 'package:meta/meta.dart';

      class C {
        void m() {}
      }

      extension type E(C c) implements C {
        @redeclare
        void m() {}
      }
      ```
  REMOVED_LINT_USE:
    problemMessage: "'{0}' was removed in Dart '{1}'"
    correctionMessage: "Remove the reference to '{0}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating use of a removed lint rule.

      Parameters:
      0: the rule name
      1: the SDK version in which the lint was removed
  REPLACED_LINT_USE:
    problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'."
    correctionMessage: "Replace '{0}' with '{1}'."
    hasPublishedDocs: false
    comment: |-
      An error code indicating use of a removed lint rule.

      Parameters:
      0: the rule name
      1: the SDK version in which the lint was removed
      2: the name of a replacing lint
  RETURN_OF_DO_NOT_STORE:
    problemMessage: "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless '{1}' is also annotated."
    correctionMessage: "Annotate '{1}' with 'doNotStore'."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the annotated function being invoked
      1: the name of the function containing the return
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a value that is annotated with
      the [`doNotStore`][meta-doNotStore] annotation is returned from a method,
      getter, or function that doesn't have the same annotation.

      #### Example

      The following code produces this diagnostic because the result of invoking
      `f` shouldn't be stored, but the function `g` isn't annotated to preserve
      that semantic:

      ```dart
      import 'package:meta/meta.dart';

      @doNotStore
      int f() => 0;

      int g() => [!f()!];
      ```

      #### Common fixes

      If the value that shouldn't be stored is the correct value to return, then
      mark the function with the [`doNotStore`][meta-doNotStore] annotation:

      ```dart
      import 'package:meta/meta.dart';

      @doNotStore
      int f() => 0;

      @doNotStore
      int g() => f();
      ```

      Otherwise, return a different value from the function:

      ```dart
      import 'package:meta/meta.dart';

      @doNotStore
      int f() => 0;

      int g() => 0;
      ```
  SDK_VERSION_ASYNC_EXPORTED_FROM_CORE:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: "Try either importing 'dart:async' or updating the SDK constraints."
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the class
    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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: Try updating the SDK constraints.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the operator
    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.

      #### Example

      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:
    problemMessage: "Tearing off a constructor requires the 'constructor-tearoffs' language feature."
    correctionMessage: "Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'."
    hasPublishedDocs: true
    comment: |-
      No parameters.

      There is also a [ParserErrorCode.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:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "Extension methods weren't supported until version 2.6.0, but this code is required to be able to run on earlier versions."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The operator '>>>' wasn't supported until version 2.14.0, but this code is required to be able to run on earlier versions."
    correctionMessage: Try updating the SDK constraints.
    hasPublishedDocs: true
    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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    removedIn: "3.0"
    problemMessage: "The type 'Never' wasn't supported until version 2.12.0, but this code is required to be able to run on earlier versions."
    correctionMessage: 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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "Set literals weren't supported until version 2.2, but this code is required to be able to run on earlier versions."
    correctionMessage: 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.

      #### Example

      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_SINCE:
    problemMessage: "This API is available since SDK {0}, but constraints '{1}' don't guarantee it."
    correctionMessage: Try updating the SDK constraints.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the version specified in the `@Since()` annotation
      1: the SDK version constraints
  SDK_VERSION_UI_AS_CODE:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    removedIn: "3.2"
    problemMessage: "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."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The generic type '{0}' should have explicit type arguments but doesn't."
    correctionMessage: "Use explicit type arguments for '{0}'."
    hasPublishedDocs: false
    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.

      Parameters:
      0: the name of the generic type
  SUBTYPE_OF_SEALED_CLASS:
    problemMessage: "The class '{0}' shouldn't be extended, mixed in, or implemented because it's sealed."
    correctionMessage: "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`][meta-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.
  TEXT_DIRECTION_CODE_POINT_IN_COMMENT:
    problemMessage: The Unicode code point 'U+{0}' changes the appearance of text from how it's interpreted by the compiler.
    correctionMessage: Try removing the code point or using the Unicode escape sequence '\u{0}'.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the unicode sequence of the code point.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when it encounters source that
      contains text direction Unicode code points. These code points cause
      source code in either a string literal or a comment to be interpreted
      and compiled differently than how it appears in editors, leading to
      possible security vulnerabilities.

      #### Example

      The following code produces this diagnostic twice because there are
      hidden characters at the start and end of the label string:

      ```dart
      var label = '[!I!]nteractive text[!'!];
      ```

      #### Common fixes

      If the code points are intended to be included in the string literal,
      then escape them:

      ```dart
      var label = '\u202AInteractive text\u202C';
      ```

      If the code points aren't intended to be included in the string literal,
      then remove them:

      ```dart
      var label = 'Interactive text';
      ```
  TEXT_DIRECTION_CODE_POINT_IN_LITERAL:
    problemMessage: The Unicode code point 'U+{0}' changes the appearance of text from how it's interpreted by the compiler.
    correctionMessage: Try removing the code point or using the Unicode escape sequence '\u{0}'.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the unicode sequence of the code point.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when it encounters source that
      contains text direction Unicode code points. These code points cause
      source code in either a string literal or a comment to be interpreted
      and compiled differently than how it appears in editors, leading to
      possible security vulnerabilities.

      #### Example

      The following code produces this diagnostic twice because there are
      hidden characters at the start and end of the label string:

      ```dart
      var label = '[!I!]nteractive text[!'!];
      ```

      #### Common fixes

      If the code points are intended to be included in the string literal,
      then escape them:

      ```dart
      var label = '\u202AInteractive text\u202C';
      ```

      If the code points aren't intended to be included in the string literal,
      then remove them:

      ```dart
      var label = 'Interactive text';
      ```
  TYPE_CHECK_IS_NOT_NULL:
    sharedName: TYPE_CHECK_WITH_NULL
    problemMessage: "Tests for non-null should be done with '!= null'."
    correctionMessage: "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.

      #### Examples

      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
    problemMessage: "Tests for null should be done with '== null'."
    correctionMessage: "Try replacing the 'is Null' check with '== null'."
    hasPublishedDocs: true
    comment: No parameters.
  UNDEFINED_HIDDEN_NAME:
    problemMessage: "The library '{0}' doesn't export a member with the hidden name '{1}'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The parameter '{0}' isn't defined by '{1}'."
    hasPublishedDocs: true
    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
      [`UseResult.unless(parameterDefined: parameterName)`][meta-UseResult]
      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:
    problemMessage: "The library '{0}' doesn't export a member with the shown name '{1}'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The diagnostic '{0}' can't be ignored."
    correctionMessage: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
    hasPublishedDocs: false
    comment: |-
      Parameters:
      0: the name of the non-diagnostic being ignored
  UNNECESSARY_CAST:
    problemMessage: Unnecessary cast.
    correctionMessage: 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.

      #### Example

      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_CAST_PATTERN:
    problemMessage: Unnecessary cast pattern.
    correctionMessage: Try removing the cast pattern.
    hasPublishedDocs: false
    comment: No parameters.
  UNNECESSARY_FINAL:
    problemMessage: The keyword 'final' isn't necessary because the parameter is implicitly 'final'.
    correctionMessage: Try removing the 'final'.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when either a field initializing
      parameter or a super parameter in a constructor has the keyword `final`.
      In both cases the keyword is unnecessary because the parameter is
      implicitly `final`.

      #### Examples

      The following code produces this diagnostic because the field initializing
      parameter has the keyword `final`:

      ```dart
      class A {
        int value;

        A([!final!] this.value);
      }
      ```

      The following code produces this diagnostic because the super parameter in
      `B` has the keyword `final`:

      ```dart
      class A {
        A(int value);
      }

      class B extends A {
        B([!final!] super.value);
      }
      ```

      #### Common fixes

      Remove the unnecessary `final` keyword:

      ```dart
      class A {
        A(int value);
      }

      class B extends A {
        B(super.value);
      }
      ```
  UNNECESSARY_NAN_COMPARISON_FALSE:
    sharedName: UNNECESSARY_NAN_COMPARISON
    problemMessage: A double can't equal 'double.nan', so the condition is always 'false'.
    correctionMessage: Try using 'double.isNan', or removing the condition.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a value is compared to
      `double.nan` using either `==` or `!=`.

      Dart follows the [IEEE 754] floating-point standard for the semantics of
      floating point operations, which states that, for any floating point value
      `x` (including NaN, positive infinity, and negative infinity),
      - `NaN == x` is always false
      - `NaN != x` is always true

      As a result, comparing any value to NaN is pointless because the result is
      already known (based on the comparison operator being used).

      #### Example

      The following code produces this diagnostic because `d` is being compared
      to `double.nan`:

      ```dart
      bool isNaN(double d) => d [!== double.nan!];
      ```

      #### Common fixes

      Use the getter `double.isNaN` instead:

      ```dart
      bool isNaN(double d) => d.isNaN;
      ```
  UNNECESSARY_NAN_COMPARISON_TRUE:
    sharedName: UNNECESSARY_NAN_COMPARISON
    problemMessage: A double can't equal 'double.nan', so the condition is always 'true'.
    correctionMessage: Try using 'double.isNan', or removing the condition.
    hasPublishedDocs: true
    comment: No parameters.
  UNNECESSARY_NO_SUCH_METHOD:
    problemMessage: "Unnecessary 'noSuchMethod' declaration."
    correctionMessage: "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_ALWAYS_NULL_FALSE:
    sharedName: UNNECESSARY_NULL_COMPARISON
    problemMessage: "The operand must be 'null', so the condition is always 'false'."
    correctionMessage: Remove the condition.
    hasPublishedDocs: true
    comment: No parameters.
  UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE:
    sharedName: UNNECESSARY_NULL_COMPARISON
    problemMessage: "The operand must be 'null', so the condition is always 'true'."
    correctionMessage: Remove the condition.
    hasPublishedDocs: true
    comment: No parameters.
  UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE:
    sharedName: UNNECESSARY_NULL_COMPARISON
    problemMessage: "The operand can't be 'null', so the condition is always 'false'."
    correctionMessage: 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.

      #### Examples

      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_NEVER_NULL_TRUE:
    sharedName: UNNECESSARY_NULL_COMPARISON
    problemMessage: "The operand can't be 'null', so the condition is always 'true'."
    correctionMessage: Remove the condition.
    hasPublishedDocs: true
    comment: No parameters.
  UNNECESSARY_QUESTION_MARK:
    problemMessage: "The '?' is unnecessary because '{0}' is nullable without it."
    hasPublishedDocs: true
    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_SET_LITERAL:
    problemMessage: Braces unnecessarily wrap this expression in a set literal.
    correctionMessage: Try removing the set literal around the expression.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a function that has a return
      type of `void`, `Future<void>`, or `FutureOr<void>` uses an expression
      function body (`=>`) and the returned value is a literal set containing a
      single element.

      Although the language allows it, returning a value from a `void` function
      isn't useful because it can't be used at the call site. In this particular
      case the return is often due to a misunderstanding about the syntax. The
      braces aren't necessary and can be removed.

      #### Example

      The following code produces this diagnostic because the closure being
      passed to `g` has a return type of `void`, but is returning a set:

      ```dart
      void f() {
        g(() => [!{1}!]);
      }

      void g(void Function() p) {}
      ```

      #### Common fixes

      Remove the braces from around the value:

      ```dart
      void f() {
        g(() => 1);
      }

      void g(void Function() p) {}
      ```
  UNNECESSARY_TYPE_CHECK_FALSE:
    sharedName: UNNECESSARY_TYPE_CHECK
    problemMessage: "Unnecessary type check; the result is always 'false'."
    correctionMessage: 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
    problemMessage: "Unnecessary type check; the result is always 'true'."
    correctionMessage: Try correcting the type check, or removing the type check.
    hasPublishedDocs: true
    comment: No parameters.
  UNNECESSARY_WILDCARD_PATTERN:
    problemMessage: Unnecessary wildcard pattern.
    correctionMessage: Try removing the wildcard pattern.
    hasPublishedDocs: false
    comment: No parameters.
  UNREACHABLE_SWITCH_CASE:
    problemMessage: "This case is covered by the previous cases."
    correctionMessage: Try removing the case clause, or restructuring the preceding patterns.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `case` clause in a `switch`
      statement doesn't match anything because all of the matchable values are
      matched by an earlier `case` clause.

      #### Example

      The following code produces this diagnostic because the value `1` was
      matched in the preceding case:

      ```dart
      void f(int x) {
        switch (x) {
          case 1:
            print('one');
          [!case!] 1:
            print('two');
        }
      }
      ```

      #### Common fixes

      Change one or both of the conflicting cases to match different values:

      ```dart
      void f(int x) {
        switch (x) {
          case 1:
            print('one');
          case 2:
            print('two');
        }
      }
      ```
  UNREACHABLE_SWITCH_DEFAULT:
    problemMessage: "This default clause is covered by the previous cases."
    correctionMessage: Try removing the default clause, or restructuring the preceding patterns.
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a `default` clause in a
      `switch` statement doesn't match anything because all of the matchable
      values are matched by an earlier `case` clause.

      #### Example

      The following code produces this diagnostic because the values `E.e1` and
      `E.e2` were matched in the preceding cases:

      ```dart
      enum E { e1, e2 }

      void f(E x) {
        switch (x) {
          case E.e1:
            print('one');
          case E.e2:
            print('two');
          [!default!]:
            print('other');
        }
      }
      ```

      #### Common fixes

      Remove the unnecessary `default` clause:

      ```dart
      enum E { e1, e2 }
      void f(E x) {
        switch (x) {
          case E.e1:
            print('one');
          case E.e2:
            print('two');
        }
      }
      ```
  UNUSED_CATCH_CLAUSE:
    problemMessage: "The exception variable '{0}' isn't used, so the 'catch' clause can be removed."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The stack trace variable '{0}' isn't used and can be removed."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The declaration '{0}' isn't referenced."
    correctionMessage: "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 and all of their members
      - Private members of public declarations

      Not all references to an element will mark it as "used":
      - Assigning a value to a top-level variable (with a standard `=`
        assignment, or a null-aware `??=` assignment) does not count as using
        it.
      - Referring to an element in a doc comment reference does not count as
        using it.
      - Referring to a class, mixin, or enum on the right side of an `is`
        expression does not count as using it.

      #### Example

      Assuming that no code in the library references `_C`, the following code
      produces this diagnostic:

      ```dart
      class [!_C!] {}
      ```

      #### Common fixes

      If the declaration isn't needed, then remove it.

      If the declaration is intended to be used, then add the code to use it.
  UNUSED_ELEMENT_PARAMETER:
    problemMessage: "A value for optional parameter '{0}' isn't ever given."
    correctionMessage: Try removing the unused parameter.
    hasPublishedDocs: true
    comment: |-
      Parameters:
      0: the name of the parameter that is declared but not used
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a value is never passed for an
      optional parameter declared within a private declaration.

      #### Example

      Assuming that no code in the library passes a value for `y` in any
      invocation of `_m`, the following code produces this diagnostic:

      ```dart
      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_FIELD:
    problemMessage: "The value of the field '{0}' isn't used."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "Unused import: '{0}'."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The label '{0}' isn't used."
    correctionMessage: "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.

      #### Example

      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);
          if (i != 0) {
            break loop;
          }
        }
      }
      ```
      TODO(brianwilkerson): Highlight the identifier without the colon.
  MULTIPLE_COMBINATORS:
    problemMessage: "Using multiple 'hide' or 'show' combinators is never necessary and often produces surprising results."
    correctionMessage: "Try using a single combinator."
    hasPublishedDocs: true
    comment: No parameters.
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when an import or export directive
      contains more than one combinator.

      #### Examples

      The following code produces this diagnostic because the second `show`
      combinator hides `List` and `int`:

      ```dart
      import 'dart:core' [!show Future, List, int show Future!];

      var x = Future.value(1);
      ```

      The following code produces this diagnostic because
      the second `hide` combinator is redundant:

      ```dart
      import 'dart:math' [!hide Random, max, min hide min!];

      var x = pi;
      ```

      The following codes produce this diagnostic because
      the `hide` combinator is redundant:

      ```dart
      import 'dart:math' [!show Random, max hide min!];

      var x = max(0, 1);
      var r = Random();
      ```

      The following code produces this diagnostic because
      the `show` combinator already hides `Random` and `max`,
      so the `hide` combinator is redundant:

      ```dart
      import 'dart:math' [!hide Random, max show min!];

      var x = min(0, 1);
      ```

      #### Common fixes

      If you prefer to list the names that should be visible,
      then use a single `show` combinator:

      ```dart
      import 'dart:math' show min;

      var x = min(0, 1);
      ```

      If you prefer to list the names that should be hidden,
      then use a single `hide` combinator:

      ```dart
      import 'dart:math' hide Random, max, min;

      var x = pi;
      ```
  UNUSED_LOCAL_VARIABLE:
    problemMessage: "The value of the local variable '{0}' isn't used."
    correctionMessage: 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.

      #### Example

      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:
    problemMessage: "The value of '{0}' should be used."
    correctionMessage: Try using the result by invoking a member, passing it to a function, or returning it from this function.
    hasPublishedDocs: true
    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`][meta-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`][meta-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
    problemMessage: "'{0}' should be used. {1}."
    correctionMessage: Try using the result by invoking a member, passing it to a function, or returning it from this function.
    hasPublishedDocs: true
    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:
    problemMessage: "The name {0} is shown, but isn't used."
    correctionMessage: 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.

      #### Example

      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);
      ```
  URI_DOES_NOT_EXIST_IN_DOC_IMPORT:
    problemMessage: "Target of URI doesn't exist: '{0}'."
    correctionMessage: 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 nonexistent file
    documentation: |-
      #### Description

      The analyzer produces this diagnostic when a doc-import 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
      /// @docImport [!'lib.dart'!];
      library;
      ```

      #### Common fixes

      If the URI was mistyped or invalid, then correct the URI.

      If the URI is correct, then create the file.
