| OLD | NEW | 
| (Empty) |  | 
 |     1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
 |     2 // for details. All rights reserved. Use of this source code is governed by a | 
 |     3 // BSD-style license that can be found in the LICENSE file. | 
 |     4  | 
 |     5 library engine.error; | 
 |     6  | 
 |     7 import 'dart:collection'; | 
 |     8  | 
 |     9 import 'ast.dart' show AstNode; | 
 |    10 import 'element.dart'; | 
 |    11 import 'java_core.dart'; | 
 |    12 import 'scanner.dart' show Token; | 
 |    13 import 'source.dart'; | 
 |    14  | 
 |    15 /** | 
 |    16  * An error discovered during the analysis of some Dart code. | 
 |    17  * | 
 |    18  * See [AnalysisErrorListener]. | 
 |    19  */ | 
 |    20 class AnalysisError { | 
 |    21   /** | 
 |    22    * An empty array of errors used when no errors are expected. | 
 |    23    */ | 
 |    24   static const List<AnalysisError> NO_ERRORS = const <AnalysisError>[]; | 
 |    25  | 
 |    26   /** | 
 |    27    * A [Comparator] that sorts by the name of the file that the [AnalysisError] | 
 |    28    * was found. | 
 |    29    */ | 
 |    30   static Comparator<AnalysisError> FILE_COMPARATOR = (AnalysisError o1, | 
 |    31       AnalysisError o2) => o1.source.shortName.compareTo(o2.source.shortName); | 
 |    32  | 
 |    33   /** | 
 |    34    * A [Comparator] that sorts error codes first by their severity (errors | 
 |    35    * first, warnings second), and then by the the error code type. | 
 |    36    */ | 
 |    37   static Comparator<AnalysisError> ERROR_CODE_COMPARATOR = (AnalysisError o1, | 
 |    38       AnalysisError o2) { | 
 |    39     ErrorCode errorCode1 = o1.errorCode; | 
 |    40     ErrorCode errorCode2 = o2.errorCode; | 
 |    41     ErrorSeverity errorSeverity1 = errorCode1.errorSeverity; | 
 |    42     ErrorSeverity errorSeverity2 = errorCode2.errorSeverity; | 
 |    43     if (errorSeverity1 == errorSeverity2) { | 
 |    44       ErrorType errorType1 = errorCode1.type; | 
 |    45       ErrorType errorType2 = errorCode2.type; | 
 |    46       return errorType1.compareTo(errorType2); | 
 |    47     } else { | 
 |    48       return errorSeverity2.compareTo(errorSeverity1); | 
 |    49     } | 
 |    50   }; | 
 |    51  | 
 |    52   /** | 
 |    53    * The error code associated with the error. | 
 |    54    */ | 
 |    55   final ErrorCode errorCode; | 
 |    56  | 
 |    57   /** | 
 |    58    * The localized error message. | 
 |    59    */ | 
 |    60   String _message; | 
 |    61  | 
 |    62   /** | 
 |    63    * The correction to be displayed for this error, or `null` if there is no | 
 |    64    * correction information for this error. | 
 |    65    */ | 
 |    66   String _correction; | 
 |    67  | 
 |    68   /** | 
 |    69    * The source in which the error occurred, or `null` if unknown. | 
 |    70    */ | 
 |    71   Source source; | 
 |    72  | 
 |    73   /** | 
 |    74    * The character offset from the beginning of the source (zero based) where | 
 |    75    * the error occurred. | 
 |    76    */ | 
 |    77   int offset = 0; | 
 |    78  | 
 |    79   /** | 
 |    80    * The number of characters from the offset to the end of the source which | 
 |    81    * encompasses the compilation error. | 
 |    82    */ | 
 |    83   int length = 0; | 
 |    84  | 
 |    85   /** | 
 |    86    * A flag indicating whether this error can be shown to be a non-issue because | 
 |    87    * of the result of type propagation. | 
 |    88    */ | 
 |    89   bool isStaticOnly = false; | 
 |    90  | 
 |    91   /** | 
 |    92    * Initialize a newly created analysis error. The error is associated with the | 
 |    93    * given [source] and is located at the given [offset] with the given | 
 |    94    * [length]. The error will have the given [errorCode] and the list of | 
 |    95    * [arguments] will be used to complete the message. | 
 |    96    */ | 
 |    97   AnalysisError(this.source, this.offset, this.length, this.errorCode, | 
 |    98       [List<Object> arguments]) { | 
 |    99     this._message = formatList(errorCode.message, arguments); | 
 |   100     String correctionTemplate = errorCode.correction; | 
 |   101     if (correctionTemplate != null) { | 
 |   102       this._correction = formatList(correctionTemplate, arguments); | 
 |   103     } | 
 |   104   } | 
 |   105  | 
 |   106   /** | 
 |   107    * Initialize a newly created analysis error for the specified [source]. The | 
 |   108    * error will have the given [errorCode] and the list of [arguments] will be | 
 |   109    * used to complete the message. The error has no location information. | 
 |   110    */ | 
 |   111   @deprecated // Use new AnalysisError(source, 0, 0, errorCode, arguments) | 
 |   112   AnalysisError.con1(Source source, ErrorCode errorCode, | 
 |   113       [List<Object> arguments]) | 
 |   114       : this(source, 0, 0, errorCode, arguments); | 
 |   115  | 
 |   116   /** | 
 |   117    * Initialize a newly created analysis error for the specified [source] at the | 
 |   118    * given [offset] with the given [length]. The error will have the given | 
 |   119    * [errorCode] and the list of [arguments] will be used to complete the | 
 |   120    * message. | 
 |   121    */ | 
 |   122   @deprecated // Use new AnalysisError(source, offset, length, errorCode, argume
      nts) | 
 |   123   AnalysisError.con2(Source source, int offset, int length, ErrorCode errorCode, | 
 |   124       [List<Object> arguments]) | 
 |   125       : this(source, offset, length, errorCode, arguments); | 
 |   126  | 
 |   127   /** | 
 |   128    * Return the template used to create the correction to be displayed for this | 
 |   129    * error, or `null` if there is no correction information for this error. The | 
 |   130    * correction should indicate how the user can fix the error. | 
 |   131    */ | 
 |   132   String get correction => _correction; | 
 |   133  | 
 |   134   @override | 
 |   135   int get hashCode { | 
 |   136     int hashCode = offset; | 
 |   137     hashCode ^= (_message != null) ? _message.hashCode : 0; | 
 |   138     hashCode ^= (source != null) ? source.hashCode : 0; | 
 |   139     return hashCode; | 
 |   140   } | 
 |   141  | 
 |   142   /** | 
 |   143    * Return the message to be displayed for this error. The message should | 
 |   144    * indicate what is wrong and why it is wrong. | 
 |   145    */ | 
 |   146   String get message => _message; | 
 |   147  | 
 |   148   @override | 
 |   149   bool operator ==(Object obj) { | 
 |   150     if (identical(obj, this)) { | 
 |   151       return true; | 
 |   152     } | 
 |   153     // prepare other AnalysisError | 
 |   154     if (obj is! AnalysisError) { | 
 |   155       return false; | 
 |   156     } | 
 |   157     AnalysisError other = obj as AnalysisError; | 
 |   158     // Quick checks. | 
 |   159     if (!identical(errorCode, other.errorCode)) { | 
 |   160       return false; | 
 |   161     } | 
 |   162     if (offset != other.offset || length != other.length) { | 
 |   163       return false; | 
 |   164     } | 
 |   165     if (isStaticOnly != other.isStaticOnly) { | 
 |   166       return false; | 
 |   167     } | 
 |   168     // Deep checks. | 
 |   169     if (_message != other._message) { | 
 |   170       return false; | 
 |   171     } | 
 |   172     if (source != other.source) { | 
 |   173       return false; | 
 |   174     } | 
 |   175     // OK | 
 |   176     return true; | 
 |   177   } | 
 |   178  | 
 |   179   /** | 
 |   180    * Return the value of the given [property], or `null` if the given property | 
 |   181    * is not defined for this error. | 
 |   182    */ | 
 |   183   Object getProperty(ErrorProperty property) => null; | 
 |   184  | 
 |   185   @override | 
 |   186   String toString() { | 
 |   187     StringBuffer buffer = new StringBuffer(); | 
 |   188     buffer.write((source != null) ? source.fullName : "<unknown source>"); | 
 |   189     buffer.write("("); | 
 |   190     buffer.write(offset); | 
 |   191     buffer.write(".."); | 
 |   192     buffer.write(offset + length - 1); | 
 |   193     buffer.write("): "); | 
 |   194     //buffer.write("(" + lineNumber + ":" + columnNumber + "): "); | 
 |   195     buffer.write(_message); | 
 |   196     return buffer.toString(); | 
 |   197   } | 
 |   198  | 
 |   199   /** | 
 |   200    * Merge all of the errors in the lists in the given list of [errorLists] into | 
 |   201    * a single list of errors. | 
 |   202    */ | 
 |   203   static List<AnalysisError> mergeLists(List<List<AnalysisError>> errorLists) { | 
 |   204     Set<AnalysisError> errors = new HashSet<AnalysisError>(); | 
 |   205     for (List<AnalysisError> errorList in errorLists) { | 
 |   206       errors.addAll(errorList); | 
 |   207     } | 
 |   208     return errors.toList(); | 
 |   209   } | 
 |   210 } | 
 |   211  | 
 |   212 /** | 
 |   213  * An object that listen for [AnalysisError]s being produced by the analysis | 
 |   214  * engine. | 
 |   215  */ | 
 |   216 abstract class AnalysisErrorListener { | 
 |   217   /** | 
 |   218    * An error listener that ignores errors that are reported to it. | 
 |   219    */ | 
 |   220   static final AnalysisErrorListener NULL_LISTENER = | 
 |   221       new AnalysisErrorListener_NULL_LISTENER(); | 
 |   222  | 
 |   223   /** | 
 |   224    * This method is invoked when an [error] has been found by the analysis | 
 |   225    * engine. | 
 |   226    */ | 
 |   227   void onError(AnalysisError error); | 
 |   228 } | 
 |   229  | 
 |   230 /** | 
 |   231  * An [AnalysisErrorListener] that ignores error. | 
 |   232  */ | 
 |   233 class AnalysisErrorListener_NULL_LISTENER implements AnalysisErrorListener { | 
 |   234   @override | 
 |   235   void onError(AnalysisError event) { | 
 |   236     // Ignore errors | 
 |   237   } | 
 |   238 } | 
 |   239  | 
 |   240 /** | 
 |   241  * An [AnalysisError] that can have arbitrary properties associated with it. | 
 |   242  */ | 
 |   243 class AnalysisErrorWithProperties extends AnalysisError { | 
 |   244   /** | 
 |   245    * The properties associated with this error. | 
 |   246    */ | 
 |   247   HashMap<ErrorProperty, Object> _propertyMap = | 
 |   248       new HashMap<ErrorProperty, Object>(); | 
 |   249  | 
 |   250   /** | 
 |   251    * Initialize a newly created analysis error. The error is associated with the | 
 |   252    * given [source] and is located at the given [offset] with the given | 
 |   253    * [length]. The error will have the given [errorCode] and the list of | 
 |   254    * [arguments] will be used to complete the message. | 
 |   255    */ | 
 |   256   AnalysisErrorWithProperties( | 
 |   257       Source source, int offset, int length, ErrorCode errorCode, | 
 |   258       [List<Object> arguments]) | 
 |   259       : super(source, offset, length, errorCode, arguments); | 
 |   260  | 
 |   261   /** | 
 |   262    * Initialize a newly created analysis error for the specified [source]. The | 
 |   263    * error will have the given [errorCode] and the list of [arguments] will be | 
 |   264    * used to complete the message. The error has no location information. | 
 |   265    */ | 
 |   266   @deprecated // Use new AnalysisErrorWithProperties(source, 0, 0, errorCode, ar
      guments) | 
 |   267   AnalysisErrorWithProperties.con1(Source source, ErrorCode errorCode, | 
 |   268       [List<Object> arguments]) | 
 |   269       : this(source, 0, 0, errorCode, arguments); | 
 |   270  | 
 |   271   /** | 
 |   272    * Initialize a newly created analysis error for the specified [source] at the | 
 |   273    * given [offset] with the given [length]. The error will have the given | 
 |   274    * [errorCode] and the list of [arguments] will be used to complete the | 
 |   275    * message. | 
 |   276    */ | 
 |   277   @deprecated // Use new AnalysisErrorWithProperties(source, offset, length, err
      orCode, arguments) | 
 |   278   AnalysisErrorWithProperties.con2( | 
 |   279       Source source, int offset, int length, ErrorCode errorCode, | 
 |   280       [List<Object> arguments]) | 
 |   281       : this(source, offset, length, errorCode, arguments); | 
 |   282  | 
 |   283   @override | 
 |   284   Object getProperty(ErrorProperty property) => _propertyMap[property]; | 
 |   285  | 
 |   286   /** | 
 |   287    * Set the value of the given [property] to the given [value]. Using a value | 
 |   288    * of `null` will effectively remove the property from this error. | 
 |   289    */ | 
 |   290   void setProperty(ErrorProperty property, Object value) { | 
 |   291     _propertyMap[property] = value; | 
 |   292   } | 
 |   293 } | 
 |   294  | 
 |   295 /** | 
 |   296  * An [AnalysisErrorListener] that keeps track of whether any error has been | 
 |   297  * reported to it. | 
 |   298  */ | 
 |   299 class BooleanErrorListener implements AnalysisErrorListener { | 
 |   300   /** | 
 |   301    * A flag indicating whether an error has been reported to this listener. | 
 |   302    */ | 
 |   303   bool _errorReported = false; | 
 |   304  | 
 |   305   /** | 
 |   306    * Return `true` if an error has been reported to this listener. | 
 |   307    */ | 
 |   308   bool get errorReported => _errorReported; | 
 |   309  | 
 |   310   @override | 
 |   311   void onError(AnalysisError error) { | 
 |   312     _errorReported = true; | 
 |   313   } | 
 |   314 } | 
 |   315  | 
 |   316 /** | 
 |   317  * The error codes used for compile time errors caused by constant evaluation | 
 |   318  * that would throw an exception when run in checked mode. The client of the | 
 |   319  * analysis engine is responsible for determining how these errors should be | 
 |   320  * presented to the user (for example, a command-line compiler might elect to | 
 |   321  * treat these errors differently depending whether it is compiling it "checked" | 
 |   322  * mode). | 
 |   323  */ | 
 |   324 class CheckedModeCompileTimeErrorCode extends ErrorCode { | 
 |   325   // TODO(paulberry): improve the text of these error messages so that it's | 
 |   326   // clear to the user that the error is coming from constant evaluation (and | 
 |   327   // hence the constant needs to be a subtype of the annotated type) as opposed | 
 |   328   // to static type analysis (which only requires that the two types be | 
 |   329   // assignable).  Also consider populating the "correction" field for these | 
 |   330   // errors. | 
 |   331  | 
 |   332   /** | 
 |   333    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   334    * object results in an uncaught exception being thrown. | 
 |   335    */ | 
 |   336   static const CheckedModeCompileTimeErrorCode CONST_CONSTRUCTOR_FIELD_TYPE_MISM
      ATCH = | 
 |   337       const CheckedModeCompileTimeErrorCode( | 
 |   338           'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH', | 
 |   339           "The object type '{0}' cannot be assigned to the field '{1}', which ha
      s type '{2}'"); | 
 |   340  | 
 |   341   /** | 
 |   342    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   343    * object results in an uncaught exception being thrown. | 
 |   344    */ | 
 |   345   static const CheckedModeCompileTimeErrorCode CONST_CONSTRUCTOR_PARAM_TYPE_MISM
      ATCH = | 
 |   346       const CheckedModeCompileTimeErrorCode( | 
 |   347           'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH', | 
 |   348           "The object type '{0}' cannot be assigned to a parameter of type '{1}'
      "); | 
 |   349  | 
 |   350   /** | 
 |   351    * 7.6.1 Generative Constructors: In checked mode, it is a dynamic type error | 
 |   352    * if o is not <b>null</b> and the interface of the class of <i>o</i> is not a | 
 |   353    * subtype of the static type of the field <i>v</i>. | 
 |   354    * | 
 |   355    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   356    * object results in an uncaught exception being thrown. | 
 |   357    * | 
 |   358    * Parameters: | 
 |   359    * 0: the name of the type of the initializer expression | 
 |   360    * 1: the name of the type of the field | 
 |   361    */ | 
 |   362   static const CheckedModeCompileTimeErrorCode CONST_FIELD_INITIALIZER_NOT_ASSIG
      NABLE = | 
 |   363       const CheckedModeCompileTimeErrorCode( | 
 |   364           'CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE', | 
 |   365           "The initializer type '{0}' cannot be assigned to the field type '{1}'
      "); | 
 |   366  | 
 |   367   /** | 
 |   368    * 12.6 Lists: A run-time list literal <<i>E</i>> [<i>e<sub>1</sub></i> | 
 |   369    * ... <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |   370    * * The operator []= is invoked on <i>a</i> with first argument <i>i</i> and | 
 |   371    *   second argument <i>o<sub>i+1</sub></i><i>, 1 <= i <= n</i> | 
 |   372    * | 
 |   373    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |   374    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |   375    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |   376    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |   377    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, | 
 |   378    * 1 <= j <= m</i>. | 
 |   379    */ | 
 |   380   static const CheckedModeCompileTimeErrorCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE 
      = | 
 |   381       const CheckedModeCompileTimeErrorCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE', | 
 |   382           "The element type '{0}' cannot be assigned to the list type '{1}'"); | 
 |   383  | 
 |   384   /** | 
 |   385    * 12.7 Map: A run-time map literal <<i>K</i>, <i>V</i>> | 
 |   386    * [<i>k<sub>1</sub></i> : <i>e<sub>1</sub></i> ... <i>k<sub>n</sub></i> : | 
 |   387    * <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |   388    * * The operator []= is invoked on <i>m</i> with first argument | 
 |   389    *   <i>k<sub>i</sub></i> and second argument <i>e<sub>i</sub></i><i>, 1 <= | 
 |   390    *   i <= n</i> | 
 |   391    * | 
 |   392    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |   393    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |   394    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |   395    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |   396    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |   397    * <= j <= m</i>. | 
 |   398    */ | 
 |   399   static const CheckedModeCompileTimeErrorCode MAP_KEY_TYPE_NOT_ASSIGNABLE = | 
 |   400       const CheckedModeCompileTimeErrorCode('MAP_KEY_TYPE_NOT_ASSIGNABLE', | 
 |   401           "The element type '{0}' cannot be assigned to the map key type '{1}'")
      ; | 
 |   402  | 
 |   403   /** | 
 |   404    * 12.7 Map: A run-time map literal <<i>K</i>, <i>V</i>> | 
 |   405    * [<i>k<sub>1</sub></i> : <i>e<sub>1</sub></i> ... <i>k<sub>n</sub></i> : | 
 |   406    * <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |   407    * * The operator []= is invoked on <i>m</i> with first argument | 
 |   408    *   <i>k<sub>i</sub></i> and second argument <i>e<sub>i</sub></i><i>, 1 <= | 
 |   409    *   i <= n</i> | 
 |   410    * | 
 |   411    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |   412    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |   413    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |   414    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |   415    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |   416    * <= j <= m</i>. | 
 |   417    */ | 
 |   418   static const CheckedModeCompileTimeErrorCode MAP_VALUE_TYPE_NOT_ASSIGNABLE = | 
 |   419       const CheckedModeCompileTimeErrorCode('MAP_VALUE_TYPE_NOT_ASSIGNABLE', | 
 |   420           "The element type '{0}' cannot be assigned to the map value type '{1}'
      "); | 
 |   421  | 
 |   422   /** | 
 |   423    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   424    * object results in an uncaught exception being thrown. | 
 |   425    */ | 
 |   426   static const CheckedModeCompileTimeErrorCode VARIABLE_TYPE_MISMATCH = | 
 |   427       const CheckedModeCompileTimeErrorCode('VARIABLE_TYPE_MISMATCH', | 
 |   428           "The object type '{0}' cannot be assigned to a variable of type '{1}'"
      ); | 
 |   429  | 
 |   430   /** | 
 |   431    * Initialize a newly created error code to have the given [name]. The message | 
 |   432    * associated with the error will be created from the given [message] | 
 |   433    * template. The correction associated with the error will be created from the | 
 |   434    * given [correction] template. | 
 |   435    */ | 
 |   436   const CheckedModeCompileTimeErrorCode(String name, String message, | 
 |   437       [String correction]) | 
 |   438       : super(name, message, correction); | 
 |   439  | 
 |   440   @override | 
 |   441   ErrorSeverity get errorSeverity => | 
 |   442       ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR.severity; | 
 |   443  | 
 |   444   @override | 
 |   445   ErrorType get type => ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR; | 
 |   446 } | 
 |   447  | 
 |   448 /** | 
 |   449  * The error codes used for compile time errors. The convention for this class | 
 |   450  * is for the name of the error code to indicate the problem that caused the | 
 |   451  * error to be generated and for the error message to explain what is wrong and, | 
 |   452  * when appropriate, how the problem can be corrected. | 
 |   453  */ | 
 |   454 class CompileTimeErrorCode extends ErrorCode { | 
 |   455   /** | 
 |   456    * Enum proposal: It is also a compile-time error to explicitly instantiate an | 
 |   457    * enum via 'new' or 'const' or to access its private fields. | 
 |   458    */ | 
 |   459   static const CompileTimeErrorCode ACCESS_PRIVATE_ENUM_FIELD = | 
 |   460       const CompileTimeErrorCode('ACCESS_PRIVATE_ENUM_FIELD', | 
 |   461           "The private fields of an enum cannot be accessed, even within the sam
      e library"); | 
 |   462  | 
 |   463   /** | 
 |   464    * 14.2 Exports: It is a compile-time error if a name <i>N</i> is re-exported | 
 |   465    * by a library <i>L</i> and <i>N</i> is introduced into the export namespace | 
 |   466    * of <i>L</i> by more than one export, unless each all exports refer to same | 
 |   467    * declaration for the name N. | 
 |   468    * | 
 |   469    * Parameters: | 
 |   470    * 0: the name of the ambiguous element | 
 |   471    * 1: the name of the first library that the type is found | 
 |   472    * 2: the name of the second library that the type is found | 
 |   473    */ | 
 |   474   static const CompileTimeErrorCode AMBIGUOUS_EXPORT = | 
 |   475       const CompileTimeErrorCode('AMBIGUOUS_EXPORT', | 
 |   476           "The name '{0}' is defined in the libraries '{1}' and '{2}'"); | 
 |   477  | 
 |   478   /** | 
 |   479    * 12.33 Argument Definition Test: It is a compile time error if <i>v</i> does | 
 |   480    * not denote a formal parameter. | 
 |   481    * | 
 |   482    * Parameters: | 
 |   483    * 0: the name of the identifier in the argument definition test that is not a | 
 |   484    *    parameter | 
 |   485    */ | 
 |   486   static const CompileTimeErrorCode ARGUMENT_DEFINITION_TEST_NON_PARAMETER = | 
 |   487       const CompileTimeErrorCode( | 
 |   488           'ARGUMENT_DEFINITION_TEST_NON_PARAMETER', "'{0}' is not a parameter"); | 
 |   489  | 
 |   490   /** | 
 |   491    * ?? Asynchronous For-in: It is a compile-time error if an asynchronous | 
 |   492    * for-in statement appears inside a synchronous function. | 
 |   493    */ | 
 |   494   static const CompileTimeErrorCode ASYNC_FOR_IN_WRONG_CONTEXT = | 
 |   495       const CompileTimeErrorCode('ASYNC_FOR_IN_WRONG_CONTEXT', | 
 |   496           "The asynchronous for-in can only be used in a function marked with as
      ync or async*"); | 
 |   497  | 
 |   498   /** | 
 |   499    * ??: It is a compile-time error if the function immediately enclosing a is | 
 |   500    * not declared asynchronous. | 
 |   501    */ | 
 |   502   static const CompileTimeErrorCode AWAIT_IN_WRONG_CONTEXT = | 
 |   503       const CompileTimeErrorCode('AWAIT_IN_WRONG_CONTEXT', | 
 |   504           "The await expression can only be used in a function marked as async o
      r async*"); | 
 |   505  | 
 |   506   /** | 
 |   507    * 12.30 Identifier Reference: It is a compile-time error to use a built-in | 
 |   508    * identifier other than dynamic as a type annotation. | 
 |   509    */ | 
 |   510   static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE = | 
 |   511       const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE', | 
 |   512           "The built-in identifier '{0}' cannot be used as a type"); | 
 |   513  | 
 |   514   /** | 
 |   515    * 12.30 Identifier Reference: It is a compile-time error if a built-in | 
 |   516    * identifier is used as the declared name of a class, type parameter or type | 
 |   517    * alias. | 
 |   518    */ | 
 |   519   static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_NAME = | 
 |   520       const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE_NAME', | 
 |   521           "The built-in identifier '{0}' cannot be used as a type name"); | 
 |   522  | 
 |   523   /** | 
 |   524    * 12.30 Identifier Reference: It is a compile-time error if a built-in | 
 |   525    * identifier is used as the declared name of a class, type parameter or type | 
 |   526    * alias. | 
 |   527    */ | 
 |   528   static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME = | 
 |   529       const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME', | 
 |   530           "The built-in identifier '{0}' cannot be used as a type alias name"); | 
 |   531  | 
 |   532   /** | 
 |   533    * 12.30 Identifier Reference: It is a compile-time error if a built-in | 
 |   534    * identifier is used as the declared name of a class, type parameter or type | 
 |   535    * alias. | 
 |   536    */ | 
 |   537   static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME = | 
 |   538       const CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME', | 
 |   539           "The built-in identifier '{0}' cannot be used as a type parameter name
      "); | 
 |   540  | 
 |   541   /** | 
 |   542    * 13.9 Switch: It is a compile-time error if the class <i>C</i> implements | 
 |   543    * the operator <i>==</i>. | 
 |   544    */ | 
 |   545   static const CompileTimeErrorCode CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS = | 
 |   546       const CompileTimeErrorCode('CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS', | 
 |   547           "The switch case expression type '{0}' cannot override the == operator
      "); | 
 |   548  | 
 |   549   /** | 
 |   550    * 12.1 Constants: It is a compile-time error if evaluation of a compile-time | 
 |   551    * constant would raise | 
 |   552    * an exception. | 
 |   553    */ | 
 |   554   static const CompileTimeErrorCode COMPILE_TIME_CONSTANT_RAISES_EXCEPTION = | 
 |   555       const CompileTimeErrorCode('COMPILE_TIME_CONSTANT_RAISES_EXCEPTION', ""); | 
 |   556  | 
 |   557   /** | 
 |   558    * 7.2 Getters: It is a compile-time error if a class has both a getter and a | 
 |   559    * method with the same name. This restriction holds regardless of whether the | 
 |   560    * getter is defined explicitly or implicitly, or whether the getter or the | 
 |   561    * method are inherited or not. | 
 |   562    */ | 
 |   563   static const CompileTimeErrorCode CONFLICTING_GETTER_AND_METHOD = | 
 |   564       const CompileTimeErrorCode('CONFLICTING_GETTER_AND_METHOD', | 
 |   565           "Class '{0}' cannot have both getter '{1}.{2}' and method with the sam
      e name"); | 
 |   566  | 
 |   567   /** | 
 |   568    * 7.2 Getters: It is a compile-time error if a class has both a getter and a | 
 |   569    * method with the same name. This restriction holds regardless of whether the | 
 |   570    * getter is defined explicitly or implicitly, or whether the getter or the | 
 |   571    * method are inherited or not. | 
 |   572    */ | 
 |   573   static const CompileTimeErrorCode CONFLICTING_METHOD_AND_GETTER = | 
 |   574       const CompileTimeErrorCode('CONFLICTING_METHOD_AND_GETTER', | 
 |   575           "Class '{0}' cannot have both method '{1}.{2}' and getter with the sam
      e name"); | 
 |   576  | 
 |   577   /** | 
 |   578    * 7.6 Constructors: A constructor name always begins with the name of its | 
 |   579    * immediately enclosing class, and may optionally be followed by a dot and an | 
 |   580    * identifier <i>id</i>. It is a compile-time error if <i>id</i> is the name | 
 |   581    * of a member declared in the immediately enclosing class. | 
 |   582    */ | 
 |   583   static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD = | 
 |   584       const CompileTimeErrorCode('CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD', | 
 |   585           "'{0}' cannot be used to name a constructor and a field in this class"
      ); | 
 |   586  | 
 |   587   /** | 
 |   588    * 7.6 Constructors: A constructor name always begins with the name of its | 
 |   589    * immediately enclosing class, and may optionally be followed by a dot and an | 
 |   590    * identifier <i>id</i>. It is a compile-time error if <i>id</i> is the name | 
 |   591    * of a member declared in the immediately enclosing class. | 
 |   592    */ | 
 |   593   static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD = | 
 |   594       const CompileTimeErrorCode('CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD', | 
 |   595           "'{0}' cannot be used to name a constructor and a method in this class
      "); | 
 |   596  | 
 |   597   /** | 
 |   598    * 7. Classes: It is a compile time error if a generic class declares a type | 
 |   599    * variable with the same name as the class or any of its members or | 
 |   600    * constructors. | 
 |   601    */ | 
 |   602   static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_CLASS = | 
 |   603       const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_CLASS', | 
 |   604           "'{0}' cannot be used to name a type varaible in a class with the same
       name"); | 
 |   605  | 
 |   606   /** | 
 |   607    * 7. Classes: It is a compile time error if a generic class declares a type | 
 |   608    * variable with the same name as the class or any of its members or | 
 |   609    * constructors. | 
 |   610    */ | 
 |   611   static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_MEMBER = | 
 |   612       const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_MEMBER', | 
 |   613           "'{0}' cannot be used to name a type varaible and member in this class
      "); | 
 |   614  | 
 |   615   /** | 
 |   616    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   617    * object results in an uncaught exception being thrown. | 
 |   618    */ | 
 |   619   static const CompileTimeErrorCode CONST_CONSTRUCTOR_THROWS_EXCEPTION = | 
 |   620       const CompileTimeErrorCode('CONST_CONSTRUCTOR_THROWS_EXCEPTION', | 
 |   621           "'const' constructors cannot throw exceptions"); | 
 |   622  | 
 |   623   /** | 
 |   624    * 10.6.3 Constant Constructors: It is a compile-time error if a constant | 
 |   625    * constructor is declared by a class C if any instance variable declared in C | 
 |   626    * is initialized with an expression that is not a constant expression. | 
 |   627    */ | 
 |   628   static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_
      NON_CONST = | 
 |   629       const CompileTimeErrorCode( | 
 |   630           'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST', | 
 |   631           "Can't define the 'const' constructor because the field '{0}' is initi
      alized with a non-constant value"); | 
 |   632  | 
 |   633   /** | 
 |   634    * 7.6.3 Constant Constructors: The superinitializer that appears, explicitly | 
 |   635    * or implicitly, in the initializer list of a constant constructor must | 
 |   636    * specify a constant constructor of the superclass of the immediately | 
 |   637    * enclosing class or a compile-time error occurs. | 
 |   638    * | 
 |   639    * 9 Mixins: For each generative constructor named ... an implicitly declared | 
 |   640    * constructor named ... is declared. | 
 |   641    */ | 
 |   642   static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_MIXIN = | 
 |   643       const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_MIXIN', | 
 |   644           "Constant constructor cannot be declared for a class with a mixin"); | 
 |   645  | 
 |   646   /** | 
 |   647    * 7.6.3 Constant Constructors: The superinitializer that appears, explicitly | 
 |   648    * or implicitly, in the initializer list of a constant constructor must | 
 |   649    * specify a constant constructor of the superclass of the immediately | 
 |   650    * enclosing class or a compile-time error occurs. | 
 |   651    */ | 
 |   652   static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER = | 
 |   653       const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER', | 
 |   654           "Constant constructor cannot call non-constant super constructor of '{
      0}'"); | 
 |   655  | 
 |   656   /** | 
 |   657    * 7.6.3 Constant Constructors: It is a compile-time error if a constant | 
 |   658    * constructor is declared by a class that has a non-final instance variable. | 
 |   659    * | 
 |   660    * The above refers to both locally declared and inherited instance variables. | 
 |   661    */ | 
 |   662   static const CompileTimeErrorCode CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD = | 
 |   663       const CompileTimeErrorCode('CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD', | 
 |   664           "Cannot define the 'const' constructor for a class with non-final fiel
      ds"); | 
 |   665  | 
 |   666   /** | 
 |   667    * 12.12.2 Const: It is a compile-time error if <i>T</i> is a deferred type. | 
 |   668    */ | 
 |   669   static const CompileTimeErrorCode CONST_DEFERRED_CLASS = | 
 |   670       const CompileTimeErrorCode('CONST_DEFERRED_CLASS', | 
 |   671           "Deferred classes cannot be created with 'const'"); | 
 |   672  | 
 |   673   /** | 
 |   674    * 6.2 Formal Parameters: It is a compile-time error if a formal parameter is | 
 |   675    * declared as a constant variable. | 
 |   676    */ | 
 |   677   static const CompileTimeErrorCode CONST_FORMAL_PARAMETER = | 
 |   678       const CompileTimeErrorCode( | 
 |   679           'CONST_FORMAL_PARAMETER', "Parameters cannot be 'const'"); | 
 |   680  | 
 |   681   /** | 
 |   682    * 5 Variables: A constant variable must be initialized to a compile-time | 
 |   683    * constant or a compile-time error occurs. | 
 |   684    */ | 
 |   685   static const CompileTimeErrorCode CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE = | 
 |   686       const CompileTimeErrorCode('CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE', | 
 |   687           "'const' variables must be constant value"); | 
 |   688  | 
 |   689   /** | 
 |   690    * 5 Variables: A constant variable must be initialized to a compile-time | 
 |   691    * constant or a compile-time error occurs. | 
 |   692    * | 
 |   693    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |   694    * not qualified by a deferred prefix. | 
 |   695    */ | 
 |   696   static const CompileTimeErrorCode CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FR
      OM_DEFERRED_LIBRARY = | 
 |   697       const CompileTimeErrorCode( | 
 |   698           'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY', | 
 |   699           "Constant values from a deferred library cannot be used to initialized
       a 'const' variable"); | 
 |   700  | 
 |   701   /** | 
 |   702    * 7.5 Instance Variables: It is a compile-time error if an instance variable | 
 |   703    * is declared to be constant. | 
 |   704    */ | 
 |   705   static const CompileTimeErrorCode CONST_INSTANCE_FIELD = | 
 |   706       const CompileTimeErrorCode('CONST_INSTANCE_FIELD', | 
 |   707           "Only static fields can be declared as 'const'"); | 
 |   708  | 
 |   709   /** | 
 |   710    * 12.8 Maps: It is a compile-time error if the key of an entry in a constant | 
 |   711    * map literal is an instance of a class that implements the operator | 
 |   712    * <i>==</i> unless the key is a string or integer. | 
 |   713    */ | 
 |   714   static const CompileTimeErrorCode CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQU
      ALS = | 
 |   715       const CompileTimeErrorCode( | 
 |   716           'CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS', | 
 |   717           "The constant map entry key expression type '{0}' cannot override the 
      == operator"); | 
 |   718  | 
 |   719   /** | 
 |   720    * 5 Variables: A constant variable must be initialized to a compile-time | 
 |   721    * constant (12.1) or a compile-time error occurs. | 
 |   722    * | 
 |   723    * Parameters: | 
 |   724    * 0: the name of the uninitialized final variable | 
 |   725    */ | 
 |   726   static const CompileTimeErrorCode CONST_NOT_INITIALIZED = | 
 |   727       const CompileTimeErrorCode('CONST_NOT_INITIALIZED', | 
 |   728           "The const variable '{0}' must be initialized"); | 
 |   729  | 
 |   730   /** | 
 |   731    * 12.11.2 Const: An expression of one of the forms !e, e1 && e2 or e1 || e2, | 
 |   732    * where e, e1 and e2 are constant expressions that evaluate to a boolean | 
 |   733    * value. | 
 |   734    */ | 
 |   735   static const CompileTimeErrorCode CONST_EVAL_TYPE_BOOL = | 
 |   736       const CompileTimeErrorCode('CONST_EVAL_TYPE_BOOL', | 
 |   737           "In constant expressions, operand(s) of this operator must be of type 
      'bool'"); | 
 |   738  | 
 |   739   /** | 
 |   740    * 12.11.2 Const: An expression of one of the forms e1 == e2 or e1 != e2 where | 
 |   741    * e1 and e2 are constant expressions that evaluate to a numeric, string or | 
 |   742    * boolean value or to null. | 
 |   743    */ | 
 |   744   static const CompileTimeErrorCode CONST_EVAL_TYPE_BOOL_NUM_STRING = | 
 |   745       const CompileTimeErrorCode('CONST_EVAL_TYPE_BOOL_NUM_STRING', | 
 |   746           "In constant expressions, operands of this operator must be of type 'b
      ool', 'num', 'String' or 'null'"); | 
 |   747  | 
 |   748   /** | 
 |   749    * 12.11.2 Const: An expression of one of the forms ~e, e1 ^ e2, e1 & e2, | 
 |   750    * e1 | e2, e1 >> e2 or e1 << e2, where e, e1 and e2 are constant expressions | 
 |   751    * that evaluate to an integer value or to null. | 
 |   752    */ | 
 |   753   static const CompileTimeErrorCode CONST_EVAL_TYPE_INT = | 
 |   754       const CompileTimeErrorCode('CONST_EVAL_TYPE_INT', | 
 |   755           "In constant expressions, operand(s) of this operator must be of type 
      'int'"); | 
 |   756  | 
 |   757   /** | 
 |   758    * 12.11.2 Const: An expression of one of the forms e, e1 + e2, e1 - e2, e1 * | 
 |   759    * e2, e1 / e2, e1 ~/ e2, e1 > e2, e1 < e2, e1 >= e2, e1 <= e2 or e1 % e2, | 
 |   760    * where e, e1 and e2 are constant expressions that evaluate to a numeric | 
 |   761    * value or to null. | 
 |   762    */ | 
 |   763   static const CompileTimeErrorCode CONST_EVAL_TYPE_NUM = | 
 |   764       const CompileTimeErrorCode('CONST_EVAL_TYPE_NUM', | 
 |   765           "In constant expressions, operand(s) of this operator must be of type 
      'num'"); | 
 |   766  | 
 |   767   /** | 
 |   768    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   769    * object results in an uncaught exception being thrown. | 
 |   770    */ | 
 |   771   static const CompileTimeErrorCode CONST_EVAL_THROWS_EXCEPTION = | 
 |   772       const CompileTimeErrorCode('CONST_EVAL_THROWS_EXCEPTION', | 
 |   773           "Evaluation of this constant expression causes exception"); | 
 |   774  | 
 |   775   /** | 
 |   776    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |   777    * object results in an uncaught exception being thrown. | 
 |   778    */ | 
 |   779   static const CompileTimeErrorCode CONST_EVAL_THROWS_IDBZE = | 
 |   780       const CompileTimeErrorCode('CONST_EVAL_THROWS_IDBZE', | 
 |   781           "Evaluation of this constant expression throws IntegerDivisionByZeroEx
      ception"); | 
 |   782  | 
 |   783   /** | 
 |   784    * 12.11.2 Const: If <i>T</i> is a parameterized type <i>S<U<sub>1</sub>, | 
 |   785    * …, U<sub>m</sub>></i>, let <i>R = S</i>; It is a compile time | 
 |   786    * error if <i>S</i> is not a generic type with <i>m</i> type parameters. | 
 |   787    * | 
 |   788    * Parameters: | 
 |   789    * 0: the name of the type being referenced (<i>S</i>) | 
 |   790    * 1: the number of type parameters that were declared | 
 |   791    * 2: the number of type arguments provided | 
 |   792    * | 
 |   793    * See [CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS], and | 
 |   794    * [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]. | 
 |   795    */ | 
 |   796   static const CompileTimeErrorCode CONST_WITH_INVALID_TYPE_PARAMETERS = | 
 |   797       const CompileTimeErrorCode('CONST_WITH_INVALID_TYPE_PARAMETERS', | 
 |   798           "The type '{0}' is declared with {1} type parameters, but {2} type arg
      uments were given"); | 
 |   799  | 
 |   800   /** | 
 |   801    * 12.11.2 Const: If <i>e</i> is of the form <i>const T(a<sub>1</sub>, | 
 |   802    * …, a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …, | 
 |   803    * x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a compile-time error if the | 
 |   804    * type <i>T</i> does not declare a constant constructor with the same name as | 
 |   805    * the declaration of <i>T</i>. | 
 |   806    */ | 
 |   807   static const CompileTimeErrorCode CONST_WITH_NON_CONST = | 
 |   808       const CompileTimeErrorCode('CONST_WITH_NON_CONST', | 
 |   809           "The constructor being called is not a 'const' constructor"); | 
 |   810  | 
 |   811   /** | 
 |   812    * 12.11.2 Const: In all of the above cases, it is a compile-time error if | 
 |   813    * <i>a<sub>i</sub>, 1 <= i <= n + k</i>, is not a compile-time constant | 
 |   814    * expression. | 
 |   815    */ | 
 |   816   static const CompileTimeErrorCode CONST_WITH_NON_CONSTANT_ARGUMENT = | 
 |   817       const CompileTimeErrorCode('CONST_WITH_NON_CONSTANT_ARGUMENT', | 
 |   818           "Arguments of a constant creation must be constant expressions"); | 
 |   819  | 
 |   820   /** | 
 |   821    * 12.11.2 Const: It is a compile-time error if <i>T</i> is not a class | 
 |   822    * accessible in the current scope, optionally followed by type arguments. | 
 |   823    * | 
 |   824    * 12.11.2 Const: If <i>e</i> is of the form <i>const T.id(a<sub>1</sub>, | 
 |   825    * …, a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, … | 
 |   826    * x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a compile-time error if | 
 |   827    * <i>T</i> is not a class accessible in the current scope, optionally | 
 |   828    * followed by type arguments. | 
 |   829    * | 
 |   830    * Parameters: | 
 |   831    * 0: the name of the non-type element | 
 |   832    */ | 
 |   833   static const CompileTimeErrorCode CONST_WITH_NON_TYPE = | 
 |   834       const CompileTimeErrorCode( | 
 |   835           'CONST_WITH_NON_TYPE', "The name '{0}' is not a class"); | 
 |   836  | 
 |   837   /** | 
 |   838    * 12.11.2 Const: It is a compile-time error if <i>T</i> includes any type | 
 |   839    * parameters. | 
 |   840    */ | 
 |   841   static const CompileTimeErrorCode CONST_WITH_TYPE_PARAMETERS = | 
 |   842       const CompileTimeErrorCode('CONST_WITH_TYPE_PARAMETERS', | 
 |   843           "The constant creation cannot use a type parameter"); | 
 |   844  | 
 |   845   /** | 
 |   846    * 12.11.2 Const: It is a compile-time error if <i>T.id</i> is not the name of | 
 |   847    * a constant constructor declared by the type <i>T</i>. | 
 |   848    * | 
 |   849    * Parameters: | 
 |   850    * 0: the name of the type | 
 |   851    * 1: the name of the requested constant constructor | 
 |   852    */ | 
 |   853   static const CompileTimeErrorCode CONST_WITH_UNDEFINED_CONSTRUCTOR = | 
 |   854       const CompileTimeErrorCode('CONST_WITH_UNDEFINED_CONSTRUCTOR', | 
 |   855           "The class '{0}' does not have a constant constructor '{1}'"); | 
 |   856  | 
 |   857   /** | 
 |   858    * 12.11.2 Const: It is a compile-time error if <i>T.id</i> is not the name of | 
 |   859    * a constant constructor declared by the type <i>T</i>. | 
 |   860    * | 
 |   861    * Parameters: | 
 |   862    * 0: the name of the type | 
 |   863    */ | 
 |   864   static const CompileTimeErrorCode CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT = | 
 |   865       const CompileTimeErrorCode('CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT', | 
 |   866           "The class '{0}' does not have a default constant constructor"); | 
 |   867  | 
 |   868   /** | 
 |   869    * 15.3.1 Typedef: It is a compile-time error if any default values are | 
 |   870    * specified in the signature of a function type alias. | 
 |   871    */ | 
 |   872   static const CompileTimeErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS = | 
 |   873       const CompileTimeErrorCode('DEFAULT_VALUE_IN_FUNCTION_TYPE_ALIAS', | 
 |   874           "Default values aren't allowed in typedefs"); | 
 |   875  | 
 |   876   /** | 
 |   877    * 6.2.1 Required Formals: By means of a function signature that names the | 
 |   878    * parameter and describes its type as a function type. It is a compile-time | 
 |   879    * error if any default values are specified in the signature of such a | 
 |   880    * function type. | 
 |   881    */ | 
 |   882   static const CompileTimeErrorCode DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER = | 
 |   883       const CompileTimeErrorCode('DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER', | 
 |   884           "Default values aren't allowed in function type parameters"); | 
 |   885  | 
 |   886   /** | 
 |   887    * 7.6.2 Factories: It is a compile-time error if <i>k</i> explicitly | 
 |   888    * specifies a default value for an optional parameter. | 
 |   889    */ | 
 |   890   static const CompileTimeErrorCode DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRU
      CTOR = | 
 |   891       const CompileTimeErrorCode( | 
 |   892           'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR', | 
 |   893           "Default values aren't allowed in factory constructors that redirect t
      o another constructor"); | 
 |   894  | 
 |   895   /** | 
 |   896    * 3.1 Scoping: It is a compile-time error if there is more than one entity | 
 |   897    * with the same name declared in the same scope. | 
 |   898    */ | 
 |   899   static const CompileTimeErrorCode DUPLICATE_CONSTRUCTOR_DEFAULT = | 
 |   900       const CompileTimeErrorCode('DUPLICATE_CONSTRUCTOR_DEFAULT', | 
 |   901           "The default constructor is already defined"); | 
 |   902  | 
 |   903   /** | 
 |   904    * 3.1 Scoping: It is a compile-time error if there is more than one entity | 
 |   905    * with the same name declared in the same scope. | 
 |   906    * | 
 |   907    * Parameters: | 
 |   908    * 0: the name of the duplicate entity | 
 |   909    */ | 
 |   910   static const CompileTimeErrorCode DUPLICATE_CONSTRUCTOR_NAME = | 
 |   911       const CompileTimeErrorCode('DUPLICATE_CONSTRUCTOR_NAME', | 
 |   912           "The constructor with name '{0}' is already defined"); | 
 |   913  | 
 |   914   /** | 
 |   915    * 3.1 Scoping: It is a compile-time error if there is more than one entity | 
 |   916    * with the same name declared in the same scope. | 
 |   917    * | 
 |   918    * 7 Classes: It is a compile-time error if a class declares two members of | 
 |   919    * the same name. | 
 |   920    * | 
 |   921    * 7 Classes: It is a compile-time error if a class has an instance member and | 
 |   922    * a static member with the same name. | 
 |   923    * | 
 |   924    * Parameters: | 
 |   925    * 0: the name of the duplicate entity | 
 |   926    */ | 
 |   927   static const CompileTimeErrorCode DUPLICATE_DEFINITION = | 
 |   928       const CompileTimeErrorCode( | 
 |   929           'DUPLICATE_DEFINITION', "The name '{0}' is already defined"); | 
 |   930  | 
 |   931   /** | 
 |   932    * 7. Classes: It is a compile-time error if a class has an instance member | 
 |   933    * and a static member with the same name. | 
 |   934    * | 
 |   935    * This covers the additional duplicate definition cases where inheritance has | 
 |   936    * to be considered. | 
 |   937    * | 
 |   938    * Parameters: | 
 |   939    * 0: the name of the class that has conflicting instance/static members | 
 |   940    * 1: the name of the conflicting members | 
 |   941    * | 
 |   942    * See [DUPLICATE_DEFINITION]. | 
 |   943    */ | 
 |   944   static const CompileTimeErrorCode DUPLICATE_DEFINITION_INHERITANCE = | 
 |   945       const CompileTimeErrorCode('DUPLICATE_DEFINITION_INHERITANCE', | 
 |   946           "The name '{0}' is already defined in '{1}'"); | 
 |   947  | 
 |   948   /** | 
 |   949    * 12.14.2 Binding Actuals to Formals: It is a compile-time error if | 
 |   950    * <i>q<sub>i</sub> = q<sub>j</sub></i> for any <i>i != j</i> [where | 
 |   951    * <i>q<sub>i</sub></i> is the label for a named argument]. | 
 |   952    */ | 
 |   953   static const CompileTimeErrorCode DUPLICATE_NAMED_ARGUMENT = | 
 |   954       const CompileTimeErrorCode('DUPLICATE_NAMED_ARGUMENT', | 
 |   955           "The argument for the named parameter '{0}' was already specified"); | 
 |   956  | 
 |   957   /** | 
 |   958    * SDK implementation libraries can be exported only by other SDK libraries. | 
 |   959    * | 
 |   960    * Parameters: | 
 |   961    * 0: the uri pointing to a library | 
 |   962    */ | 
 |   963   static const CompileTimeErrorCode EXPORT_INTERNAL_LIBRARY = | 
 |   964       const CompileTimeErrorCode('EXPORT_INTERNAL_LIBRARY', | 
 |   965           "The library '{0}' is internal and cannot be exported"); | 
 |   966  | 
 |   967   /** | 
 |   968    * 14.2 Exports: It is a compile-time error if the compilation unit found at | 
 |   969    * the specified URI is not a library declaration. | 
 |   970    * | 
 |   971    * Parameters: | 
 |   972    * 0: the uri pointing to a non-library declaration | 
 |   973    */ | 
 |   974   static const CompileTimeErrorCode EXPORT_OF_NON_LIBRARY = | 
 |   975       const CompileTimeErrorCode('EXPORT_OF_NON_LIBRARY', | 
 |   976           "The exported library '{0}' must not have a part-of directive"); | 
 |   977  | 
 |   978   /** | 
 |   979    * Enum proposal: It is a compile-time error to subclass, mix-in or implement | 
 |   980    * an enum. | 
 |   981    */ | 
 |   982   static const CompileTimeErrorCode EXTENDS_ENUM = const CompileTimeErrorCode( | 
 |   983       'EXTENDS_ENUM', "Classes cannot extend an enum"); | 
 |   984  | 
 |   985   /** | 
 |   986    * 7.9 Superclasses: It is a compile-time error if the extends clause of a | 
 |   987    * class <i>C</i> includes a type expression that does not denote a class | 
 |   988    * available in the lexical scope of <i>C</i>. | 
 |   989    * | 
 |   990    * Parameters: | 
 |   991    * 0: the name of the superclass that was not found | 
 |   992    */ | 
 |   993   static const CompileTimeErrorCode EXTENDS_NON_CLASS = | 
 |   994       const CompileTimeErrorCode( | 
 |   995           'EXTENDS_NON_CLASS', "Classes can only extend other classes"); | 
 |   996  | 
 |   997   /** | 
 |   998    * 12.2 Null: It is a compile-time error for a class to attempt to extend or | 
 |   999    * implement Null. | 
 |  1000    * | 
 |  1001    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1002    * or implement int. | 
 |  1003    * | 
 |  1004    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1005    * or implement double. | 
 |  1006    * | 
 |  1007    * 12.3 Numbers: It is a compile-time error for any type other than the types | 
 |  1008    * int and double to | 
 |  1009    * attempt to extend or implement num. | 
 |  1010    * | 
 |  1011    * 12.4 Booleans: It is a compile-time error for a class to attempt to extend | 
 |  1012    * or implement bool. | 
 |  1013    * | 
 |  1014    * 12.5 Strings: It is a compile-time error for a class to attempt to extend | 
 |  1015    * or implement String. | 
 |  1016    * | 
 |  1017    * Parameters: | 
 |  1018    * 0: the name of the type that cannot be extended | 
 |  1019    * | 
 |  1020    * See [IMPLEMENTS_DISALLOWED_CLASS]. | 
 |  1021    */ | 
 |  1022   static const CompileTimeErrorCode EXTENDS_DISALLOWED_CLASS = | 
 |  1023       const CompileTimeErrorCode( | 
 |  1024           'EXTENDS_DISALLOWED_CLASS', "Classes cannot extend '{0}'"); | 
 |  1025  | 
 |  1026   /** | 
 |  1027    * 7.9 Superclasses: It is a compile-time error if the extends clause of a | 
 |  1028    * class <i>C</i> includes a deferred type expression. | 
 |  1029    * | 
 |  1030    * Parameters: | 
 |  1031    * 0: the name of the type that cannot be extended | 
 |  1032    * | 
 |  1033    * See [IMPLEMENTS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS]. | 
 |  1034    */ | 
 |  1035   static const CompileTimeErrorCode EXTENDS_DEFERRED_CLASS = | 
 |  1036       const CompileTimeErrorCode('EXTENDS_DEFERRED_CLASS', | 
 |  1037           "This class cannot extend the deferred class '{0}'"); | 
 |  1038  | 
 |  1039   /** | 
 |  1040    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m < | 
 |  1041    * h</i> or if <i>m > n</i>. | 
 |  1042    * | 
 |  1043    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |  1044    * object results in an uncaught exception being thrown. | 
 |  1045    * | 
 |  1046    * Parameters: | 
 |  1047    * 0: the maximum number of positional arguments | 
 |  1048    * 1: the actual number of positional arguments given | 
 |  1049    */ | 
 |  1050   static const CompileTimeErrorCode EXTRA_POSITIONAL_ARGUMENTS = | 
 |  1051       const CompileTimeErrorCode('EXTRA_POSITIONAL_ARGUMENTS', | 
 |  1052           "{0} positional arguments expected, but {1} found"); | 
 |  1053  | 
 |  1054   /** | 
 |  1055    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It | 
 |  1056    * is a compile time error if more than one initializer corresponding to a | 
 |  1057    * given instance variable appears in <i>k</i>'s list. | 
 |  1058    */ | 
 |  1059   static const CompileTimeErrorCode FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS = | 
 |  1060       const CompileTimeErrorCode('FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS', | 
 |  1061           "The field '{0}' cannot be initialized twice in the same constructor")
      ; | 
 |  1062  | 
 |  1063   /** | 
 |  1064    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It | 
 |  1065    * is a compile time error if <i>k</i>'s initializer list contains an | 
 |  1066    * initializer for a variable that is initialized by means of an initializing | 
 |  1067    * formal of <i>k</i>. | 
 |  1068    */ | 
 |  1069   static const CompileTimeErrorCode FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZ
      ER = | 
 |  1070       const CompileTimeErrorCode( | 
 |  1071           'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER', | 
 |  1072           "Fields cannot be initialized in both the parameter list and the initi
      alizers"); | 
 |  1073  | 
 |  1074   /** | 
 |  1075    * 5 Variables: It is a compile-time error if a final instance variable that | 
 |  1076    * has is initialized by means of an initializing formal of a constructor is | 
 |  1077    * also initialized elsewhere in the same constructor. | 
 |  1078    * | 
 |  1079    * Parameters: | 
 |  1080    * 0: the name of the field in question | 
 |  1081    */ | 
 |  1082   static const CompileTimeErrorCode FINAL_INITIALIZED_MULTIPLE_TIMES = | 
 |  1083       const CompileTimeErrorCode('FINAL_INITIALIZED_MULTIPLE_TIMES', | 
 |  1084           "'{0}' is a final field and so can only be set once"); | 
 |  1085  | 
 |  1086   /** | 
 |  1087    * 7.6.1 Generative Constructors: It is a compile-time error if an | 
 |  1088    * initializing formal is used by a function other than a non-redirecting | 
 |  1089    * generative constructor. | 
 |  1090    */ | 
 |  1091   static const CompileTimeErrorCode FIELD_INITIALIZER_FACTORY_CONSTRUCTOR = | 
 |  1092       const CompileTimeErrorCode('FIELD_INITIALIZER_FACTORY_CONSTRUCTOR', | 
 |  1093           "Initializing formal fields cannot be used in factory constructors"); | 
 |  1094  | 
 |  1095   /** | 
 |  1096    * 7.6.1 Generative Constructors: It is a compile-time error if an | 
 |  1097    * initializing formal is used by a function other than a non-redirecting | 
 |  1098    * generative constructor. | 
 |  1099    */ | 
 |  1100   static const CompileTimeErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR = | 
 |  1101       const CompileTimeErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR', | 
 |  1102           "Initializing formal fields can only be used in constructors"); | 
 |  1103  | 
 |  1104   /** | 
 |  1105    * 7.6.1 Generative Constructors: A generative constructor may be redirecting, | 
 |  1106    * in which case its only action is to invoke another generative constructor. | 
 |  1107    * | 
 |  1108    * 7.6.1 Generative Constructors: It is a compile-time error if an | 
 |  1109    * initializing formal is used by a function other than a non-redirecting | 
 |  1110    * generative constructor. | 
 |  1111    */ | 
 |  1112   static const CompileTimeErrorCode FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR = | 
 |  1113       const CompileTimeErrorCode('FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR', | 
 |  1114           "The redirecting constructor cannot have a field initializer"); | 
 |  1115  | 
 |  1116   /** | 
 |  1117    * 7.2 Getters: It is a compile-time error if a class has both a getter and a | 
 |  1118    * method with the same name. | 
 |  1119    * | 
 |  1120    * Parameters: | 
 |  1121    * 0: the conflicting name of the getter and method | 
 |  1122    */ | 
 |  1123   static const CompileTimeErrorCode GETTER_AND_METHOD_WITH_SAME_NAME = | 
 |  1124       const CompileTimeErrorCode('GETTER_AND_METHOD_WITH_SAME_NAME', | 
 |  1125           "'{0}' cannot be used to name a getter, there is already a method with
       the same name"); | 
 |  1126  | 
 |  1127   /** | 
 |  1128    * 7.10 Superinterfaces: It is a compile-time error if the implements clause | 
 |  1129    * of a class <i>C</i> specifies a malformed type or deferred type as a | 
 |  1130    * superinterface. | 
 |  1131    * | 
 |  1132    * Parameters: | 
 |  1133    * 0: the name of the type that cannot be extended | 
 |  1134    * | 
 |  1135    * See [EXTENDS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS]. | 
 |  1136    */ | 
 |  1137   static const CompileTimeErrorCode IMPLEMENTS_DEFERRED_CLASS = | 
 |  1138       const CompileTimeErrorCode('IMPLEMENTS_DEFERRED_CLASS', | 
 |  1139           "This class cannot implement the deferred class '{0}'"); | 
 |  1140  | 
 |  1141   /** | 
 |  1142    * 12.2 Null: It is a compile-time error for a class to attempt to extend or | 
 |  1143    * implement Null. | 
 |  1144    * | 
 |  1145    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1146    * or implement int. | 
 |  1147    * | 
 |  1148    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1149    * or implement double. | 
 |  1150    * | 
 |  1151    * 12.3 Numbers: It is a compile-time error for any type other than the types | 
 |  1152    * int and double to | 
 |  1153    * attempt to extend or implement num. | 
 |  1154    * | 
 |  1155    * 12.4 Booleans: It is a compile-time error for a class to attempt to extend | 
 |  1156    * or implement bool. | 
 |  1157    * | 
 |  1158    * 12.5 Strings: It is a compile-time error for a class to attempt to extend | 
 |  1159    * or implement String. | 
 |  1160    * | 
 |  1161    * Parameters: | 
 |  1162    * 0: the name of the type that cannot be implemented | 
 |  1163    * | 
 |  1164    * See [EXTENDS_DISALLOWED_CLASS]. | 
 |  1165    */ | 
 |  1166   static const CompileTimeErrorCode IMPLEMENTS_DISALLOWED_CLASS = | 
 |  1167       const CompileTimeErrorCode( | 
 |  1168           'IMPLEMENTS_DISALLOWED_CLASS', "Classes cannot implement '{0}'"); | 
 |  1169  | 
 |  1170   /** | 
 |  1171    * 7.10 Superinterfaces: It is a compile-time error if the implements clause | 
 |  1172    * of a class includes type dynamic. | 
 |  1173    */ | 
 |  1174   static const CompileTimeErrorCode IMPLEMENTS_DYNAMIC = | 
 |  1175       const CompileTimeErrorCode( | 
 |  1176           'IMPLEMENTS_DYNAMIC', "Classes cannot implement 'dynamic'"); | 
 |  1177  | 
 |  1178   /** | 
 |  1179    * Enum proposal: It is a compile-time error to subclass, mix-in or implement | 
 |  1180    * an enum. | 
 |  1181    */ | 
 |  1182   static const CompileTimeErrorCode IMPLEMENTS_ENUM = | 
 |  1183       const CompileTimeErrorCode( | 
 |  1184           'IMPLEMENTS_ENUM', "Classes cannot implement an enum"); | 
 |  1185  | 
 |  1186   /** | 
 |  1187    * 7.10 Superinterfaces: It is a compile-time error if the implements clause | 
 |  1188    * of a class <i>C</i> includes a type expression that does not denote a class | 
 |  1189    * available in the lexical scope of <i>C</i>. | 
 |  1190    * | 
 |  1191    * Parameters: | 
 |  1192    * 0: the name of the interface that was not found | 
 |  1193    */ | 
 |  1194   static const CompileTimeErrorCode IMPLEMENTS_NON_CLASS = | 
 |  1195       const CompileTimeErrorCode( | 
 |  1196           'IMPLEMENTS_NON_CLASS', "Classes can only implement other classes"); | 
 |  1197  | 
 |  1198   /** | 
 |  1199    * 7.10 Superinterfaces: It is a compile-time error if a type <i>T</i> appears | 
 |  1200    * more than once in the implements clause of a class. | 
 |  1201    * | 
 |  1202    * Parameters: | 
 |  1203    * 0: the name of the class that is implemented more than once | 
 |  1204    */ | 
 |  1205   static const CompileTimeErrorCode IMPLEMENTS_REPEATED = | 
 |  1206       const CompileTimeErrorCode( | 
 |  1207           'IMPLEMENTS_REPEATED', "'{0}' can only be implemented once"); | 
 |  1208  | 
 |  1209   /** | 
 |  1210    * 7.10 Superinterfaces: It is a compile-time error if the superclass of a | 
 |  1211    * class <i>C</i> appears in the implements clause of <i>C</i>. | 
 |  1212    * | 
 |  1213    * Parameters: | 
 |  1214    * 0: the name of the class that appears in both "extends" and "implements" | 
 |  1215    *    clauses | 
 |  1216    */ | 
 |  1217   static const CompileTimeErrorCode IMPLEMENTS_SUPER_CLASS = | 
 |  1218       const CompileTimeErrorCode('IMPLEMENTS_SUPER_CLASS', | 
 |  1219           "'{0}' cannot be used in both 'extends' and 'implements' clauses"); | 
 |  1220  | 
 |  1221   /** | 
 |  1222    * 7.6.1 Generative Constructors: Note that <b>this</b> is not in scope on the | 
 |  1223    * right hand side of an initializer. | 
 |  1224    * | 
 |  1225    * 12.10 This: It is a compile-time error if this appears in a top-level | 
 |  1226    * function or variable initializer, in a factory constructor, or in a static | 
 |  1227    * method or variable initializer, or in the initializer of an instance | 
 |  1228    * variable. | 
 |  1229    * | 
 |  1230    * Parameters: | 
 |  1231    * 0: the name of the type in question | 
 |  1232    */ | 
 |  1233   static const CompileTimeErrorCode IMPLICIT_THIS_REFERENCE_IN_INITIALIZER = | 
 |  1234       const CompileTimeErrorCode('IMPLICIT_THIS_REFERENCE_IN_INITIALIZER', | 
 |  1235           "Only static members can be accessed in initializers"); | 
 |  1236  | 
 |  1237   /** | 
 |  1238    * SDK implementation libraries can be imported only by other SDK libraries. | 
 |  1239    * | 
 |  1240    * Parameters: | 
 |  1241    * 0: the uri pointing to a library | 
 |  1242    */ | 
 |  1243   static const CompileTimeErrorCode IMPORT_INTERNAL_LIBRARY = | 
 |  1244       const CompileTimeErrorCode('IMPORT_INTERNAL_LIBRARY', | 
 |  1245           "The library '{0}' is internal and cannot be imported"); | 
 |  1246  | 
 |  1247   /** | 
 |  1248    * 14.1 Imports: It is a compile-time error if the specified URI of an | 
 |  1249    * immediate import does not refer to a library declaration. | 
 |  1250    * | 
 |  1251    * Parameters: | 
 |  1252    * 0: the uri pointing to a non-library declaration | 
 |  1253    * | 
 |  1254    * See [StaticWarningCode.IMPORT_OF_NON_LIBRARY]. | 
 |  1255    */ | 
 |  1256   static const CompileTimeErrorCode IMPORT_OF_NON_LIBRARY = | 
 |  1257       const CompileTimeErrorCode('IMPORT_OF_NON_LIBRARY', | 
 |  1258           "The imported library '{0}' must not have a part-of directive"); | 
 |  1259  | 
 |  1260   /** | 
 |  1261    * 13.9 Switch: It is a compile-time error if values of the expressions | 
 |  1262    * <i>e<sub>k</sub></i> are not instances of the same class <i>C</i>, for all | 
 |  1263    * <i>1 <= k <= n</i>. | 
 |  1264    * | 
 |  1265    * Parameters: | 
 |  1266    * 0: the expression source code that is the unexpected type | 
 |  1267    * 1: the name of the expected type | 
 |  1268    */ | 
 |  1269   static const CompileTimeErrorCode INCONSISTENT_CASE_EXPRESSION_TYPES = | 
 |  1270       const CompileTimeErrorCode('INCONSISTENT_CASE_EXPRESSION_TYPES', | 
 |  1271           "Case expressions must have the same types, '{0}' is not a '{1}'"); | 
 |  1272  | 
 |  1273   /** | 
 |  1274    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It | 
 |  1275    * is a compile-time error if <i>k</i>'s initializer list contains an | 
 |  1276    * initializer for a variable that is not an instance variable declared in the | 
 |  1277    * immediately surrounding class. | 
 |  1278    * | 
 |  1279    * Parameters: | 
 |  1280    * 0: the name of the initializing formal that is not an instance variable in | 
 |  1281    *    the immediately enclosing class | 
 |  1282    * | 
 |  1283    * See [INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]. | 
 |  1284    */ | 
 |  1285   static const CompileTimeErrorCode INITIALIZER_FOR_NON_EXISTENT_FIELD = | 
 |  1286       const CompileTimeErrorCode('INITIALIZER_FOR_NON_EXISTENT_FIELD', | 
 |  1287           "'{0}' is not a variable in the enclosing class"); | 
 |  1288  | 
 |  1289   /** | 
 |  1290    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It | 
 |  1291    * is a compile-time error if <i>k</i>'s initializer list contains an | 
 |  1292    * initializer for a variable that is not an instance variable declared in the | 
 |  1293    * immediately surrounding class. | 
 |  1294    * | 
 |  1295    * Parameters: | 
 |  1296    * 0: the name of the initializing formal that is a static variable in the | 
 |  1297    *    immediately enclosing class | 
 |  1298    * | 
 |  1299    * See [INITIALIZING_FORMAL_FOR_STATIC_FIELD]. | 
 |  1300    */ | 
 |  1301   static const CompileTimeErrorCode INITIALIZER_FOR_STATIC_FIELD = | 
 |  1302       const CompileTimeErrorCode('INITIALIZER_FOR_STATIC_FIELD', | 
 |  1303           "'{0}' is a static variable in the enclosing class, variables initiali
      zed in a constructor cannot be static"); | 
 |  1304  | 
 |  1305   /** | 
 |  1306    * 7.6.1 Generative Constructors: An initializing formal has the form | 
 |  1307    * <i>this.id</i>. It is a compile-time error if <i>id</i> is not the name of | 
 |  1308    * an instance variable of the immediately enclosing class. | 
 |  1309    * | 
 |  1310    * Parameters: | 
 |  1311    * 0: the name of the initializing formal that is not an instance variable in | 
 |  1312    *    the immediately enclosing class | 
 |  1313    * | 
 |  1314    * See [INITIALIZING_FORMAL_FOR_STATIC_FIELD], and | 
 |  1315    * [INITIALIZER_FOR_NON_EXISTENT_FIELD]. | 
 |  1316    */ | 
 |  1317   static const CompileTimeErrorCode INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD = | 
 |  1318       const CompileTimeErrorCode('INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD', | 
 |  1319           "'{0}' is not a variable in the enclosing class"); | 
 |  1320  | 
 |  1321   /** | 
 |  1322    * 7.6.1 Generative Constructors: An initializing formal has the form | 
 |  1323    * <i>this.id</i>. It is a compile-time error if <i>id</i> is not the name of | 
 |  1324    * an instance variable of the immediately enclosing class. | 
 |  1325    * | 
 |  1326    * Parameters: | 
 |  1327    * 0: the name of the initializing formal that is a static variable in the | 
 |  1328    *    immediately enclosing class | 
 |  1329    * | 
 |  1330    * See [INITIALIZER_FOR_STATIC_FIELD]. | 
 |  1331    */ | 
 |  1332   static const CompileTimeErrorCode INITIALIZING_FORMAL_FOR_STATIC_FIELD = | 
 |  1333       const CompileTimeErrorCode('INITIALIZING_FORMAL_FOR_STATIC_FIELD', | 
 |  1334           "'{0}' is a static field in the enclosing class, fields initialized in
       a constructor cannot be static"); | 
 |  1335  | 
 |  1336   /** | 
 |  1337    * 12.30 Identifier Reference: Otherwise, e is equivalent to the property | 
 |  1338    * extraction <b>this</b>.<i>id</i>. | 
 |  1339    */ | 
 |  1340   static const CompileTimeErrorCode INSTANCE_MEMBER_ACCESS_FROM_FACTORY = | 
 |  1341       const CompileTimeErrorCode('INSTANCE_MEMBER_ACCESS_FROM_FACTORY', | 
 |  1342           "Instance members cannot be accessed from a factory constructor"); | 
 |  1343  | 
 |  1344   /** | 
 |  1345    * 12.30 Identifier Reference: Otherwise, e is equivalent to the property | 
 |  1346    * extraction <b>this</b>.<i>id</i>. | 
 |  1347    */ | 
 |  1348   static const CompileTimeErrorCode INSTANCE_MEMBER_ACCESS_FROM_STATIC = | 
 |  1349       const CompileTimeErrorCode('INSTANCE_MEMBER_ACCESS_FROM_STATIC', | 
 |  1350           "Instance members cannot be accessed from a static method"); | 
 |  1351  | 
 |  1352   /** | 
 |  1353    * Enum proposal: It is also a compile-time error to explicitly instantiate an | 
 |  1354    * enum via 'new' or 'const' or to access its private fields. | 
 |  1355    */ | 
 |  1356   static const CompileTimeErrorCode INSTANTIATE_ENUM = | 
 |  1357       const CompileTimeErrorCode( | 
 |  1358           'INSTANTIATE_ENUM', "Enums cannot be instantiated"); | 
 |  1359  | 
 |  1360   /** | 
 |  1361    * 11 Metadata: Metadata consists of a series of annotations, each of which | 
 |  1362    * begin with the character @, followed by a constant expression that must be | 
 |  1363    * either a reference to a compile-time constant variable, or a call to a | 
 |  1364    * constant constructor. | 
 |  1365    */ | 
 |  1366   static const CompileTimeErrorCode INVALID_ANNOTATION = const CompileTimeErrorC
      ode( | 
 |  1367       'INVALID_ANNOTATION', | 
 |  1368       "Annotation can be only constant variable or constant constructor invocati
      on"); | 
 |  1369  | 
 |  1370   /** | 
 |  1371    * 11 Metadata: Metadata consists of a series of annotations, each of which | 
 |  1372    * begin with the character @, followed by a constant expression that must be | 
 |  1373    * either a reference to a compile-time constant variable, or a call to a | 
 |  1374    * constant constructor. | 
 |  1375    * | 
 |  1376    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1377    * not qualified by a deferred prefix. | 
 |  1378    */ | 
 |  1379   static const CompileTimeErrorCode INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY = | 
 |  1380       const CompileTimeErrorCode('INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY', | 
 |  1381           "Constant values from a deferred library cannot be used as annotations
      "); | 
 |  1382  | 
 |  1383   /** | 
 |  1384    * 15.31 Identifier Reference: It is a compile-time error if any of the | 
 |  1385    * identifiers async, await or yield is used as an identifier in a function | 
 |  1386    * body marked with either async, async* or sync*. | 
 |  1387    */ | 
 |  1388   static const CompileTimeErrorCode INVALID_IDENTIFIER_IN_ASYNC = | 
 |  1389       const CompileTimeErrorCode('INVALID_IDENTIFIER_IN_ASYNC', | 
 |  1390           "The identifier '{0}' cannot be used in a function marked with async, 
      async* or sync*"); | 
 |  1391  | 
 |  1392   /** | 
 |  1393    * 9. Functions: It is a compile-time error if an async, async* or sync* | 
 |  1394    * modifier is attached to the body of a setter or constructor. | 
 |  1395    */ | 
 |  1396   static const CompileTimeErrorCode INVALID_MODIFIER_ON_CONSTRUCTOR = | 
 |  1397       const CompileTimeErrorCode('INVALID_MODIFIER_ON_CONSTRUCTOR', | 
 |  1398           "The modifier '{0}' cannot be applied to the body of a constructor"); | 
 |  1399  | 
 |  1400   /** | 
 |  1401    * 9. Functions: It is a compile-time error if an async, async* or sync* | 
 |  1402    * modifier is attached to the body of a setter or constructor. | 
 |  1403    */ | 
 |  1404   static const CompileTimeErrorCode INVALID_MODIFIER_ON_SETTER = | 
 |  1405       const CompileTimeErrorCode('INVALID_MODIFIER_ON_SETTER', | 
 |  1406           "The modifier '{0}' cannot be applied to the body of a setter"); | 
 |  1407  | 
 |  1408   /** | 
 |  1409    * TODO(brianwilkerson) Remove this when we have decided on how to report | 
 |  1410    * errors in compile-time constants. Until then, this acts as a placeholder | 
 |  1411    * for more informative errors. | 
 |  1412    * | 
 |  1413    * See TODOs in ConstantVisitor | 
 |  1414    */ | 
 |  1415   static const CompileTimeErrorCode INVALID_CONSTANT = | 
 |  1416       const CompileTimeErrorCode('INVALID_CONSTANT', "Invalid constant value"); | 
 |  1417  | 
 |  1418   /** | 
 |  1419    * 7.6 Constructors: It is a compile-time error if the name of a constructor | 
 |  1420    * is not a constructor name. | 
 |  1421    */ | 
 |  1422   static const CompileTimeErrorCode INVALID_CONSTRUCTOR_NAME = | 
 |  1423       const CompileTimeErrorCode( | 
 |  1424           'INVALID_CONSTRUCTOR_NAME', "Invalid constructor name"); | 
 |  1425  | 
 |  1426   /** | 
 |  1427    * 7.6.2 Factories: It is a compile-time error if <i>M</i> is not the name of | 
 |  1428    * the immediately enclosing class. | 
 |  1429    */ | 
 |  1430   static const CompileTimeErrorCode INVALID_FACTORY_NAME_NOT_A_CLASS = | 
 |  1431       const CompileTimeErrorCode('INVALID_FACTORY_NAME_NOT_A_CLASS', | 
 |  1432           "The name of the immediately enclosing class expected"); | 
 |  1433  | 
 |  1434   /** | 
 |  1435    * 12.10 This: It is a compile-time error if this appears in a top-level | 
 |  1436    * function or variable initializer, in a factory constructor, or in a static | 
 |  1437    * method or variable initializer, or in the initializer of an instance | 
 |  1438    * variable. | 
 |  1439    */ | 
 |  1440   static const CompileTimeErrorCode INVALID_REFERENCE_TO_THIS = | 
 |  1441       const CompileTimeErrorCode('INVALID_REFERENCE_TO_THIS', | 
 |  1442           "Invalid reference to 'this' expression"); | 
 |  1443  | 
 |  1444   /** | 
 |  1445    * 12.6 Lists: It is a compile time error if the type argument of a constant | 
 |  1446    * list literal includes a type parameter. | 
 |  1447    * | 
 |  1448    * Parameters: | 
 |  1449    * 0: the name of the type parameter | 
 |  1450    */ | 
 |  1451   static const CompileTimeErrorCode INVALID_TYPE_ARGUMENT_IN_CONST_LIST = | 
 |  1452       const CompileTimeErrorCode('INVALID_TYPE_ARGUMENT_IN_CONST_LIST', | 
 |  1453           "Constant list literals cannot include a type parameter as a type argu
      ment, such as '{0}'"); | 
 |  1454  | 
 |  1455   /** | 
 |  1456    * 12.7 Maps: It is a compile time error if the type arguments of a constant | 
 |  1457    * map literal include a type parameter. | 
 |  1458    * | 
 |  1459    * Parameters: | 
 |  1460    * 0: the name of the type parameter | 
 |  1461    */ | 
 |  1462   static const CompileTimeErrorCode INVALID_TYPE_ARGUMENT_IN_CONST_MAP = | 
 |  1463       const CompileTimeErrorCode('INVALID_TYPE_ARGUMENT_IN_CONST_MAP', | 
 |  1464           "Constant map literals cannot include a type parameter as a type argum
      ent, such as '{0}'"); | 
 |  1465  | 
 |  1466   /** | 
 |  1467    * 14.2 Exports: It is a compile-time error if the compilation unit found at | 
 |  1468    * the specified URI is not a library declaration. | 
 |  1469    * | 
 |  1470    * 14.1 Imports: It is a compile-time error if the compilation unit found at | 
 |  1471    * the specified URI is not a library declaration. | 
 |  1472    * | 
 |  1473    * 14.3 Parts: It is a compile time error if the contents of the URI are not a | 
 |  1474    * valid part declaration. | 
 |  1475    * | 
 |  1476    * Parameters: | 
 |  1477    * 0: the URI that is invalid | 
 |  1478    * | 
 |  1479    * See [URI_DOES_NOT_EXIST]. | 
 |  1480    */ | 
 |  1481   static const CompileTimeErrorCode INVALID_URI = | 
 |  1482       const CompileTimeErrorCode('INVALID_URI', "Invalid URI syntax: '{0}'"); | 
 |  1483  | 
 |  1484   /** | 
 |  1485    * 13.13 Break: It is a compile-time error if no such statement | 
 |  1486    * <i>s<sub>E</sub></i> exists within the innermost function in which | 
 |  1487    * <i>s<sub>b</sub></i> occurs. | 
 |  1488    * | 
 |  1489    * 13.14 Continue: It is a compile-time error if no such statement or case | 
 |  1490    * clause <i>s<sub>E</sub></i> exists within the innermost function in which | 
 |  1491    * <i>s<sub>c</sub></i> occurs. | 
 |  1492    * | 
 |  1493    * Parameters: | 
 |  1494    * 0: the name of the unresolvable label | 
 |  1495    */ | 
 |  1496   static const CompileTimeErrorCode LABEL_IN_OUTER_SCOPE = | 
 |  1497       const CompileTimeErrorCode('LABEL_IN_OUTER_SCOPE', | 
 |  1498           "Cannot reference label '{0}' declared in an outer method"); | 
 |  1499  | 
 |  1500   /** | 
 |  1501    * 13.13 Break: It is a compile-time error if no such statement | 
 |  1502    * <i>s<sub>E</sub></i> exists within the innermost function in which | 
 |  1503    * <i>s<sub>b</sub></i> occurs. | 
 |  1504    * | 
 |  1505    * 13.14 Continue: It is a compile-time error if no such statement or case | 
 |  1506    * clause <i>s<sub>E</sub></i> exists within the innermost function in which | 
 |  1507    * <i>s<sub>c</sub></i> occurs. | 
 |  1508    * | 
 |  1509    * Parameters: | 
 |  1510    * 0: the name of the unresolvable label | 
 |  1511    */ | 
 |  1512   static const CompileTimeErrorCode LABEL_UNDEFINED = | 
 |  1513       const CompileTimeErrorCode( | 
 |  1514           'LABEL_UNDEFINED', "Cannot reference undefined label '{0}'"); | 
 |  1515  | 
 |  1516   /** | 
 |  1517    * 7 Classes: It is a compile time error if a class <i>C</i> declares a member | 
 |  1518    * with the same name as <i>C</i>. | 
 |  1519    */ | 
 |  1520   static const CompileTimeErrorCode MEMBER_WITH_CLASS_NAME = | 
 |  1521       const CompileTimeErrorCode('MEMBER_WITH_CLASS_NAME', | 
 |  1522           "Class members cannot have the same name as the enclosing class"); | 
 |  1523  | 
 |  1524   /** | 
 |  1525    * 7.2 Getters: It is a compile-time error if a class has both a getter and a | 
 |  1526    * method with the same name. | 
 |  1527    * | 
 |  1528    * Parameters: | 
 |  1529    * 0: the conflicting name of the getter and method | 
 |  1530    */ | 
 |  1531   static const CompileTimeErrorCode METHOD_AND_GETTER_WITH_SAME_NAME = | 
 |  1532       const CompileTimeErrorCode('METHOD_AND_GETTER_WITH_SAME_NAME', | 
 |  1533           "'{0}' cannot be used to name a method, there is already a getter with
       the same name"); | 
 |  1534  | 
 |  1535   /** | 
 |  1536    * 12.1 Constants: A constant expression is ... a constant list literal. | 
 |  1537    */ | 
 |  1538   static const CompileTimeErrorCode MISSING_CONST_IN_LIST_LITERAL = | 
 |  1539       const CompileTimeErrorCode('MISSING_CONST_IN_LIST_LITERAL', | 
 |  1540           "List literals must be prefixed with 'const' when used as a constant e
      xpression"); | 
 |  1541  | 
 |  1542   /** | 
 |  1543    * 12.1 Constants: A constant expression is ... a constant map literal. | 
 |  1544    */ | 
 |  1545   static const CompileTimeErrorCode MISSING_CONST_IN_MAP_LITERAL = | 
 |  1546       const CompileTimeErrorCode('MISSING_CONST_IN_MAP_LITERAL', | 
 |  1547           "Map literals must be prefixed with 'const' when used as a constant ex
      pression"); | 
 |  1548  | 
 |  1549   /** | 
 |  1550    * Enum proposal: It is a static warning if all of the following conditions | 
 |  1551    * hold: | 
 |  1552    * * The switch statement does not have a 'default' clause. | 
 |  1553    * * The static type of <i>e</i> is an enumerated typed with elements | 
 |  1554    *   <i>id<sub>1</sub></i>, …, <i>id<sub>n</sub></i>. | 
 |  1555    * * The sets {<i>e<sub>1</sub></i>, …, <i>e<sub>k</sub></i>} and | 
 |  1556    *   {<i>id<sub>1</sub></i>, …, <i>id<sub>n</sub></i>} are not the | 
 |  1557    *   same. | 
 |  1558    * | 
 |  1559    * Parameters: | 
 |  1560    * 0: the name of the constant that is missing | 
 |  1561    */ | 
 |  1562   static const CompileTimeErrorCode MISSING_ENUM_CONSTANT_IN_SWITCH = | 
 |  1563       const CompileTimeErrorCode('MISSING_ENUM_CONSTANT_IN_SWITCH', | 
 |  1564           "Missing case clause for '{0}'", | 
 |  1565           "Add a case clause for the missing constant or add a default clause.")
      ; | 
 |  1566  | 
 |  1567   /** | 
 |  1568    * 9 Mixins: It is a compile-time error if a declared or derived mixin | 
 |  1569    * explicitly declares a constructor. | 
 |  1570    * | 
 |  1571    * Parameters: | 
 |  1572    * 0: the name of the mixin that is invalid | 
 |  1573    */ | 
 |  1574   static const CompileTimeErrorCode MIXIN_DECLARES_CONSTRUCTOR = | 
 |  1575       const CompileTimeErrorCode('MIXIN_DECLARES_CONSTRUCTOR', | 
 |  1576           "The class '{0}' cannot be used as a mixin because it declares a const
      ructor"); | 
 |  1577  | 
 |  1578   /** | 
 |  1579    * 9.1 Mixin Application: It is a compile-time error if the with clause of a | 
 |  1580    * mixin application <i>C</i> includes a deferred type expression. | 
 |  1581    * | 
 |  1582    * Parameters: | 
 |  1583    * 0: the name of the type that cannot be extended | 
 |  1584    * | 
 |  1585    * See [EXTENDS_DEFERRED_CLASS], and [IMPLEMENTS_DEFERRED_CLASS]. | 
 |  1586    */ | 
 |  1587   static const CompileTimeErrorCode MIXIN_DEFERRED_CLASS = | 
 |  1588       const CompileTimeErrorCode('MIXIN_DEFERRED_CLASS', | 
 |  1589           "This class cannot mixin the deferred class '{0}'"); | 
 |  1590  | 
 |  1591   /** | 
 |  1592    * Not yet in the spec, but consistent with VM behavior.  It is a | 
 |  1593    * compile-time error if all of the constructors of a mixin's base class have | 
 |  1594    * at least one optional parameter (since only constructors that lack | 
 |  1595    * optional parameters can be forwarded to the mixin).  See | 
 |  1596    * https://code.google.com/p/dart/issues/detail?id=15101#c4 | 
 |  1597    */ | 
 |  1598   static const CompileTimeErrorCode MIXIN_HAS_NO_CONSTRUCTORS = | 
 |  1599       const CompileTimeErrorCode('MIXIN_HAS_NO_CONSTRUCTORS', | 
 |  1600           "This mixin application is invalid because all of the constructors " | 
 |  1601           "in the base class '{0}' have optional parameters."); | 
 |  1602  | 
 |  1603   /** | 
 |  1604    * 9 Mixins: It is a compile-time error if a mixin is derived from a class | 
 |  1605    * whose superclass is not Object. | 
 |  1606    * | 
 |  1607    * Parameters: | 
 |  1608    * 0: the name of the mixin that is invalid | 
 |  1609    */ | 
 |  1610   static const CompileTimeErrorCode MIXIN_INHERITS_FROM_NOT_OBJECT = | 
 |  1611       const CompileTimeErrorCode('MIXIN_INHERITS_FROM_NOT_OBJECT', | 
 |  1612           "The class '{0}' cannot be used as a mixin because it extends a class 
      other than Object"); | 
 |  1613  | 
 |  1614   /** | 
 |  1615    * 12.2 Null: It is a compile-time error for a class to attempt to extend or | 
 |  1616    * implement Null. | 
 |  1617    * | 
 |  1618    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1619    * or implement int. | 
 |  1620    * | 
 |  1621    * 12.3 Numbers: It is a compile-time error for a class to attempt to extend | 
 |  1622    * or implement double. | 
 |  1623    * | 
 |  1624    * 12.3 Numbers: It is a compile-time error for any type other than the types | 
 |  1625    * int and double to attempt to extend or implement num. | 
 |  1626    * | 
 |  1627    * 12.4 Booleans: It is a compile-time error for a class to attempt to extend | 
 |  1628    * or implement bool. | 
 |  1629    * | 
 |  1630    * 12.5 Strings: It is a compile-time error for a class to attempt to extend | 
 |  1631    * or implement String. | 
 |  1632    * | 
 |  1633    * Parameters: | 
 |  1634    * 0: the name of the type that cannot be extended | 
 |  1635    * | 
 |  1636    * See [IMPLEMENTS_DISALLOWED_CLASS]. | 
 |  1637    */ | 
 |  1638   static const CompileTimeErrorCode MIXIN_OF_DISALLOWED_CLASS = | 
 |  1639       const CompileTimeErrorCode( | 
 |  1640           'MIXIN_OF_DISALLOWED_CLASS', "Classes cannot mixin '{0}'"); | 
 |  1641  | 
 |  1642   /** | 
 |  1643    * Enum proposal: It is a compile-time error to subclass, mix-in or implement | 
 |  1644    * an enum. | 
 |  1645    */ | 
 |  1646   static const CompileTimeErrorCode MIXIN_OF_ENUM = const CompileTimeErrorCode( | 
 |  1647       'MIXIN_OF_ENUM', "Classes cannot mixin an enum"); | 
 |  1648  | 
 |  1649   /** | 
 |  1650    * 9.1 Mixin Application: It is a compile-time error if <i>M</i> does not | 
 |  1651    * denote a class or mixin available in the immediately enclosing scope. | 
 |  1652    */ | 
 |  1653   static const CompileTimeErrorCode MIXIN_OF_NON_CLASS = | 
 |  1654       const CompileTimeErrorCode( | 
 |  1655           'MIXIN_OF_NON_CLASS', "Classes can only mixin other classes"); | 
 |  1656  | 
 |  1657   /** | 
 |  1658    * 9 Mixins: It is a compile-time error if a declared or derived mixin refers | 
 |  1659    * to super. | 
 |  1660    */ | 
 |  1661   static const CompileTimeErrorCode MIXIN_REFERENCES_SUPER = | 
 |  1662       const CompileTimeErrorCode('MIXIN_REFERENCES_SUPER', | 
 |  1663           "The class '{0}' cannot be used as a mixin because it references 'supe
      r'"); | 
 |  1664  | 
 |  1665   /** | 
 |  1666    * 9.1 Mixin Application: It is a compile-time error if <i>S</i> does not | 
 |  1667    * denote a class available in the immediately enclosing scope. | 
 |  1668    */ | 
 |  1669   static const CompileTimeErrorCode MIXIN_WITH_NON_CLASS_SUPERCLASS = | 
 |  1670       const CompileTimeErrorCode('MIXIN_WITH_NON_CLASS_SUPERCLASS', | 
 |  1671           "Mixin can only be applied to class"); | 
 |  1672  | 
 |  1673   /** | 
 |  1674    * 7.6.1 Generative Constructors: A generative constructor may be redirecting, | 
 |  1675    * in which case its only action is to invoke another generative constructor. | 
 |  1676    */ | 
 |  1677   static const CompileTimeErrorCode MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS
       = | 
 |  1678       const CompileTimeErrorCode('MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS', | 
 |  1679           "Constructor may have at most one 'this' redirection"); | 
 |  1680  | 
 |  1681   /** | 
 |  1682    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. | 
 |  1683    * Then <i>k</i> may include at most one superinitializer in its initializer | 
 |  1684    * list or a compile time error occurs. | 
 |  1685    */ | 
 |  1686   static const CompileTimeErrorCode MULTIPLE_SUPER_INITIALIZERS = | 
 |  1687       const CompileTimeErrorCode('MULTIPLE_SUPER_INITIALIZERS', | 
 |  1688           "Constructor may have at most one 'super' initializer"); | 
 |  1689  | 
 |  1690   /** | 
 |  1691    * 11 Metadata: Metadata consists of a series of annotations, each of which | 
 |  1692    * begin with the character @, followed by a constant expression that must be | 
 |  1693    * either a reference to a compile-time constant variable, or a call to a | 
 |  1694    * constant constructor. | 
 |  1695    */ | 
 |  1696   static const CompileTimeErrorCode NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS = | 
 |  1697       const CompileTimeErrorCode('NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS', | 
 |  1698           "Annotation creation must have arguments"); | 
 |  1699  | 
 |  1700   /** | 
 |  1701    * 7.6.1 Generative Constructors: If no superinitializer is provided, an | 
 |  1702    * implicit superinitializer of the form <b>super</b>() is added at the end of | 
 |  1703    * <i>k</i>'s initializer list, unless the enclosing class is class | 
 |  1704    * <i>Object</i>. | 
 |  1705    * | 
 |  1706    * 7.6.1 Generative constructors. It is a compile-time error if class <i>S</i> | 
 |  1707    * does not declare a generative constructor named <i>S</i> (respectively | 
 |  1708    * <i>S.id</i>) | 
 |  1709    */ | 
 |  1710   static const CompileTimeErrorCode NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT = | 
 |  1711       const CompileTimeErrorCode('NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT', | 
 |  1712           "The class '{0}' does not have a default constructor"); | 
 |  1713  | 
 |  1714   /** | 
 |  1715    * 7.6 Constructors: Iff no constructor is specified for a class <i>C</i>, it | 
 |  1716    * implicitly has a default constructor C() : <b>super<b>() {}, unless | 
 |  1717    * <i>C</i> is class <i>Object</i>. | 
 |  1718    * | 
 |  1719    * 7.6.1 Generative constructors. It is a compile-time error if class <i>S</i> | 
 |  1720    * does not declare a generative constructor named <i>S</i> (respectively | 
 |  1721    * <i>S.id</i>) | 
 |  1722    */ | 
 |  1723   static const CompileTimeErrorCode NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT = | 
 |  1724       const CompileTimeErrorCode('NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT', | 
 |  1725           "The class '{0}' does not have a default constructor"); | 
 |  1726  | 
 |  1727   /** | 
 |  1728    * 13.2 Expression Statements: It is a compile-time error if a non-constant | 
 |  1729    * map literal that has no explicit type arguments appears in a place where a | 
 |  1730    * statement is expected. | 
 |  1731    */ | 
 |  1732   static const CompileTimeErrorCode NON_CONST_MAP_AS_EXPRESSION_STATEMENT = | 
 |  1733       const CompileTimeErrorCode('NON_CONST_MAP_AS_EXPRESSION_STATEMENT', | 
 |  1734           "A non-constant map literal without type arguments cannot be used as a
      n expression statement"); | 
 |  1735  | 
 |  1736   /** | 
 |  1737    * 13.9 Switch: Given a switch statement of the form <i>switch (e) { | 
 |  1738    * label<sub>11</sub> … label<sub>1j1</sub> case e<sub>1</sub>: | 
 |  1739    * s<sub>1</sub> … label<sub>n1</sub> … label<sub>njn</sub> case | 
 |  1740    * e<sub>n</sub>: s<sub>n</sub> default: s<sub>n+1</sub>}</i> or the form | 
 |  1741    * <i>switch (e) { label<sub>11</sub> … label<sub>1j1</sub> case | 
 |  1742    * e<sub>1</sub>: s<sub>1</sub> … label<sub>n1</sub> … | 
 |  1743    * label<sub>njn</sub> case e<sub>n</sub>: s<sub>n</sub>}</i>, it is a | 
 |  1744    * compile-time error if the expressions <i>e<sub>k</sub></i> are not | 
 |  1745    * compile-time constants, for all <i>1 <= k <= n</i>. | 
 |  1746    */ | 
 |  1747   static const CompileTimeErrorCode NON_CONSTANT_CASE_EXPRESSION = | 
 |  1748       const CompileTimeErrorCode( | 
 |  1749           'NON_CONSTANT_CASE_EXPRESSION', "Case expressions must be constant"); | 
 |  1750  | 
 |  1751   /** | 
 |  1752    * 13.9 Switch: Given a switch statement of the form <i>switch (e) { | 
 |  1753    * label<sub>11</sub> … label<sub>1j1</sub> case e<sub>1</sub>: | 
 |  1754    * s<sub>1</sub> … label<sub>n1</sub> … label<sub>njn</sub> case | 
 |  1755    * e<sub>n</sub>: s<sub>n</sub> default: s<sub>n+1</sub>}</i> or the form | 
 |  1756    * <i>switch (e) { label<sub>11</sub> … label<sub>1j1</sub> case | 
 |  1757    * e<sub>1</sub>: s<sub>1</sub> … label<sub>n1</sub> … | 
 |  1758    * label<sub>njn</sub> case e<sub>n</sub>: s<sub>n</sub>}</i>, it is a | 
 |  1759    * compile-time error if the expressions <i>e<sub>k</sub></i> are not | 
 |  1760    * compile-time constants, for all <i>1 <= k <= n</i>. | 
 |  1761    * | 
 |  1762    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1763    * not qualified by a deferred prefix. | 
 |  1764    */ | 
 |  1765   static const CompileTimeErrorCode NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_L
      IBRARY = | 
 |  1766       const CompileTimeErrorCode( | 
 |  1767           'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY', | 
 |  1768           "Constant values from a deferred library cannot be used as a case expr
      ession"); | 
 |  1769  | 
 |  1770   /** | 
 |  1771    * 6.2.2 Optional Formals: It is a compile-time error if the default value of | 
 |  1772    * an optional parameter is not a compile-time constant. | 
 |  1773    */ | 
 |  1774   static const CompileTimeErrorCode NON_CONSTANT_DEFAULT_VALUE = | 
 |  1775       const CompileTimeErrorCode('NON_CONSTANT_DEFAULT_VALUE', | 
 |  1776           "Default values of an optional parameter must be constant"); | 
 |  1777  | 
 |  1778   /** | 
 |  1779    * 6.2.2 Optional Formals: It is a compile-time error if the default value of | 
 |  1780    * an optional parameter is not a compile-time constant. | 
 |  1781    * | 
 |  1782    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1783    * not qualified by a deferred prefix. | 
 |  1784    */ | 
 |  1785   static const CompileTimeErrorCode NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIB
      RARY = | 
 |  1786       const CompileTimeErrorCode( | 
 |  1787           'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY', | 
 |  1788           "Constant values from a deferred library cannot be used as a default p
      arameter value"); | 
 |  1789  | 
 |  1790   /** | 
 |  1791    * 12.6 Lists: It is a compile time error if an element of a constant list | 
 |  1792    * literal is not a compile-time constant. | 
 |  1793    */ | 
 |  1794   static const CompileTimeErrorCode NON_CONSTANT_LIST_ELEMENT = | 
 |  1795       const CompileTimeErrorCode('NON_CONSTANT_LIST_ELEMENT', | 
 |  1796           "'const' lists must have all constant values"); | 
 |  1797  | 
 |  1798   /** | 
 |  1799    * 12.6 Lists: It is a compile time error if an element of a constant list | 
 |  1800    * literal is not a compile-time constant. | 
 |  1801    * | 
 |  1802    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1803    * not qualified by a deferred prefix. | 
 |  1804    */ | 
 |  1805   static const CompileTimeErrorCode NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBR
      ARY = | 
 |  1806       const CompileTimeErrorCode( | 
 |  1807           'NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY', | 
 |  1808           "Constant values from a deferred library cannot be used as values in a
       'const' list"); | 
 |  1809  | 
 |  1810   /** | 
 |  1811    * 12.7 Maps: It is a compile time error if either a key or a value of an | 
 |  1812    * entry in a constant map literal is not a compile-time constant. | 
 |  1813    */ | 
 |  1814   static const CompileTimeErrorCode NON_CONSTANT_MAP_KEY = | 
 |  1815       const CompileTimeErrorCode( | 
 |  1816           'NON_CONSTANT_MAP_KEY', "The keys in a map must be constant"); | 
 |  1817  | 
 |  1818   /** | 
 |  1819    * 12.7 Maps: It is a compile time error if either a key or a value of an | 
 |  1820    * entry in a constant map literal is not a compile-time constant. | 
 |  1821    * | 
 |  1822    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1823    * not qualified by a deferred prefix. | 
 |  1824    */ | 
 |  1825   static const CompileTimeErrorCode NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY = | 
 |  1826       const CompileTimeErrorCode('NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY', | 
 |  1827           "Constant values from a deferred library cannot be used as keys in a m
      ap"); | 
 |  1828  | 
 |  1829   /** | 
 |  1830    * 12.7 Maps: It is a compile time error if either a key or a value of an | 
 |  1831    * entry in a constant map literal is not a compile-time constant. | 
 |  1832    */ | 
 |  1833   static const CompileTimeErrorCode NON_CONSTANT_MAP_VALUE = | 
 |  1834       const CompileTimeErrorCode('NON_CONSTANT_MAP_VALUE', | 
 |  1835           "The values in a 'const' map must be constant"); | 
 |  1836  | 
 |  1837   /** | 
 |  1838    * 12.7 Maps: It is a compile time error if either a key or a value of an | 
 |  1839    * entry in a constant map literal is not a compile-time constant. | 
 |  1840    * | 
 |  1841    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1842    * not qualified by a deferred prefix. | 
 |  1843    */ | 
 |  1844   static const CompileTimeErrorCode NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
       = | 
 |  1845       const CompileTimeErrorCode('NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY', | 
 |  1846           "Constant values from a deferred library cannot be used as values in a
       'const' map"); | 
 |  1847  | 
 |  1848   /** | 
 |  1849    * 11 Metadata: Metadata consists of a series of annotations, each of which | 
 |  1850    * begin with the character @, followed by a constant expression that must be | 
 |  1851    * either a reference to a compile-time constant variable, or a call to a | 
 |  1852    * constant constructor. | 
 |  1853    * | 
 |  1854    * "From deferred library" case is covered by | 
 |  1855    * [CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY]. | 
 |  1856    */ | 
 |  1857   static const CompileTimeErrorCode NON_CONSTANT_ANNOTATION_CONSTRUCTOR = | 
 |  1858       const CompileTimeErrorCode('NON_CONSTANT_ANNOTATION_CONSTRUCTOR', | 
 |  1859           "Annotation creation can use only 'const' constructor"); | 
 |  1860  | 
 |  1861   /** | 
 |  1862    * 7.6.3 Constant Constructors: Any expression that appears within the | 
 |  1863    * initializer list of a constant constructor must be a potentially constant | 
 |  1864    * expression, or a compile-time error occurs. | 
 |  1865    */ | 
 |  1866   static const CompileTimeErrorCode NON_CONSTANT_VALUE_IN_INITIALIZER = | 
 |  1867       const CompileTimeErrorCode('NON_CONSTANT_VALUE_IN_INITIALIZER', | 
 |  1868           "Initializer expressions in constant constructors must be constants"); | 
 |  1869  | 
 |  1870   /** | 
 |  1871    * 7.6.3 Constant Constructors: Any expression that appears within the | 
 |  1872    * initializer list of a constant constructor must be a potentially constant | 
 |  1873    * expression, or a compile-time error occurs. | 
 |  1874    * | 
 |  1875    * 12.1 Constants: A qualified reference to a static constant variable that is | 
 |  1876    * not qualified by a deferred prefix. | 
 |  1877    */ | 
 |  1878   static const CompileTimeErrorCode NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFER
      RED_LIBRARY = | 
 |  1879       const CompileTimeErrorCode( | 
 |  1880           'NON_CONSTANT_VALUE_IN_INITIALIZER_FROM_DEFERRED_LIBRARY', | 
 |  1881           "Constant values from a deferred library cannot be used as constant in
      itializers"); | 
 |  1882  | 
 |  1883   /** | 
 |  1884    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m < h</i> | 
 |  1885    * or if <i>m > n</i>. | 
 |  1886    * | 
 |  1887    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |  1888    * object results in an uncaught exception being thrown. | 
 |  1889    * | 
 |  1890    * Parameters: | 
 |  1891    * 0: the expected number of required arguments | 
 |  1892    * 1: the actual number of positional arguments given | 
 |  1893    */ | 
 |  1894   static const CompileTimeErrorCode NOT_ENOUGH_REQUIRED_ARGUMENTS = | 
 |  1895       const CompileTimeErrorCode('NOT_ENOUGH_REQUIRED_ARGUMENTS', | 
 |  1896           "{0} required argument(s) expected, but {1} found"); | 
 |  1897  | 
 |  1898   /** | 
 |  1899    * 7.6.1 Generative Constructors: Let <i>C</i> be the class in which the | 
 |  1900    * superinitializer appears and let <i>S</i> be the superclass of <i>C</i>. | 
 |  1901    * Let <i>k</i> be a generative constructor. It is a compile-time error if | 
 |  1902    * class <i>S</i> does not declare a generative constructor named <i>S</i> | 
 |  1903    * (respectively <i>S.id</i>) | 
 |  1904    */ | 
 |  1905   static const CompileTimeErrorCode NON_GENERATIVE_CONSTRUCTOR = | 
 |  1906       const CompileTimeErrorCode('NON_GENERATIVE_CONSTRUCTOR', | 
 |  1907           "The generative constructor '{0}' expected, but factory found"); | 
 |  1908  | 
 |  1909   /** | 
 |  1910    * 7.9 Superclasses: It is a compile-time error to specify an extends clause | 
 |  1911    * for class Object. | 
 |  1912    */ | 
 |  1913   static const CompileTimeErrorCode OBJECT_CANNOT_EXTEND_ANOTHER_CLASS = | 
 |  1914       const CompileTimeErrorCode('OBJECT_CANNOT_EXTEND_ANOTHER_CLASS', ""); | 
 |  1915  | 
 |  1916   /** | 
 |  1917    * 7.1.1 Operators: It is a compile-time error to declare an optional | 
 |  1918    * parameter in an operator. | 
 |  1919    */ | 
 |  1920   static const CompileTimeErrorCode OPTIONAL_PARAMETER_IN_OPERATOR = | 
 |  1921       const CompileTimeErrorCode('OPTIONAL_PARAMETER_IN_OPERATOR', | 
 |  1922           "Optional parameters are not allowed when defining an operator"); | 
 |  1923  | 
 |  1924   /** | 
 |  1925    * 14.3 Parts: It is a compile time error if the contents of the URI are not a | 
 |  1926    * valid part declaration. | 
 |  1927    * | 
 |  1928    * Parameters: | 
 |  1929    * 0: the uri pointing to a non-library declaration | 
 |  1930    */ | 
 |  1931   static const CompileTimeErrorCode PART_OF_NON_PART = | 
 |  1932       const CompileTimeErrorCode('PART_OF_NON_PART', | 
 |  1933           "The included part '{0}' must have a part-of directive"); | 
 |  1934  | 
 |  1935   /** | 
 |  1936    * 14.1 Imports: It is a compile-time error if the current library declares a | 
 |  1937    * top-level member named <i>p</i>. | 
 |  1938    */ | 
 |  1939   static const CompileTimeErrorCode PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER = | 
 |  1940       const CompileTimeErrorCode('PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER', | 
 |  1941           "The name '{0}' is already used as an import prefix and cannot be used
       to name a top-level element"); | 
 |  1942  | 
 |  1943   /** | 
 |  1944    * 16.32 Identifier Reference: If d is a prefix p, a compile-time error | 
 |  1945    * occurs unless the token immediately following d is '.'. | 
 |  1946    */ | 
 |  1947   static const CompileTimeErrorCode PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT = | 
 |  1948       const CompileTimeErrorCode('PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT', | 
 |  1949           "The name '{0}' refers to an import prefix, so it must be followed by 
      '.'"); | 
 |  1950  | 
 |  1951   /** | 
 |  1952    * 6.2.2 Optional Formals: It is a compile-time error if the name of a named | 
 |  1953    * optional parameter begins with an '_' character. | 
 |  1954    */ | 
 |  1955   static const CompileTimeErrorCode PRIVATE_OPTIONAL_PARAMETER = | 
 |  1956       const CompileTimeErrorCode('PRIVATE_OPTIONAL_PARAMETER', | 
 |  1957           "Named optional parameters cannot start with an underscore"); | 
 |  1958  | 
 |  1959   /** | 
 |  1960    * 12.1 Constants: It is a compile-time error if the value of a compile-time | 
 |  1961    * constant expression depends on itself. | 
 |  1962    */ | 
 |  1963   static const CompileTimeErrorCode RECURSIVE_COMPILE_TIME_CONSTANT = | 
 |  1964       const CompileTimeErrorCode('RECURSIVE_COMPILE_TIME_CONSTANT', | 
 |  1965           "Compile-time constant expression depends on itself"); | 
 |  1966  | 
 |  1967   /** | 
 |  1968    * 7.6.1 Generative Constructors: A generative constructor may be redirecting, | 
 |  1969    * in which case its only action is to invoke another generative constructor. | 
 |  1970    * | 
 |  1971    * TODO(scheglov) review this later, there are no explicit "it is a | 
 |  1972    * compile-time error" in specification. But it was added to the co19 and | 
 |  1973    * there is same error for factories. | 
 |  1974    * | 
 |  1975    * https://code.google.com/p/dart/issues/detail?id=954 | 
 |  1976    */ | 
 |  1977   static const CompileTimeErrorCode RECURSIVE_CONSTRUCTOR_REDIRECT = | 
 |  1978       const CompileTimeErrorCode('RECURSIVE_CONSTRUCTOR_REDIRECT', | 
 |  1979           "Cycle in redirecting generative constructors"); | 
 |  1980  | 
 |  1981   /** | 
 |  1982    * 7.6.2 Factories: It is a compile-time error if a redirecting factory | 
 |  1983    * constructor redirects to itself, either directly or indirectly via a | 
 |  1984    * sequence of redirections. | 
 |  1985    */ | 
 |  1986   static const CompileTimeErrorCode RECURSIVE_FACTORY_REDIRECT = | 
 |  1987       const CompileTimeErrorCode('RECURSIVE_FACTORY_REDIRECT', | 
 |  1988           "Cycle in redirecting factory constructors"); | 
 |  1989  | 
 |  1990   /** | 
 |  1991    * 7.10 Superinterfaces: It is a compile-time error if the interface of a | 
 |  1992    * class <i>C</i> is a superinterface of itself. | 
 |  1993    * | 
 |  1994    * 8.1 Superinterfaces: It is a compile-time error if an interface is a | 
 |  1995    * superinterface of itself. | 
 |  1996    * | 
 |  1997    * 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a | 
 |  1998    * superclass of itself. | 
 |  1999    * | 
 |  2000    * Parameters: | 
 |  2001    * 0: the name of the class that implements itself recursively | 
 |  2002    * 1: a string representation of the implements loop | 
 |  2003    */ | 
 |  2004   static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE = | 
 |  2005       const CompileTimeErrorCode('RECURSIVE_INTERFACE_INHERITANCE', | 
 |  2006           "'{0}' cannot be a superinterface of itself: {1}"); | 
 |  2007  | 
 |  2008   /** | 
 |  2009    * 7.10 Superinterfaces: It is a compile-time error if the interface of a | 
 |  2010    * class <i>C</i> is a superinterface of itself. | 
 |  2011    * | 
 |  2012    * 8.1 Superinterfaces: It is a compile-time error if an interface is a | 
 |  2013    * superinterface of itself. | 
 |  2014    * | 
 |  2015    * 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a | 
 |  2016    * superclass of itself. | 
 |  2017    * | 
 |  2018    * Parameters: | 
 |  2019    * 0: the name of the class that implements itself recursively | 
 |  2020    */ | 
 |  2021   static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EX
      TENDS = | 
 |  2022       const CompileTimeErrorCode( | 
 |  2023           'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS', | 
 |  2024           "'{0}' cannot extend itself"); | 
 |  2025  | 
 |  2026   /** | 
 |  2027    * 7.10 Superinterfaces: It is a compile-time error if the interface of a | 
 |  2028    * class <i>C</i> is a superinterface of itself. | 
 |  2029    * | 
 |  2030    * 8.1 Superinterfaces: It is a compile-time error if an interface is a | 
 |  2031    * superinterface of itself. | 
 |  2032    * | 
 |  2033    * 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a | 
 |  2034    * superclass of itself. | 
 |  2035    * | 
 |  2036    * Parameters: | 
 |  2037    * 0: the name of the class that implements itself recursively | 
 |  2038    */ | 
 |  2039   static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IM
      PLEMENTS = | 
 |  2040       const CompileTimeErrorCode( | 
 |  2041           'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS', | 
 |  2042           "'{0}' cannot implement itself"); | 
 |  2043  | 
 |  2044   /** | 
 |  2045    * 7.10 Superinterfaces: It is a compile-time error if the interface of a | 
 |  2046    * class <i>C</i> is a superinterface of itself. | 
 |  2047    * | 
 |  2048    * 8.1 Superinterfaces: It is a compile-time error if an interface is a | 
 |  2049    * superinterface of itself. | 
 |  2050    * | 
 |  2051    * 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a | 
 |  2052    * superclass of itself. | 
 |  2053    * | 
 |  2054    * Parameters: | 
 |  2055    * 0: the name of the class that implements itself recursively | 
 |  2056    */ | 
 |  2057   static const CompileTimeErrorCode RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WI
      TH = | 
 |  2058       const CompileTimeErrorCode( | 
 |  2059           'RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH', | 
 |  2060           "'{0}' cannot use itself as a mixin"); | 
 |  2061  | 
 |  2062   /** | 
 |  2063    * 7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with | 
 |  2064    * the const modifier but <i>k'</i> is not a constant constructor. | 
 |  2065    */ | 
 |  2066   static const CompileTimeErrorCode REDIRECT_TO_MISSING_CONSTRUCTOR = | 
 |  2067       const CompileTimeErrorCode('REDIRECT_TO_MISSING_CONSTRUCTOR', | 
 |  2068           "The constructor '{0}' could not be found in '{1}'"); | 
 |  2069  | 
 |  2070   /** | 
 |  2071    * 7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with | 
 |  2072    * the const modifier but <i>k'</i> is not a constant constructor. | 
 |  2073    */ | 
 |  2074   static const CompileTimeErrorCode REDIRECT_TO_NON_CLASS = | 
 |  2075       const CompileTimeErrorCode('REDIRECT_TO_NON_CLASS', | 
 |  2076           "The name '{0}' is not a type and cannot be used in a redirected const
      ructor"); | 
 |  2077  | 
 |  2078   /** | 
 |  2079    * 7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with | 
 |  2080    * the const modifier but <i>k'</i> is not a constant constructor. | 
 |  2081    */ | 
 |  2082   static const CompileTimeErrorCode REDIRECT_TO_NON_CONST_CONSTRUCTOR = | 
 |  2083       const CompileTimeErrorCode('REDIRECT_TO_NON_CONST_CONSTRUCTOR', | 
 |  2084           "Constant factory constructor cannot delegate to a non-constant constr
      uctor"); | 
 |  2085  | 
 |  2086   /** | 
 |  2087    * 7.6.1 Generative constructors: A generative constructor may be | 
 |  2088    * <i>redirecting</i>, in which case its only action is to invoke another | 
 |  2089    * generative constructor. | 
 |  2090    */ | 
 |  2091   static const CompileTimeErrorCode REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR = | 
 |  2092       const CompileTimeErrorCode('REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR', | 
 |  2093           "The constructor '{0}' could not be found in '{1}'"); | 
 |  2094  | 
 |  2095   /** | 
 |  2096    * 7.6.1 Generative constructors: A generative constructor may be | 
 |  2097    * <i>redirecting</i>, in which case its only action is to invoke another | 
 |  2098    * generative constructor. | 
 |  2099    */ | 
 |  2100   static const CompileTimeErrorCode REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTR
      UCTOR = | 
 |  2101       const CompileTimeErrorCode( | 
 |  2102           'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR', | 
 |  2103           "Generative constructor cannot redirect to a factory constructor"); | 
 |  2104  | 
 |  2105   /** | 
 |  2106    * 5 Variables: A local variable may only be referenced at a source code | 
 |  2107    * location that is after its initializer, if any, is complete, or a | 
 |  2108    * compile-time error occurs. | 
 |  2109    */ | 
 |  2110   static const CompileTimeErrorCode REFERENCED_BEFORE_DECLARATION = | 
 |  2111       const CompileTimeErrorCode('REFERENCED_BEFORE_DECLARATION', | 
 |  2112           "Local variables cannot be referenced before they are declared"); | 
 |  2113  | 
 |  2114   /** | 
 |  2115    * 12.8.1 Rethrow: It is a compile-time error if an expression of the form | 
 |  2116    * <i>rethrow;</i> is not enclosed within a on-catch clause. | 
 |  2117    */ | 
 |  2118   static const CompileTimeErrorCode RETHROW_OUTSIDE_CATCH = | 
 |  2119       const CompileTimeErrorCode( | 
 |  2120           'RETHROW_OUTSIDE_CATCH', "rethrow must be inside of a catch clause"); | 
 |  2121  | 
 |  2122   /** | 
 |  2123    * 13.12 Return: It is a compile-time error if a return statement of the form | 
 |  2124    * <i>return e;</i> appears in a generative constructor. | 
 |  2125    */ | 
 |  2126   static const CompileTimeErrorCode RETURN_IN_GENERATIVE_CONSTRUCTOR = | 
 |  2127       const CompileTimeErrorCode('RETURN_IN_GENERATIVE_CONSTRUCTOR', | 
 |  2128           "Constructors cannot return a value"); | 
 |  2129  | 
 |  2130   /** | 
 |  2131    * 13.12 Return: It is a compile-time error if a return statement of the form | 
 |  2132    * <i>return e;</i> appears in a generator function. | 
 |  2133    */ | 
 |  2134   static const CompileTimeErrorCode RETURN_IN_GENERATOR = | 
 |  2135       const CompileTimeErrorCode('RETURN_IN_GENERATOR', | 
 |  2136           "Cannot return a value from a generator function (one marked with eith
      er 'async*' or 'sync*')"); | 
 |  2137  | 
 |  2138   /** | 
 |  2139    * 14.1 Imports: It is a compile-time error if a prefix used in a deferred | 
 |  2140    * import is used in another import clause. | 
 |  2141    */ | 
 |  2142   static const CompileTimeErrorCode SHARED_DEFERRED_PREFIX = | 
 |  2143       const CompileTimeErrorCode('SHARED_DEFERRED_PREFIX', | 
 |  2144           "The prefix of a deferred import cannot be used in other import direct
      ives"); | 
 |  2145  | 
 |  2146   /** | 
 |  2147    * 12.15.4 Super Invocation: A super method invocation <i>i</i> has the form | 
 |  2148    * <i>super.m(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  2149    * a<sub>n+1</sub>, … x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. It is a | 
 |  2150    * compile-time error if a super method invocation occurs in a top-level | 
 |  2151    * function or variable initializer, in an instance variable initializer or | 
 |  2152    * initializer list, in class Object, in a factory constructor, or in a static | 
 |  2153    * method or variable initializer. | 
 |  2154    */ | 
 |  2155   static const CompileTimeErrorCode SUPER_IN_INVALID_CONTEXT = | 
 |  2156       const CompileTimeErrorCode( | 
 |  2157           'SUPER_IN_INVALID_CONTEXT', "Invalid context for 'super' invocation"); | 
 |  2158  | 
 |  2159   /** | 
 |  2160    * 7.6.1 Generative Constructors: A generative constructor may be redirecting, | 
 |  2161    * in which case its only action is to invoke another generative constructor. | 
 |  2162    */ | 
 |  2163   static const CompileTimeErrorCode SUPER_IN_REDIRECTING_CONSTRUCTOR = | 
 |  2164       const CompileTimeErrorCode('SUPER_IN_REDIRECTING_CONSTRUCTOR', | 
 |  2165           "The redirecting constructor cannot have a 'super' initializer"); | 
 |  2166  | 
 |  2167   /** | 
 |  2168    * 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It | 
 |  2169    * is a compile-time error if a generative constructor of class Object | 
 |  2170    * includes a superinitializer. | 
 |  2171    */ | 
 |  2172   static const CompileTimeErrorCode SUPER_INITIALIZER_IN_OBJECT = | 
 |  2173       const CompileTimeErrorCode('SUPER_INITIALIZER_IN_OBJECT', ""); | 
 |  2174  | 
 |  2175   /** | 
 |  2176    * 12.11 Instance Creation: It is a static type warning if any of the type | 
 |  2177    * arguments to a constructor of a generic type <i>G</i> invoked by a new | 
 |  2178    * expression or a constant object expression are not subtypes of the bounds | 
 |  2179    * of the corresponding formal type parameters of <i>G</i>. | 
 |  2180    * | 
 |  2181    * 12.11.1 New: If T is malformed a dynamic error occurs. In checked mode, if | 
 |  2182    * T is mal-bounded a dynamic error occurs. | 
 |  2183    * | 
 |  2184    * 12.1 Constants: It is a compile-time error if evaluation of a compile-time | 
 |  2185    * constant would raise an exception. | 
 |  2186    * | 
 |  2187    * Parameters: | 
 |  2188    * 0: the name of the type used in the instance creation that should be | 
 |  2189    *    limited by the bound as specified in the class declaration | 
 |  2190    * 1: the name of the bounding type | 
 |  2191    * | 
 |  2192    * See [StaticTypeWarningCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]. | 
 |  2193    */ | 
 |  2194   static const CompileTimeErrorCode TYPE_ARGUMENT_NOT_MATCHING_BOUNDS = | 
 |  2195       const CompileTimeErrorCode( | 
 |  2196           'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS', "'{0}' does not extend '{1}'"); | 
 |  2197  | 
 |  2198   /** | 
 |  2199    * 15.3.1 Typedef: Any self reference, either directly, or recursively via | 
 |  2200    * another typedef, is a compile time error. | 
 |  2201    */ | 
 |  2202   static const CompileTimeErrorCode TYPE_ALIAS_CANNOT_REFERENCE_ITSELF = | 
 |  2203       const CompileTimeErrorCode('TYPE_ALIAS_CANNOT_REFERENCE_ITSELF', | 
 |  2204           "Type alias cannot reference itself directly or recursively via anothe
      r typedef"); | 
 |  2205  | 
 |  2206   /** | 
 |  2207    * 12.11.2 Const: It is a compile-time error if <i>T</i> is not a class | 
 |  2208    * accessible in the current scope, optionally followed by type arguments. | 
 |  2209    */ | 
 |  2210   static const CompileTimeErrorCode UNDEFINED_CLASS = | 
 |  2211       const CompileTimeErrorCode('UNDEFINED_CLASS', "Undefined class '{0}'"); | 
 |  2212  | 
 |  2213   /** | 
 |  2214    * 7.6.1 Generative Constructors: Let <i>C</i> be the class in which the | 
 |  2215    * superinitializer appears and let <i>S</i> be the superclass of <i>C</i>. | 
 |  2216    * Let <i>k</i> be a generative constructor. It is a compile-time error if | 
 |  2217    * class <i>S</i> does not declare a generative constructor named <i>S</i> | 
 |  2218    * (respectively <i>S.id</i>) | 
 |  2219    */ | 
 |  2220   static const CompileTimeErrorCode UNDEFINED_CONSTRUCTOR_IN_INITIALIZER = | 
 |  2221       const CompileTimeErrorCode('UNDEFINED_CONSTRUCTOR_IN_INITIALIZER', | 
 |  2222           "The class '{0}' does not have a generative constructor '{1}'"); | 
 |  2223  | 
 |  2224   /** | 
 |  2225    * 7.6.1 Generative Constructors: Let <i>C</i> be the class in which the | 
 |  2226    * superinitializer appears and let <i>S</i> be the superclass of <i>C</i>. | 
 |  2227    * Let <i>k</i> be a generative constructor. It is a compile-time error if | 
 |  2228    * class <i>S</i> does not declare a generative constructor named <i>S</i> | 
 |  2229    * (respectively <i>S.id</i>) | 
 |  2230    */ | 
 |  2231   static const CompileTimeErrorCode UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT
       = | 
 |  2232       const CompileTimeErrorCode('UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT', | 
 |  2233           "The class '{0}' does not have a default generative constructor"); | 
 |  2234  | 
 |  2235   /** | 
 |  2236    * 12.14.2 Binding Actuals to Formals: Furthermore, each <i>q<sub>i</sub></i>, | 
 |  2237    * <i>1<=i<=l</i>, must have a corresponding named parameter in the set | 
 |  2238    * {<i>p<sub>n+1</sub></i> ... <i>p<sub>n+k</sub></i>} or a static warning | 
 |  2239    * occurs. | 
 |  2240    * | 
 |  2241    * 12.11.2 Const: It is a compile-time error if evaluation of a constant | 
 |  2242    * object results in an uncaught exception being thrown. | 
 |  2243    * | 
 |  2244    * Parameters: | 
 |  2245    * 0: the name of the requested named parameter | 
 |  2246    */ | 
 |  2247   static const CompileTimeErrorCode UNDEFINED_NAMED_PARAMETER = | 
 |  2248       const CompileTimeErrorCode('UNDEFINED_NAMED_PARAMETER', | 
 |  2249           "The named parameter '{0}' is not defined"); | 
 |  2250  | 
 |  2251   /** | 
 |  2252    * 14.2 Exports: It is a compile-time error if the compilation unit found at | 
 |  2253    * the specified URI is not a library declaration. | 
 |  2254    * | 
 |  2255    * 14.1 Imports: It is a compile-time error if the compilation unit found at | 
 |  2256    * the specified URI is not a library declaration. | 
 |  2257    * | 
 |  2258    * 14.3 Parts: It is a compile time error if the contents of the URI are not a | 
 |  2259    * valid part declaration. | 
 |  2260    * | 
 |  2261    * Parameters: | 
 |  2262    * 0: the URI pointing to a non-existent file | 
 |  2263    * | 
 |  2264    * See [INVALID_URI]. | 
 |  2265    */ | 
 |  2266   static const CompileTimeErrorCode URI_DOES_NOT_EXIST = | 
 |  2267       const CompileTimeErrorCode( | 
 |  2268           'URI_DOES_NOT_EXIST', "Target of URI does not exist: '{0}'"); | 
 |  2269  | 
 |  2270   /** | 
 |  2271    * 14.1 Imports: It is a compile-time error if <i>x</i> is not a compile-time | 
 |  2272    * constant, or if <i>x</i> involves string interpolation. | 
 |  2273    * | 
 |  2274    * 14.3 Parts: It is a compile-time error if <i>s</i> is not a compile-time | 
 |  2275    * constant, or if <i>s</i> involves string interpolation. | 
 |  2276    * | 
 |  2277    * 14.5 URIs: It is a compile-time error if the string literal <i>x</i> that | 
 |  2278    * describes a URI is not a compile-time constant, or if <i>x</i> involves | 
 |  2279    * string interpolation. | 
 |  2280    */ | 
 |  2281   static const CompileTimeErrorCode URI_WITH_INTERPOLATION = | 
 |  2282       const CompileTimeErrorCode( | 
 |  2283           'URI_WITH_INTERPOLATION', "URIs cannot use string interpolation"); | 
 |  2284  | 
 |  2285   /** | 
 |  2286    * 7.1.1 Operators: It is a compile-time error if the arity of the | 
 |  2287    * user-declared operator []= is not 2. It is a compile time error if the | 
 |  2288    * arity of a user-declared operator with one of the names: <, >, <=, | 
 |  2289    * >=, ==, +, /, ~/, *, %, |, ^, &, <<, >>, [] is not 1. It is | 
 |  2290    * a compile time error if the arity of the user-declared operator - is not 0 | 
 |  2291    * or 1. It is a compile time error if the arity of the user-declared operator | 
 |  2292    * ~ is not 0. | 
 |  2293    * | 
 |  2294    * Parameters: | 
 |  2295    * 0: the name of the declared operator | 
 |  2296    * 1: the number of parameters expected | 
 |  2297    * 2: the number of parameters found in the operator declaration | 
 |  2298    */ | 
 |  2299   static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR = | 
 |  2300       const CompileTimeErrorCode('WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR', | 
 |  2301           "Operator '{0}' should declare exactly {1} parameter(s), but {2} found
      "); | 
 |  2302  | 
 |  2303   /** | 
 |  2304    * 7.1.1 Operators: It is a compile time error if the arity of the | 
 |  2305    * user-declared operator - is not 0 or 1. | 
 |  2306    * | 
 |  2307    * Parameters: | 
 |  2308    * 0: the number of parameters found in the operator declaration | 
 |  2309    */ | 
 |  2310   static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINU
      S = | 
 |  2311       const CompileTimeErrorCode( | 
 |  2312           'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS', | 
 |  2313           "Operator '-' should declare 0 or 1 parameter, but {0} found"); | 
 |  2314  | 
 |  2315   /** | 
 |  2316    * 7.3 Setters: It is a compile-time error if a setter's formal parameter list | 
 |  2317    * does not include exactly one required formal parameter <i>p</i>. | 
 |  2318    */ | 
 |  2319   static const CompileTimeErrorCode WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER = | 
 |  2320       const CompileTimeErrorCode('WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER', | 
 |  2321           "Setters should declare exactly one required parameter"); | 
 |  2322  | 
 |  2323   /** | 
 |  2324    * ?? Yield: It is a compile-time error if a yield statement appears in a | 
 |  2325    * function that is not a generator function. | 
 |  2326    */ | 
 |  2327   static const CompileTimeErrorCode YIELD_EACH_IN_NON_GENERATOR = | 
 |  2328       const CompileTimeErrorCode('YIELD_EACH_IN_NON_GENERATOR', | 
 |  2329           "Yield-each statements must be in a generator function (one marked wit
      h either 'async*' or 'sync*')"); | 
 |  2330  | 
 |  2331   /** | 
 |  2332    * ?? Yield: It is a compile-time error if a yield statement appears in a | 
 |  2333    * function that is not a generator function. | 
 |  2334    */ | 
 |  2335   static const CompileTimeErrorCode YIELD_IN_NON_GENERATOR = | 
 |  2336       const CompileTimeErrorCode('YIELD_IN_NON_GENERATOR', | 
 |  2337           "Yield statements must be in a generator function (one marked with eit
      her 'async*' or 'sync*')"); | 
 |  2338  | 
 |  2339   /** | 
 |  2340    * Initialize a newly created error code to have the given [name]. The message | 
 |  2341    * associated with the error will be created from the given [message] | 
 |  2342    * template. The correction associated with the error will be created from the | 
 |  2343    * given [correction] template. | 
 |  2344    */ | 
 |  2345   const CompileTimeErrorCode(String name, String message, [String correction]) | 
 |  2346       : super(name, message, correction); | 
 |  2347  | 
 |  2348   @override | 
 |  2349   ErrorSeverity get errorSeverity => ErrorType.COMPILE_TIME_ERROR.severity; | 
 |  2350  | 
 |  2351   @override | 
 |  2352   ErrorType get type => ErrorType.COMPILE_TIME_ERROR; | 
 |  2353 } | 
 |  2354  | 
 |  2355 /** | 
 |  2356  * An error code associated with an [AnalysisError]. | 
 |  2357  * | 
 |  2358  * Generally, we want to provide messages that consist of three sentences. From | 
 |  2359  * the user's perspective these sentences should explain: | 
 |  2360  * 1. what is wrong, | 
 |  2361  * 2. why is it wrong, and | 
 |  2362  * 3. how do I fix it. | 
 |  2363  * However, we combine the first two in the [message] and the last in the | 
 |  2364  * [correction]. | 
 |  2365  */ | 
 |  2366 abstract class ErrorCode { | 
 |  2367   /** | 
 |  2368    * An empty list of error codes. | 
 |  2369    */ | 
 |  2370   static const List<ErrorCode> EMPTY_LIST = const <ErrorCode>[]; | 
 |  2371  | 
 |  2372   /** | 
 |  2373    * The name of the error code. | 
 |  2374    */ | 
 |  2375   final String name; | 
 |  2376  | 
 |  2377   /** | 
 |  2378    * The template used to create the message to be displayed for this error. The | 
 |  2379    * message should indicate what is wrong and why it is wrong. | 
 |  2380    */ | 
 |  2381   final String message; | 
 |  2382  | 
 |  2383   /** | 
 |  2384    * The template used to create the correction to be displayed for this error, | 
 |  2385    * or `null` if there is no correction information for this error. The | 
 |  2386    * correction should indicate how the user can fix the error. | 
 |  2387    */ | 
 |  2388   final String correction; | 
 |  2389  | 
 |  2390   /** | 
 |  2391    * Initialize a newly created error code to have the given [name]. The message | 
 |  2392    * associated with the error will be created from the given [message] | 
 |  2393    * template. The correction associated with the error will be created from the | 
 |  2394    * given [correction] template. | 
 |  2395    */ | 
 |  2396   const ErrorCode(this.name, this.message, [this.correction]); | 
 |  2397  | 
 |  2398   /** | 
 |  2399    * The severity of the error. | 
 |  2400    */ | 
 |  2401   ErrorSeverity get errorSeverity; | 
 |  2402  | 
 |  2403   /** | 
 |  2404    * The type of the error. | 
 |  2405    */ | 
 |  2406   ErrorType get type; | 
 |  2407  | 
 |  2408   /** | 
 |  2409    * The unique name of this error code. | 
 |  2410    */ | 
 |  2411   String get uniqueName => "$runtimeType.$name"; | 
 |  2412 } | 
 |  2413  | 
 |  2414 /** | 
 |  2415  * The properties that can be associated with an [AnalysisError]. | 
 |  2416  */ | 
 |  2417 class ErrorProperty extends Enum<ErrorProperty> { | 
 |  2418   /** | 
 |  2419    * A property whose value is a list of [FieldElement]s that are final, but | 
 |  2420    * not initialized by a constructor. | 
 |  2421    */ | 
 |  2422   static const ErrorProperty NOT_INITIALIZED_FIELDS = | 
 |  2423       const ErrorProperty('NOT_INITIALIZED_FIELDS', 0); | 
 |  2424  | 
 |  2425   /** | 
 |  2426    * A property whose value is the name of the library that is used by all | 
 |  2427    * of the "part of" directives, so should be used in the "library" directive. | 
 |  2428    * Is `null` if there is no a single name used by all of the parts. | 
 |  2429    */ | 
 |  2430   static const ErrorProperty PARTS_LIBRARY_NAME = | 
 |  2431       const ErrorProperty('PARTS_LIBRARY_NAME', 1); | 
 |  2432  | 
 |  2433   /** | 
 |  2434    * A property whose value is a list of [ExecutableElement] that should | 
 |  2435    * be but are not implemented by a concrete class. | 
 |  2436    */ | 
 |  2437   static const ErrorProperty UNIMPLEMENTED_METHODS = | 
 |  2438       const ErrorProperty('UNIMPLEMENTED_METHODS', 2); | 
 |  2439  | 
 |  2440   static const List<ErrorProperty> values = const [ | 
 |  2441     NOT_INITIALIZED_FIELDS, | 
 |  2442     PARTS_LIBRARY_NAME, | 
 |  2443     UNIMPLEMENTED_METHODS | 
 |  2444   ]; | 
 |  2445  | 
 |  2446   const ErrorProperty(String name, int ordinal) : super(name, ordinal); | 
 |  2447 } | 
 |  2448  | 
 |  2449 /** | 
 |  2450  * An object used to create analysis errors and report then to an error | 
 |  2451  * listener. | 
 |  2452  */ | 
 |  2453 class ErrorReporter { | 
 |  2454   /** | 
 |  2455    * The error listener to which errors will be reported. | 
 |  2456    */ | 
 |  2457   final AnalysisErrorListener _errorListener; | 
 |  2458  | 
 |  2459   /** | 
 |  2460    * The default source to be used when reporting errors. | 
 |  2461    */ | 
 |  2462   final Source _defaultSource; | 
 |  2463  | 
 |  2464   /** | 
 |  2465    * The source to be used when reporting errors. | 
 |  2466    */ | 
 |  2467   Source _source; | 
 |  2468  | 
 |  2469   /** | 
 |  2470    * Initialize a newly created error reporter that will report errors to the | 
 |  2471    * given [_errorListener]. Errors will be reported against the | 
 |  2472    * [_defaultSource] unless another source is provided later. | 
 |  2473    */ | 
 |  2474   ErrorReporter(this._errorListener, this._defaultSource) { | 
 |  2475     if (_errorListener == null) { | 
 |  2476       throw new IllegalArgumentException("An error listener must be provided"); | 
 |  2477     } else if (_defaultSource == null) { | 
 |  2478       throw new IllegalArgumentException("A default source must be provided"); | 
 |  2479     } | 
 |  2480     this._source = _defaultSource; | 
 |  2481   } | 
 |  2482  | 
 |  2483   Source get source => _source; | 
 |  2484  | 
 |  2485   /** | 
 |  2486    * Set the source to be used when reporting errors to the given [source]. | 
 |  2487    * Setting the source to `null` will cause the default source to be used. | 
 |  2488    */ | 
 |  2489   void set source(Source source) { | 
 |  2490     this._source = source == null ? _defaultSource : source; | 
 |  2491   } | 
 |  2492  | 
 |  2493   /** | 
 |  2494    * Creates an error with properties with the given [errorCode] and | 
 |  2495    * [arguments]. The [node] is used to compute the location of the error. | 
 |  2496    */ | 
 |  2497   AnalysisErrorWithProperties newErrorWithProperties( | 
 |  2498           ErrorCode errorCode, AstNode node, List<Object> arguments) => | 
 |  2499       new AnalysisErrorWithProperties( | 
 |  2500           _source, node.offset, node.length, errorCode, arguments); | 
 |  2501  | 
 |  2502   /** | 
 |  2503    * Report the given [error]. | 
 |  2504    */ | 
 |  2505   void reportError(AnalysisError error) { | 
 |  2506     _errorListener.onError(error); | 
 |  2507   } | 
 |  2508  | 
 |  2509   /** | 
 |  2510    * Report an error with the given [errorCode] and [arguments]. The [element] | 
 |  2511    * is used to compute the location of the error. | 
 |  2512    */ | 
 |  2513   void reportErrorForElement( | 
 |  2514       ErrorCode errorCode, Element element, List<Object> arguments) { | 
 |  2515     String displayName = element.displayName; | 
 |  2516     int length = 0; | 
 |  2517     if (displayName != null) { | 
 |  2518       length = displayName.length; | 
 |  2519     } else if (element is ImportElement) { | 
 |  2520       length = 6; // 'import'.length | 
 |  2521     } else if (element is ExportElement) { | 
 |  2522       length = 6; // 'export'.length | 
 |  2523     } | 
 |  2524     reportErrorForOffset(errorCode, element.nameOffset, length, arguments); | 
 |  2525   } | 
 |  2526  | 
 |  2527   /** | 
 |  2528    * Report an error with the given [errorCode] and [arguments]. | 
 |  2529    * The [node] is used to compute the location of the error. | 
 |  2530    * | 
 |  2531    * If the arguments contain the names of two or more types, the method | 
 |  2532    * [reportTypeErrorForNode] should be used and the types | 
 |  2533    * themselves (rather than their names) should be passed as arguments. | 
 |  2534    */ | 
 |  2535   void reportErrorForNode(ErrorCode errorCode, AstNode node, | 
 |  2536       [List<Object> arguments]) { | 
 |  2537     reportErrorForOffset(errorCode, node.offset, node.length, arguments); | 
 |  2538   } | 
 |  2539  | 
 |  2540   /** | 
 |  2541    * Report an error with the given [errorCode] and [arguments]. The location of | 
 |  2542    * the error is specified by the given [offset] and [length]. | 
 |  2543    */ | 
 |  2544   void reportErrorForOffset(ErrorCode errorCode, int offset, int length, | 
 |  2545       [List<Object> arguments]) { | 
 |  2546     _errorListener.onError( | 
 |  2547         new AnalysisError(_source, offset, length, errorCode, arguments)); | 
 |  2548   } | 
 |  2549  | 
 |  2550   /** | 
 |  2551    * Report an error with the given [errorCode] and [arguments]. The [token] is | 
 |  2552    * used to compute the location of the error. | 
 |  2553    */ | 
 |  2554   void reportErrorForToken(ErrorCode errorCode, Token token, | 
 |  2555       [List<Object> arguments]) { | 
 |  2556     reportErrorForOffset(errorCode, token.offset, token.length, arguments); | 
 |  2557   } | 
 |  2558  | 
 |  2559   /** | 
 |  2560    * Report an error with the given [errorCode] and [arguments]. The [node] is | 
 |  2561    * used to compute the location of the error. The arguments are expected to | 
 |  2562    * contain two or more types. Convert the types into strings by using the | 
 |  2563    * display names of the types, unless there are two or more types with the | 
 |  2564    * same names, in which case the extended display names of the types will be | 
 |  2565    * used in order to clarify the message. | 
 |  2566    * | 
 |  2567    * If there are not two or more types in the argument list, the method | 
 |  2568    * [reportErrorForNode] should be used instead. | 
 |  2569    */ | 
 |  2570   void reportTypeErrorForNode( | 
 |  2571       ErrorCode errorCode, AstNode node, List<Object> arguments) { | 
 |  2572     _convertTypeNames(arguments); | 
 |  2573     reportErrorForOffset(errorCode, node.offset, node.length, arguments); | 
 |  2574   } | 
 |  2575  | 
 |  2576   /** | 
 |  2577    * Given an array of [arguments] that is expected to contain two or more | 
 |  2578    * types, convert the types into strings by using the display names of the | 
 |  2579    * types, unless there are two or more types with the same names, in which | 
 |  2580    * case the extended display names of the types will be used in order to | 
 |  2581    * clarify the message. | 
 |  2582    */ | 
 |  2583   void _convertTypeNames(List<Object> arguments) { | 
 |  2584     if (_hasEqualTypeNames(arguments)) { | 
 |  2585       int count = arguments.length; | 
 |  2586       for (int i = 0; i < count; i++) { | 
 |  2587         Object argument = arguments[i]; | 
 |  2588         if (argument is DartType) { | 
 |  2589           DartType type = argument; | 
 |  2590           Element element = type.element; | 
 |  2591           if (element == null) { | 
 |  2592             arguments[i] = type.displayName; | 
 |  2593           } else { | 
 |  2594             arguments[i] = element.getExtendedDisplayName(type.displayName); | 
 |  2595           } | 
 |  2596         } | 
 |  2597       } | 
 |  2598     } else { | 
 |  2599       int count = arguments.length; | 
 |  2600       for (int i = 0; i < count; i++) { | 
 |  2601         Object argument = arguments[i]; | 
 |  2602         if (argument is DartType) { | 
 |  2603           arguments[i] = argument.displayName; | 
 |  2604         } | 
 |  2605       } | 
 |  2606     } | 
 |  2607   } | 
 |  2608  | 
 |  2609   /** | 
 |  2610    * Return `true` if the given array of [arguments] contains two or more types | 
 |  2611    * with the same display name. | 
 |  2612    */ | 
 |  2613   bool _hasEqualTypeNames(List<Object> arguments) { | 
 |  2614     int count = arguments.length; | 
 |  2615     HashSet<String> typeNames = new HashSet<String>(); | 
 |  2616     for (int i = 0; i < count; i++) { | 
 |  2617       if (arguments[i] is DartType && | 
 |  2618           !typeNames.add((arguments[i] as DartType).displayName)) { | 
 |  2619         return true; | 
 |  2620       } | 
 |  2621     } | 
 |  2622     return false; | 
 |  2623   } | 
 |  2624 } | 
 |  2625  | 
 |  2626 /** | 
 |  2627  * The severity of an [ErrorCode]. | 
 |  2628  */ | 
 |  2629 class ErrorSeverity extends Enum<ErrorSeverity> { | 
 |  2630   /** | 
 |  2631    * The severity representing a non-error. This is never used for any error | 
 |  2632    * code, but is useful for clients. | 
 |  2633    */ | 
 |  2634   static const ErrorSeverity NONE = const ErrorSeverity('NONE', 0, " ", "none"); | 
 |  2635  | 
 |  2636   /** | 
 |  2637    * The severity representing an informational level analysis issue. | 
 |  2638    */ | 
 |  2639   static const ErrorSeverity INFO = const ErrorSeverity('INFO', 1, "I", "info"); | 
 |  2640  | 
 |  2641   /** | 
 |  2642    * The severity representing a warning. Warnings can become errors if the `-We
      rror` command | 
 |  2643    * line flag is specified. | 
 |  2644    */ | 
 |  2645   static const ErrorSeverity WARNING = | 
 |  2646       const ErrorSeverity('WARNING', 2, "W", "warning"); | 
 |  2647  | 
 |  2648   /** | 
 |  2649    * The severity representing an error. | 
 |  2650    */ | 
 |  2651   static const ErrorSeverity ERROR = | 
 |  2652       const ErrorSeverity('ERROR', 3, "E", "error"); | 
 |  2653  | 
 |  2654   static const List<ErrorSeverity> values = const [NONE, INFO, WARNING, ERROR]; | 
 |  2655  | 
 |  2656   /** | 
 |  2657    * The name of the severity used when producing machine output. | 
 |  2658    */ | 
 |  2659   final String machineCode; | 
 |  2660  | 
 |  2661   /** | 
 |  2662    * The name of the severity used when producing readable output. | 
 |  2663    */ | 
 |  2664   final String displayName; | 
 |  2665  | 
 |  2666   /** | 
 |  2667    * Initialize a newly created severity with the given names. | 
 |  2668    * | 
 |  2669    * Parameters: | 
 |  2670    * 0: the name of the severity used when producing machine output | 
 |  2671    * 1: the name of the severity used when producing readable output | 
 |  2672    */ | 
 |  2673   const ErrorSeverity( | 
 |  2674       String name, int ordinal, this.machineCode, this.displayName) | 
 |  2675       : super(name, ordinal); | 
 |  2676  | 
 |  2677   /** | 
 |  2678    * Return the severity constant that represents the greatest severity. | 
 |  2679    */ | 
 |  2680   ErrorSeverity max(ErrorSeverity severity) => | 
 |  2681       this.ordinal >= severity.ordinal ? this : severity; | 
 |  2682 } | 
 |  2683  | 
 |  2684 /** | 
 |  2685  * The type of an [ErrorCode]. | 
 |  2686  */ | 
 |  2687 class ErrorType extends Enum<ErrorType> { | 
 |  2688   /** | 
 |  2689    * Task (todo) comments in user code. | 
 |  2690    */ | 
 |  2691   static const ErrorType TODO = const ErrorType('TODO', 0, ErrorSeverity.INFO); | 
 |  2692  | 
 |  2693   /** | 
 |  2694    * Extra analysis run over the code to follow best practices, which are not in | 
 |  2695    * the Dart Language Specification. | 
 |  2696    */ | 
 |  2697   static const ErrorType HINT = const ErrorType('HINT', 1, ErrorSeverity.INFO); | 
 |  2698  | 
 |  2699   /** | 
 |  2700    * Compile-time errors are errors that preclude execution. A compile time | 
 |  2701    * error must be reported by a Dart compiler before the erroneous code is | 
 |  2702    * executed. | 
 |  2703    */ | 
 |  2704   static const ErrorType COMPILE_TIME_ERROR = | 
 |  2705       const ErrorType('COMPILE_TIME_ERROR', 2, ErrorSeverity.ERROR); | 
 |  2706  | 
 |  2707   /** | 
 |  2708    * Checked mode compile-time errors are errors that preclude execution in | 
 |  2709    * checked mode. | 
 |  2710    */ | 
 |  2711   static const ErrorType CHECKED_MODE_COMPILE_TIME_ERROR = const ErrorType( | 
 |  2712       'CHECKED_MODE_COMPILE_TIME_ERROR', 3, ErrorSeverity.ERROR); | 
 |  2713  | 
 |  2714   /** | 
 |  2715    * Static warnings are those warnings reported by the static checker. They | 
 |  2716    * have no effect on execution. Static warnings must be provided by Dart | 
 |  2717    * compilers used during development. | 
 |  2718    */ | 
 |  2719   static const ErrorType STATIC_WARNING = | 
 |  2720       const ErrorType('STATIC_WARNING', 4, ErrorSeverity.WARNING); | 
 |  2721  | 
 |  2722   /** | 
 |  2723    * Many, but not all, static warnings relate to types, in which case they are | 
 |  2724    * known as static type warnings. | 
 |  2725    */ | 
 |  2726   static const ErrorType STATIC_TYPE_WARNING = | 
 |  2727       const ErrorType('STATIC_TYPE_WARNING', 5, ErrorSeverity.WARNING); | 
 |  2728  | 
 |  2729   /** | 
 |  2730    * Syntactic errors are errors produced as a result of input that does not | 
 |  2731    * conform to the grammar. | 
 |  2732    */ | 
 |  2733   static const ErrorType SYNTACTIC_ERROR = | 
 |  2734       const ErrorType('SYNTACTIC_ERROR', 6, ErrorSeverity.ERROR); | 
 |  2735  | 
 |  2736   /** | 
 |  2737    * Lint warnings describe style and best practice recommendations that can be | 
 |  2738    * used to formalize a project's style guidelines. | 
 |  2739    */ | 
 |  2740   static const ErrorType LINT = const ErrorType('LINT', 7, ErrorSeverity.INFO); | 
 |  2741  | 
 |  2742   static const List<ErrorType> values = const [ | 
 |  2743     TODO, | 
 |  2744     HINT, | 
 |  2745     COMPILE_TIME_ERROR, | 
 |  2746     CHECKED_MODE_COMPILE_TIME_ERROR, | 
 |  2747     STATIC_WARNING, | 
 |  2748     STATIC_TYPE_WARNING, | 
 |  2749     SYNTACTIC_ERROR, | 
 |  2750     LINT | 
 |  2751   ]; | 
 |  2752  | 
 |  2753   /** | 
 |  2754    * The severity of this type of error. | 
 |  2755    */ | 
 |  2756   final ErrorSeverity severity; | 
 |  2757  | 
 |  2758   /** | 
 |  2759    * Initialize a newly created error type to have the given [name] and | 
 |  2760    * [severity]. | 
 |  2761    */ | 
 |  2762   const ErrorType(String name, int ordinal, this.severity) | 
 |  2763       : super(name, ordinal); | 
 |  2764  | 
 |  2765   String get displayName => name.toLowerCase().replaceAll('_', ' '); | 
 |  2766 } | 
 |  2767  | 
 |  2768 /** | 
 |  2769  * The hints and coding recommendations for best practices which are not | 
 |  2770  * mentioned in the Dart Language Specification. | 
 |  2771  */ | 
 |  2772 class HintCode extends ErrorCode { | 
 |  2773   /** | 
 |  2774    * This hint is generated anywhere where the | 
 |  2775    * [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE] would have been generated, | 
 |  2776    * if we used propagated information for the warnings. | 
 |  2777    * | 
 |  2778    * Parameters: | 
 |  2779    * 0: the name of the actual argument type | 
 |  2780    * 1: the name of the expected type | 
 |  2781    */ | 
 |  2782   static const HintCode ARGUMENT_TYPE_NOT_ASSIGNABLE = const HintCode( | 
 |  2783       'ARGUMENT_TYPE_NOT_ASSIGNABLE', | 
 |  2784       "The argument type '{0}' cannot be assigned to the parameter type '{1}'"); | 
 |  2785  | 
 |  2786   /** | 
 |  2787    * Dead code is code that is never reached, this can happen for instance if a | 
 |  2788    * statement follows a return statement. | 
 |  2789    */ | 
 |  2790   static const HintCode DEAD_CODE = const HintCode('DEAD_CODE', "Dead code"); | 
 |  2791  | 
 |  2792   /** | 
 |  2793    * Dead code is code that is never reached. This case covers cases where the | 
 |  2794    * user has catch clauses after `catch (e)` or `on Object catch (e)`. | 
 |  2795    */ | 
 |  2796   static const HintCode DEAD_CODE_CATCH_FOLLOWING_CATCH = const HintCode( | 
 |  2797       'DEAD_CODE_CATCH_FOLLOWING_CATCH', | 
 |  2798       "Dead code, catch clauses after a 'catch (e)' or an 'on Object catch (e)' 
      are never reached"); | 
 |  2799  | 
 |  2800   /** | 
 |  2801    * Dead code is code that is never reached. This case covers cases where the | 
 |  2802    * user has an on-catch clause such as `on A catch (e)`, where a supertype of | 
 |  2803    * `A` was already caught. | 
 |  2804    * | 
 |  2805    * Parameters: | 
 |  2806    * 0: name of the subtype | 
 |  2807    * 1: name of the supertype | 
 |  2808    */ | 
 |  2809   static const HintCode DEAD_CODE_ON_CATCH_SUBTYPE = const HintCode( | 
 |  2810       'DEAD_CODE_ON_CATCH_SUBTYPE', | 
 |  2811       "Dead code, this on-catch block will never be executed since '{0}' is a su
      btype of '{1}'"); | 
 |  2812  | 
 |  2813   /** | 
 |  2814    * Deprecated members should not be invoked or used. | 
 |  2815    * | 
 |  2816    * Parameters: | 
 |  2817    * 0: the name of the member | 
 |  2818    */ | 
 |  2819   static const HintCode DEPRECATED_MEMBER_USE = | 
 |  2820       const HintCode('DEPRECATED_MEMBER_USE', "'{0}' is deprecated"); | 
 |  2821  | 
 |  2822   /** | 
 |  2823    * Duplicate imports. | 
 |  2824    */ | 
 |  2825   static const HintCode DUPLICATE_IMPORT = | 
 |  2826       const HintCode('DUPLICATE_IMPORT', "Duplicate import"); | 
 |  2827  | 
 |  2828   /** | 
 |  2829    * Hint to use the ~/ operator. | 
 |  2830    */ | 
 |  2831   static const HintCode DIVISION_OPTIMIZATION = const HintCode( | 
 |  2832       'DIVISION_OPTIMIZATION', | 
 |  2833       "The operator x ~/ y is more efficient than (x / y).toInt()"); | 
 |  2834  | 
 |  2835   /** | 
 |  2836    * Hint for the `x is double` type checks. | 
 |  2837    */ | 
 |  2838   static const HintCode IS_DOUBLE = const HintCode('IS_DOUBLE', | 
 |  2839       "When compiled to JS, this test might return true when the left hand side 
      is an int"); | 
 |  2840  | 
 |  2841   /** | 
 |  2842    * Hint for the `x is int` type checks. | 
 |  2843    */ | 
 |  2844   static const HintCode IS_INT = const HintCode('IS_INT', | 
 |  2845       "When compiled to JS, this test might return true when the left hand side 
      is a double"); | 
 |  2846  | 
 |  2847   /** | 
 |  2848    * Hint for the `x is! double` type checks. | 
 |  2849    */ | 
 |  2850   static const HintCode IS_NOT_DOUBLE = const HintCode('IS_NOT_DOUBLE', | 
 |  2851       "When compiled to JS, this test might return false when the left hand side
       is an int"); | 
 |  2852  | 
 |  2853   /** | 
 |  2854    * Hint for the `x is! int` type checks. | 
 |  2855    */ | 
 |  2856   static const HintCode IS_NOT_INT = const HintCode('IS_NOT_INT', | 
 |  2857       "When compiled to JS, this test might return false when the left hand side
       is a double"); | 
 |  2858  | 
 |  2859   /** | 
 |  2860    * Deferred libraries shouldn't define a top level function 'loadLibrary'. | 
 |  2861    */ | 
 |  2862   static const HintCode IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION = const HintC
      ode( | 
 |  2863       'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION', | 
 |  2864       "The library '{0}' defines a top-level function named 'loadLibrary' which 
      is hidden by deferring this library"); | 
 |  2865  | 
 |  2866   /** | 
 |  2867    * This hint is generated anywhere where the | 
 |  2868    * [StaticTypeWarningCode.INVALID_ASSIGNMENT] would have been generated, if we | 
 |  2869    * used propagated information for the warnings. | 
 |  2870    * | 
 |  2871    * Parameters: | 
 |  2872    * 0: the name of the right hand side type | 
 |  2873    * 1: the name of the left hand side type | 
 |  2874    */ | 
 |  2875   static const HintCode INVALID_ASSIGNMENT = const HintCode( | 
 |  2876       'INVALID_ASSIGNMENT', | 
 |  2877       "A value of type '{0}' cannot be assigned to a variable of type '{1}'"); | 
 |  2878  | 
 |  2879   /** | 
 |  2880    * Generate a hint for methods or functions that have a return type, but do | 
 |  2881    * not have a non-void return statement on all branches. At the end of methods | 
 |  2882    * or functions with no return, Dart implicitly returns `null`, avoiding these | 
 |  2883    * implicit returns is considered a best practice. | 
 |  2884    * | 
 |  2885    * Parameters: | 
 |  2886    * 0: the name of the declared return type | 
 |  2887    */ | 
 |  2888   static const HintCode MISSING_RETURN = const HintCode('MISSING_RETURN', | 
 |  2889       "This function declares a return type of '{0}', but does not end with a re
      turn statement", | 
 |  2890       "Either add a return statement or change the return type to 'void'"); | 
 |  2891  | 
 |  2892   /** | 
 |  2893    * A getter with the override annotation does not override an existing getter. | 
 |  2894    */ | 
 |  2895   static const HintCode OVERRIDE_ON_NON_OVERRIDING_GETTER = const HintCode( | 
 |  2896       'OVERRIDE_ON_NON_OVERRIDING_GETTER', | 
 |  2897       "Getter does not override an inherited getter"); | 
 |  2898  | 
 |  2899   /** | 
 |  2900    * A method with the override annotation does not override an existing method. | 
 |  2901    */ | 
 |  2902   static const HintCode OVERRIDE_ON_NON_OVERRIDING_METHOD = const HintCode( | 
 |  2903       'OVERRIDE_ON_NON_OVERRIDING_METHOD', | 
 |  2904       "Method does not override an inherited method"); | 
 |  2905  | 
 |  2906   /** | 
 |  2907    * A setter with the override annotation does not override an existing setter. | 
 |  2908    */ | 
 |  2909   static const HintCode OVERRIDE_ON_NON_OVERRIDING_SETTER = const HintCode( | 
 |  2910       'OVERRIDE_ON_NON_OVERRIDING_SETTER', | 
 |  2911       "Setter does not override an inherited setter"); | 
 |  2912  | 
 |  2913   /** | 
 |  2914    * Hint for classes that override equals, but not hashCode. | 
 |  2915    * | 
 |  2916    * Parameters: | 
 |  2917    * 0: the name of the current class | 
 |  2918    */ | 
 |  2919   static const HintCode OVERRIDE_EQUALS_BUT_NOT_HASH_CODE = const HintCode( | 
 |  2920       'OVERRIDE_EQUALS_BUT_NOT_HASH_CODE', | 
 |  2921       "The class '{0}' overrides 'operator==', but not 'get hashCode'"); | 
 |  2922  | 
 |  2923   /** | 
 |  2924    * Type checks of the type `x is! Null` should be done with `x != null`. | 
 |  2925    */ | 
 |  2926   static const HintCode TYPE_CHECK_IS_NOT_NULL = const HintCode( | 
 |  2927       'TYPE_CHECK_IS_NOT_NULL', | 
 |  2928       "Tests for non-null should be done with '!= null'"); | 
 |  2929  | 
 |  2930   /** | 
 |  2931    * Type checks of the type `x is Null` should be done with `x == null`. | 
 |  2932    */ | 
 |  2933   static const HintCode TYPE_CHECK_IS_NULL = const HintCode( | 
 |  2934       'TYPE_CHECK_IS_NULL', "Tests for null should be done with '== null'"); | 
 |  2935  | 
 |  2936   /** | 
 |  2937    * This hint is generated anywhere where the | 
 |  2938    * [StaticTypeWarningCode.UNDEFINED_GETTER] or | 
 |  2939    * [StaticWarningCode.UNDEFINED_GETTER] would have been generated, if we used | 
 |  2940    * propagated information for the warnings. | 
 |  2941    * | 
 |  2942    * Parameters: | 
 |  2943    * 0: the name of the getter | 
 |  2944    * 1: the name of the enclosing type where the getter is being looked for | 
 |  2945    */ | 
 |  2946   static const HintCode UNDEFINED_GETTER = const HintCode('UNDEFINED_GETTER', | 
 |  2947       "The getter '{0}' is not defined for the class '{1}'"); | 
 |  2948  | 
 |  2949   /** | 
 |  2950    * This hint is generated anywhere where the | 
 |  2951    * [StaticTypeWarningCode.UNDEFINED_METHOD] would have been generated, if we | 
 |  2952    * used propagated information for the warnings. | 
 |  2953    * | 
 |  2954    * Parameters: | 
 |  2955    * 0: the name of the method that is undefined | 
 |  2956    * 1: the resolved type name that the method lookup is happening on | 
 |  2957    */ | 
 |  2958   static const HintCode UNDEFINED_METHOD = const HintCode('UNDEFINED_METHOD', | 
 |  2959       "The method '{0}' is not defined for the class '{1}'"); | 
 |  2960  | 
 |  2961   /** | 
 |  2962    * This hint is generated anywhere where the | 
 |  2963    * [StaticTypeWarningCode.UNDEFINED_OPERATOR] would have been generated, if we | 
 |  2964    * used propagated information for the warnings. | 
 |  2965    * | 
 |  2966    * Parameters: | 
 |  2967    * 0: the name of the operator | 
 |  2968    * 1: the name of the enclosing type where the operator is being looked for | 
 |  2969    */ | 
 |  2970   static const HintCode UNDEFINED_OPERATOR = const HintCode( | 
 |  2971       'UNDEFINED_OPERATOR', | 
 |  2972       "The operator '{0}' is not defined for the class '{1}'"); | 
 |  2973  | 
 |  2974   /** | 
 |  2975    * This hint is generated anywhere where the | 
 |  2976    * [StaticTypeWarningCode.UNDEFINED_SETTER] or | 
 |  2977    * [StaticWarningCode.UNDEFINED_SETTER] would have been generated, if we used | 
 |  2978    * propagated information for the warnings. | 
 |  2979    * | 
 |  2980    * Parameters: | 
 |  2981    * 0: the name of the setter | 
 |  2982    * 1: the name of the enclosing type where the setter is being looked for | 
 |  2983    */ | 
 |  2984   static const HintCode UNDEFINED_SETTER = const HintCode('UNDEFINED_SETTER', | 
 |  2985       "The setter '{0}' is not defined for the class '{1}'"); | 
 |  2986  | 
 |  2987   /** | 
 |  2988    * Unnecessary cast. | 
 |  2989    */ | 
 |  2990   static const HintCode UNNECESSARY_CAST = | 
 |  2991       const HintCode('UNNECESSARY_CAST', "Unnecessary cast"); | 
 |  2992  | 
 |  2993   /** | 
 |  2994    * Unnecessary type checks, the result is always true. | 
 |  2995    */ | 
 |  2996   static const HintCode UNNECESSARY_TYPE_CHECK_FALSE = const HintCode( | 
 |  2997       'UNNECESSARY_TYPE_CHECK_FALSE', | 
 |  2998       "Unnecessary type check, the result is always false"); | 
 |  2999  | 
 |  3000   /** | 
 |  3001    * Unnecessary type checks, the result is always false. | 
 |  3002    */ | 
 |  3003   static const HintCode UNNECESSARY_TYPE_CHECK_TRUE = const HintCode( | 
 |  3004       'UNNECESSARY_TYPE_CHECK_TRUE', | 
 |  3005       "Unnecessary type check, the result is always true"); | 
 |  3006  | 
 |  3007   /** | 
 |  3008    * See [Modifier.IS_USED_IN_LIBRARY]. | 
 |  3009    */ | 
 |  3010   static const HintCode UNUSED_ELEMENT = | 
 |  3011       const HintCode('UNUSED_ELEMENT', "The {0} '{1}' is not used"); | 
 |  3012  | 
 |  3013   /** | 
 |  3014    * Unused fields are fields which are never read. | 
 |  3015    */ | 
 |  3016   static const HintCode UNUSED_FIELD = const HintCode( | 
 |  3017       'UNUSED_FIELD', "The value of the field '{0}' is not used"); | 
 |  3018  | 
 |  3019   /** | 
 |  3020    * Unused imports are imports which are never used. | 
 |  3021    */ | 
 |  3022   static const HintCode UNUSED_IMPORT = | 
 |  3023       const HintCode('UNUSED_IMPORT', "Unused import"); | 
 |  3024  | 
 |  3025   /** | 
 |  3026    * Unused catch exception variables. | 
 |  3027    */ | 
 |  3028   static const HintCode UNUSED_CATCH_CLAUSE = const HintCode( | 
 |  3029       'UNUSED_CATCH_CLAUSE', | 
 |  3030       "The exception variable '{0}' is not used, so the 'catch' clause can be re
      moved"); | 
 |  3031  | 
 |  3032   /** | 
 |  3033    * Unused catch stack trace variables. | 
 |  3034    */ | 
 |  3035   static const HintCode UNUSED_CATCH_STACK = const HintCode( | 
 |  3036       'UNUSED_CATCH_STACK', | 
 |  3037       "The stack trace variable '{0}' is not used and can be removed"); | 
 |  3038  | 
 |  3039   /** | 
 |  3040    * Unused local variables are local varaibles which are never read. | 
 |  3041    */ | 
 |  3042   static const HintCode UNUSED_LOCAL_VARIABLE = const HintCode( | 
 |  3043       'UNUSED_LOCAL_VARIABLE', | 
 |  3044       "The value of the local variable '{0}' is not used"); | 
 |  3045  | 
 |  3046   /** | 
 |  3047    * Hint for cases where the source expects a method or function to return a | 
 |  3048    * non-void result, but the method or function signature returns void. | 
 |  3049    * | 
 |  3050    * Parameters: | 
 |  3051    * 0: the name of the method or function that returns void | 
 |  3052    */ | 
 |  3053   static const HintCode USE_OF_VOID_RESULT = const HintCode( | 
 |  3054       'USE_OF_VOID_RESULT', | 
 |  3055       "The result of '{0}' is being used, even though it is declared to be 'void
      '"); | 
 |  3056  | 
 |  3057   /** | 
 |  3058    * It is a bad practice for a source file in a package "lib" directory | 
 |  3059    * hierarchy to traverse outside that directory hierarchy. For example, a | 
 |  3060    * source file in the "lib" directory should not contain a directive such as | 
 |  3061    * `import '../web/some.dart'` which references a file outside the lib | 
 |  3062    * directory. | 
 |  3063    */ | 
 |  3064   static const HintCode FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE = | 
 |  3065       const HintCode('FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE', | 
 |  3066           "A file in the 'lib' directory hierarchy should not reference a file o
      utside that hierarchy"); | 
 |  3067  | 
 |  3068   /** | 
 |  3069    * It is a bad practice for a source file ouside a package "lib" directory | 
 |  3070    * hierarchy to traverse into that directory hierarchy. For example, a source | 
 |  3071    * file in the "web" directory should not contain a directive such as | 
 |  3072    * `import '../lib/some.dart'` which references a file inside the lib | 
 |  3073    * directory. | 
 |  3074    */ | 
 |  3075   static const HintCode FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE = | 
 |  3076       const HintCode('FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE', | 
 |  3077           "A file outside the 'lib' directory hierarchy should not reference a f
      ile inside that hierarchy. Use a package: reference instead."); | 
 |  3078  | 
 |  3079   /** | 
 |  3080    * It is a bad practice for a package import to reference anything outside the | 
 |  3081    * given package, or more generally, it is bad practice for a package import | 
 |  3082    * to contain a "..". For example, a source file should not contain a | 
 |  3083    * directive such as `import 'package:foo/../some.dart'`. | 
 |  3084    */ | 
 |  3085   static const HintCode PACKAGE_IMPORT_CONTAINS_DOT_DOT = const HintCode( | 
 |  3086       'PACKAGE_IMPORT_CONTAINS_DOT_DOT', | 
 |  3087       "A package import should not contain '..'"); | 
 |  3088  | 
 |  3089   /** | 
 |  3090    * Initialize a newly created error code to have the given [name]. The message | 
 |  3091    * associated with the error will be created from the given [message] | 
 |  3092    * template. The correction associated with the error will be created from the | 
 |  3093    * given [correction] template. | 
 |  3094    */ | 
 |  3095   const HintCode(String name, String message, [String correction]) | 
 |  3096       : super(name, message, correction); | 
 |  3097  | 
 |  3098   @override | 
 |  3099   ErrorSeverity get errorSeverity => ErrorType.HINT.severity; | 
 |  3100  | 
 |  3101   @override | 
 |  3102   ErrorType get type => ErrorType.HINT; | 
 |  3103 } | 
 |  3104  | 
 |  3105 /** | 
 |  3106  * The error codes used for errors in HTML files. The convention for this | 
 |  3107  * class is for the name of the error code to indicate the problem that caused | 
 |  3108  * the error to be generated and for the error message to explain what is wrong | 
 |  3109  * and, when appropriate, how the problem can be corrected. | 
 |  3110  */ | 
 |  3111 class HtmlErrorCode extends ErrorCode { | 
 |  3112   /** | 
 |  3113    * An error code indicating that there is a syntactic error in the file. | 
 |  3114    * | 
 |  3115    * Parameters: | 
 |  3116    * 0: the error message from the parse error | 
 |  3117    */ | 
 |  3118   static const HtmlErrorCode PARSE_ERROR = | 
 |  3119       const HtmlErrorCode('PARSE_ERROR', '{0}'); | 
 |  3120  | 
 |  3121   /** | 
 |  3122    * Initialize a newly created error code to have the given [name]. The message | 
 |  3123    * associated with the error will be created from the given [message] | 
 |  3124    * template. The correction associated with the error will be created from the | 
 |  3125    * given [correction] template. | 
 |  3126    */ | 
 |  3127   const HtmlErrorCode(String name, String message, [String correction]) | 
 |  3128       : super(name, message, correction); | 
 |  3129  | 
 |  3130   @override | 
 |  3131   ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; | 
 |  3132  | 
 |  3133   @override | 
 |  3134   ErrorType get type => ErrorType.COMPILE_TIME_ERROR; | 
 |  3135 } | 
 |  3136  | 
 |  3137 /** | 
 |  3138  * The error codes used for warnings in HTML files. The convention for this | 
 |  3139  * class is for the name of the error code to indicate the problem that caused | 
 |  3140  * the error to be generated and for the error message to explain what is wrong | 
 |  3141  * and, when appropriate, how the problem can be corrected. | 
 |  3142  */ | 
 |  3143 class HtmlWarningCode extends ErrorCode { | 
 |  3144   /** | 
 |  3145    * An error code indicating that the value of the 'src' attribute of a Dart | 
 |  3146    * script tag is not a valid URI. | 
 |  3147    * | 
 |  3148    * Parameters: | 
 |  3149    * 0: the URI that is invalid | 
 |  3150    */ | 
 |  3151   static const HtmlWarningCode INVALID_URI = | 
 |  3152       const HtmlWarningCode('INVALID_URI', "Invalid URI syntax: '{0}'"); | 
 |  3153  | 
 |  3154   /** | 
 |  3155    * An error code indicating that the value of the 'src' attribute of a Dart | 
 |  3156    * script tag references a file that does not exist. | 
 |  3157    * | 
 |  3158    * Parameters: | 
 |  3159    * 0: the URI pointing to a non-existent file | 
 |  3160    */ | 
 |  3161   static const HtmlWarningCode URI_DOES_NOT_EXIST = const HtmlWarningCode( | 
 |  3162       'URI_DOES_NOT_EXIST', "Target of URI does not exist: '{0}'"); | 
 |  3163  | 
 |  3164   /** | 
 |  3165    * Initialize a newly created error code to have the given [name]. The message | 
 |  3166    * associated with the error will be created from the given [message] | 
 |  3167    * template. The correction associated with the error will be created from the | 
 |  3168    * given [correction] template. | 
 |  3169    */ | 
 |  3170   const HtmlWarningCode(String name, String message, [String correction]) | 
 |  3171       : super(name, message, correction); | 
 |  3172  | 
 |  3173   @override | 
 |  3174   ErrorSeverity get errorSeverity => ErrorSeverity.WARNING; | 
 |  3175  | 
 |  3176   @override | 
 |  3177   ErrorType get type => ErrorType.STATIC_WARNING; | 
 |  3178 } | 
 |  3179  | 
 |  3180 /** | 
 |  3181  * Defines style and best practice recommendations. | 
 |  3182  * | 
 |  3183  * Unlike [HintCode]s, which are akin to traditional static warnings from a | 
 |  3184  * compiler, lint recommendations focus on matters of style and practices that | 
 |  3185  * might aggregated to define a project's style guide. | 
 |  3186  */ | 
 |  3187 class LintCode extends ErrorCode { | 
 |  3188   const LintCode(String name, String message, [String correction]) | 
 |  3189       : super(name, message, correction); | 
 |  3190  | 
 |  3191   @override | 
 |  3192   ErrorSeverity get errorSeverity => ErrorSeverity.INFO; | 
 |  3193  | 
 |  3194   @override | 
 |  3195   ErrorType get type => ErrorType.LINT; | 
 |  3196 } | 
 |  3197  | 
 |  3198 /** | 
 |  3199  * The error codes used for static type warnings. The convention for this class | 
 |  3200  * is for the name of the error code to indicate the problem that caused the | 
 |  3201  * error to be generated and for the error message to explain what is wrong and, | 
 |  3202  * when appropriate, how the problem can be corrected. | 
 |  3203  */ | 
 |  3204 class StaticTypeWarningCode extends ErrorCode { | 
 |  3205   /** | 
 |  3206    * 12.7 Lists: A fresh instance (7.6.1) <i>a</i>, of size <i>n</i>, whose | 
 |  3207    * class implements the built-in class <i>List<E></i> is allocated. | 
 |  3208    * | 
 |  3209    * Parameters: | 
 |  3210    * 0: the number of provided type arguments | 
 |  3211    */ | 
 |  3212   static const StaticTypeWarningCode EXPECTED_ONE_LIST_TYPE_ARGUMENTS = | 
 |  3213       const StaticTypeWarningCode('EXPECTED_ONE_LIST_TYPE_ARGUMENTS', | 
 |  3214           "List literal requires exactly one type arguments or none, but {0} fou
      nd"); | 
 |  3215  | 
 |  3216   /** | 
 |  3217    * 12.8 Maps: A fresh instance (7.6.1) <i>m</i>, of size <i>n</i>, whose class | 
 |  3218    * implements the built-in class <i>Map<K, V></i> is allocated. | 
 |  3219    * | 
 |  3220    * Parameters: | 
 |  3221    * 0: the number of provided type arguments | 
 |  3222    */ | 
 |  3223   static const StaticTypeWarningCode EXPECTED_TWO_MAP_TYPE_ARGUMENTS = | 
 |  3224       const StaticTypeWarningCode('EXPECTED_TWO_MAP_TYPE_ARGUMENTS', | 
 |  3225           "Map literal requires exactly two type arguments or none, but {0} foun
      d"); | 
 |  3226  | 
 |  3227   /** | 
 |  3228    * 9 Functions: It is a static warning if the declared return type of a | 
 |  3229    * function marked async* may not be assigned to Stream. | 
 |  3230    */ | 
 |  3231   static const StaticTypeWarningCode ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE = | 
 |  3232       const StaticTypeWarningCode('ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE', | 
 |  3233           "Functions marked 'async*' must have a return type assignable to 'Stre
      am'"); | 
 |  3234  | 
 |  3235   /** | 
 |  3236    * 9 Functions: It is a static warning if the declared return type of a | 
 |  3237    * function marked async may not be assigned to Future. | 
 |  3238    */ | 
 |  3239   static const StaticTypeWarningCode ILLEGAL_ASYNC_RETURN_TYPE = | 
 |  3240       const StaticTypeWarningCode('ILLEGAL_ASYNC_RETURN_TYPE', | 
 |  3241           "Functions marked 'async' must have a return type assignable to 'Futur
      e'"); | 
 |  3242  | 
 |  3243   /** | 
 |  3244    * 9 Functions: It is a static warning if the declared return type of a | 
 |  3245    * function marked sync* may not be assigned to Iterable. | 
 |  3246    */ | 
 |  3247   static const StaticTypeWarningCode ILLEGAL_SYNC_GENERATOR_RETURN_TYPE = | 
 |  3248       const StaticTypeWarningCode('ILLEGAL_SYNC_GENERATOR_RETURN_TYPE', | 
 |  3249           "Functions marked 'sync*' must have a return type assignable to 'Itera
      ble'"); | 
 |  3250  | 
 |  3251   /** | 
 |  3252    * 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i>. | 
 |  3253    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3254    * instance setter named <i>v=</i>. | 
 |  3255    * | 
 |  3256    * See [UNDEFINED_SETTER]. | 
 |  3257    */ | 
 |  3258   static const StaticTypeWarningCode INACCESSIBLE_SETTER = | 
 |  3259       const StaticTypeWarningCode('INACCESSIBLE_SETTER', ""); | 
 |  3260  | 
 |  3261   /** | 
 |  3262    * 8.1.1 Inheritance and Overriding: However, if the above rules would cause | 
 |  3263    * multiple members <i>m<sub>1</sub>, …, m<sub>k</sub></i> with the | 
 |  3264    * same name <i>n</i> that would be inherited (because identically named | 
 |  3265    * members existed in several superinterfaces) then at most one member is | 
 |  3266    * inherited. | 
 |  3267    * | 
 |  3268    * If the static types <i>T<sub>1</sub>, …, T<sub>k</sub></i> of the | 
 |  3269    * members <i>m<sub>1</sub>, …, m<sub>k</sub></i> are not identical, | 
 |  3270    * then there must be a member <i>m<sub>x</sub></i> such that <i>T<sub>x</sub> | 
 |  3271    * <: T<sub>i</sub>, 1 <= x <= k</i> for all <i>i, 1 <= i <= | 
 |  3272    * k</i>, or a static type warning occurs. The member that is inherited is | 
 |  3273    * <i>m<sub>x</sub></i>, if it exists; otherwise: | 
 |  3274    * * Let <i>numberOfPositionals</i>(<i>f</i>) denote the number of positional | 
 |  3275    *   parameters of a function <i>f</i>, and let | 
 |  3276    *   <i>numberOfRequiredParams</i>(<i>f</i>) denote the number of required | 
 |  3277    *   parameters of a function <i>f</i>. Furthermore, let <i>s</i> denote the | 
 |  3278    *   set of all named parameters of the <i>m<sub>1</sub>, …, | 
 |  3279    *   m<sub>k</sub></i>. Then let | 
 |  3280    * * <i>h = max(numberOfPositionals(m<sub>i</sub>)),</i> | 
 |  3281    * * <i>r = min(numberOfRequiredParams(m<sub>i</sub>)), for all <i>i</i>, 1 <= | 
 |  3282    *   i <= k.</i> If <i>r <= h</i> then <i>I</i> has a method named <i>n</i>, | 
 |  3283    *   with <i>r</i> required parameters of type <b>dynamic</b>, <i>h</i> | 
 |  3284    *   positional parameters of type <b>dynamic</b>, named parameters <i>s</i> | 
 |  3285    *   of type <b>dynamic</b> and return type <b>dynamic</b>. | 
 |  3286    * * Otherwise none of the members <i>m<sub>1</sub>, …, | 
 |  3287    *   m<sub>k</sub></i> is inherited. | 
 |  3288    */ | 
 |  3289   static const StaticTypeWarningCode INCONSISTENT_METHOD_INHERITANCE = | 
 |  3290       const StaticTypeWarningCode('INCONSISTENT_METHOD_INHERITANCE', | 
 |  3291           "'{0}' is inherited by at least two interfaces inconsistently, from {1
      }"); | 
 |  3292  | 
 |  3293   /** | 
 |  3294    * 12.15.1 Ordinary Invocation: It is a static type warning if <i>T</i> does | 
 |  3295    * not have an accessible (3.2) instance member named <i>m</i>. | 
 |  3296    * | 
 |  3297    * Parameters: | 
 |  3298    * 0: the name of the static member | 
 |  3299    * | 
 |  3300    * See [UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]. | 
 |  3301    */ | 
 |  3302   static const StaticTypeWarningCode INSTANCE_ACCESS_TO_STATIC_MEMBER = | 
 |  3303       const StaticTypeWarningCode('INSTANCE_ACCESS_TO_STATIC_MEMBER', | 
 |  3304           "Static member '{0}' cannot be accessed using instance access"); | 
 |  3305  | 
 |  3306   /** | 
 |  3307    * 12.18 Assignment: It is a static type warning if the static type of | 
 |  3308    * <i>e</i> may not be assigned to the static type of <i>v</i>. The static | 
 |  3309    * type of the expression <i>v = e</i> is the static type of <i>e</i>. | 
 |  3310    * | 
 |  3311    * 12.18 Assignment: It is a static type warning if the static type of | 
 |  3312    * <i>e</i> may not be assigned to the static type of <i>C.v</i>. The static | 
 |  3313    * type of the expression <i>C.v = e</i> is the static type of <i>e</i>. | 
 |  3314    * | 
 |  3315    * 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i>. | 
 |  3316    * It is a static type warning if the static type of <i>e<sub>2</sub></i> may | 
 |  3317    * not be assigned to <i>T</i>. | 
 |  3318    * | 
 |  3319    * Parameters: | 
 |  3320    * 0: the name of the right hand side type | 
 |  3321    * 1: the name of the left hand side type | 
 |  3322    */ | 
 |  3323   static const StaticTypeWarningCode INVALID_ASSIGNMENT = | 
 |  3324       const StaticTypeWarningCode('INVALID_ASSIGNMENT', | 
 |  3325           "A value of type '{0}' cannot be assigned to a variable of type '{1}'"
      ); | 
 |  3326  | 
 |  3327   /** | 
 |  3328    * 12.15.1 Ordinary Invocation: An ordinary method invocation <i>i</i> has the | 
 |  3329    * form <i>o.m(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  3330    * a<sub>n+1</sub>, … x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. | 
 |  3331    * | 
 |  3332    * Let <i>T</i> be the static type of <i>o</i>. It is a static type warning if | 
 |  3333    * <i>T</i> does not have an accessible instance member named <i>m</i>. If | 
 |  3334    * <i>T.m</i> exists, it is a static warning if the type <i>F</i> of | 
 |  3335    * <i>T.m</i> may not be assigned to a function type. If <i>T.m</i> does not | 
 |  3336    * exist, or if <i>F</i> is not a function type, the static type of <i>i</i> | 
 |  3337    * is dynamic. | 
 |  3338    * | 
 |  3339    * 12.15.3 Static Invocation: It is a static type warning if the type <i>F</i> | 
 |  3340    * of <i>C.m</i> may not be assigned to a function type. | 
 |  3341    * | 
 |  3342    * 12.15.4 Super Invocation: A super method invocation <i>i</i> has the form | 
 |  3343    * <i>super.m(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  3344    * a<sub>n+1</sub>, … x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. If | 
 |  3345    * <i>S.m</i> exists, it is a static warning if the type <i>F</i> of | 
 |  3346    * <i>S.m</i> may not be assigned to a function type. | 
 |  3347    * | 
 |  3348    * Parameters: | 
 |  3349    * 0: the name of the identifier that is not a function type | 
 |  3350    */ | 
 |  3351   static const StaticTypeWarningCode INVOCATION_OF_NON_FUNCTION = | 
 |  3352       const StaticTypeWarningCode( | 
 |  3353           'INVOCATION_OF_NON_FUNCTION', "'{0}' is not a method"); | 
 |  3354  | 
 |  3355   /** | 
 |  3356    * 12.14.4 Function Expression Invocation: A function expression invocation | 
 |  3357    * <i>i</i> has the form <i>e<sub>f</sub>(a<sub>1</sub>, …, | 
 |  3358    * a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …, x<sub>n+k</sub>: | 
 |  3359    * a<sub>n+k</sub>)</i>, where <i>e<sub>f</sub></i> is an expression. | 
 |  3360    * | 
 |  3361    * It is a static type warning if the static type <i>F</i> of | 
 |  3362    * <i>e<sub>f</sub></i> may not be assigned to a function type. | 
 |  3363    */ | 
 |  3364   static const StaticTypeWarningCode INVOCATION_OF_NON_FUNCTION_EXPRESSION = | 
 |  3365       const StaticTypeWarningCode('INVOCATION_OF_NON_FUNCTION_EXPRESSION', | 
 |  3366           "Cannot invoke a non-function"); | 
 |  3367  | 
 |  3368   /** | 
 |  3369    * 12.20 Conditional: It is a static type warning if the type of | 
 |  3370    * <i>e<sub>1</sub></i> may not be assigned to bool. | 
 |  3371    * | 
 |  3372    * 13.5 If: It is a static type warning if the type of the expression <i>b</i> | 
 |  3373    * may not be assigned to bool. | 
 |  3374    * | 
 |  3375    * 13.7 While: It is a static type warning if the type of <i>e</i> may not be | 
 |  3376    * assigned to bool. | 
 |  3377    * | 
 |  3378    * 13.8 Do: It is a static type warning if the type of <i>e</i> cannot be | 
 |  3379    * assigned to bool. | 
 |  3380    */ | 
 |  3381   static const StaticTypeWarningCode NON_BOOL_CONDITION = | 
 |  3382       const StaticTypeWarningCode( | 
 |  3383           'NON_BOOL_CONDITION', "Conditions must have a static type of 'bool'"); | 
 |  3384  | 
 |  3385   /** | 
 |  3386    * 13.15 Assert: It is a static type warning if the type of <i>e</i> may not | 
 |  3387    * be assigned to either bool or () → bool | 
 |  3388    */ | 
 |  3389   static const StaticTypeWarningCode NON_BOOL_EXPRESSION = | 
 |  3390       const StaticTypeWarningCode('NON_BOOL_EXPRESSION', | 
 |  3391           "Assertions must be on either a 'bool' or '() -> bool'"); | 
 |  3392  | 
 |  3393   /** | 
 |  3394    * 12.28 Unary Expressions: The expression !<i>e</i> is equivalent to the | 
 |  3395    * expression <i>e</i>?<b>false<b> : <b>true</b>. | 
 |  3396    * | 
 |  3397    * 12.20 Conditional: It is a static type warning if the type of | 
 |  3398    * <i>e<sub>1</sub></i> may not be assigned to bool. | 
 |  3399    */ | 
 |  3400   static const StaticTypeWarningCode NON_BOOL_NEGATION_EXPRESSION = | 
 |  3401       const StaticTypeWarningCode('NON_BOOL_NEGATION_EXPRESSION', | 
 |  3402           "Negation argument must have a static type of 'bool'"); | 
 |  3403  | 
 |  3404   /** | 
 |  3405    * 12.21 Logical Boolean Expressions: It is a static type warning if the | 
 |  3406    * static types of both of <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> may | 
 |  3407    * not be assigned to bool. | 
 |  3408    * | 
 |  3409    * Parameters: | 
 |  3410    * 0: the lexeme of the logical operator | 
 |  3411    */ | 
 |  3412   static const StaticTypeWarningCode NON_BOOL_OPERAND = | 
 |  3413       const StaticTypeWarningCode('NON_BOOL_OPERAND', | 
 |  3414           "The operands of the '{0}' operator must be assignable to 'bool'"); | 
 |  3415  | 
 |  3416   /** | 
 |  3417    * 15.8 Parameterized Types: It is a static type warning if <i>A<sub>i</sub>, | 
 |  3418    * 1 <= i <= n</i> does not denote a type in the enclosing lexical scope
      . | 
 |  3419    */ | 
 |  3420   static const StaticTypeWarningCode NON_TYPE_AS_TYPE_ARGUMENT = | 
 |  3421       const StaticTypeWarningCode('NON_TYPE_AS_TYPE_ARGUMENT', | 
 |  3422           "The name '{0}' is not a type and cannot be used as a parameterized ty
      pe"); | 
 |  3423  | 
 |  3424   /** | 
 |  3425    * 13.11 Return: It is a static type warning if the type of <i>e</i> may not | 
 |  3426    * be assigned to the declared return type of the immediately enclosing | 
 |  3427    * function. | 
 |  3428    * | 
 |  3429    * Parameters: | 
 |  3430    * 0: the return type as declared in the return statement | 
 |  3431    * 1: the expected return type as defined by the method | 
 |  3432    * 2: the name of the method | 
 |  3433    */ | 
 |  3434   static const StaticTypeWarningCode RETURN_OF_INVALID_TYPE = | 
 |  3435       const StaticTypeWarningCode('RETURN_OF_INVALID_TYPE', | 
 |  3436           "The return type '{0}' is not a '{1}', as defined by the method '{2}'"
      ); | 
 |  3437  | 
 |  3438   /** | 
 |  3439    * 12.11 Instance Creation: It is a static type warning if any of the type | 
 |  3440    * arguments to a constructor of a generic type <i>G</i> invoked by a new | 
 |  3441    * expression or a constant object expression are not subtypes of the bounds | 
 |  3442    * of the corresponding formal type parameters of <i>G</i>. | 
 |  3443    * | 
 |  3444    * 15.8 Parameterized Types: If <i>S</i> is the static type of a member | 
 |  3445    * <i>m</i> of <i>G</i>, then the static type of the member <i>m</i> of | 
 |  3446    * <i>G<A<sub>1</sub>, …, A<sub>n</sub>></i> is <i>[A<sub>1</sub>
      , | 
 |  3447    * …, A<sub>n</sub>/T<sub>1</sub>, …, T<sub>n</sub>]S</i> where | 
 |  3448    * <i>T<sub>1</sub>, …, T<sub>n</sub></i> are the formal type | 
 |  3449    * parameters of <i>G</i>. Let <i>B<sub>i</sub></i> be the bounds of | 
 |  3450    * <i>T<sub>i</sub>, 1 <= i <= n</i>. It is a static type warning if | 
 |  3451    * <i>A<sub>i</sub></i> is not a subtype of <i>[A<sub>1</sub>, …, | 
 |  3452    * A<sub>n</sub>/T<sub>1</sub>, …, T<sub>n</sub>]B<sub>i</sub>, 1 <= | 
 |  3453    * i <= n</i>. | 
 |  3454    * | 
 |  3455    * 7.6.2 Factories: It is a static type warning if any of the type arguments | 
 |  3456    * to <i>k'</i> are not subtypes of the bounds of the corresponding formal | 
 |  3457    * type parameters of type. | 
 |  3458    * | 
 |  3459    * Parameters: | 
 |  3460    * 0: the name of the type used in the instance creation that should be | 
 |  3461    *    limited by the bound as specified in the class declaration | 
 |  3462    * 1: the name of the bounding type | 
 |  3463    * | 
 |  3464    * See [TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND]. | 
 |  3465    */ | 
 |  3466   static const StaticTypeWarningCode TYPE_ARGUMENT_NOT_MATCHING_BOUNDS = | 
 |  3467       const StaticTypeWarningCode( | 
 |  3468           'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS', "'{0}' does not extend '{1}'"); | 
 |  3469  | 
 |  3470   /** | 
 |  3471    * 10 Generics: It is a static type warning if a type parameter is a supertype | 
 |  3472    * of its upper bound. | 
 |  3473    * | 
 |  3474    * Parameters: | 
 |  3475    * 0: the name of the type parameter | 
 |  3476    * | 
 |  3477    * See [TYPE_ARGUMENT_NOT_MATCHING_BOUNDS]. | 
 |  3478    */ | 
 |  3479   static const StaticTypeWarningCode TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND = | 
 |  3480       const StaticTypeWarningCode('TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND', | 
 |  3481           "'{0}' cannot be a supertype of its upper bound"); | 
 |  3482  | 
 |  3483   /** | 
 |  3484    * 12.17 Getter Invocation: It is a static warning if there is no class | 
 |  3485    * <i>C</i> in the enclosing lexical scope of <i>i</i>, or if <i>C</i> does | 
 |  3486    * not declare, implicitly or explicitly, a getter named <i>m</i>. | 
 |  3487    * | 
 |  3488    * Parameters: | 
 |  3489    * 0: the name of the enumeration constant that is not defined | 
 |  3490    * 1: the name of the enumeration used to access the constant | 
 |  3491    */ | 
 |  3492   static const StaticTypeWarningCode UNDEFINED_ENUM_CONSTANT = | 
 |  3493       const StaticTypeWarningCode('UNDEFINED_ENUM_CONSTANT', | 
 |  3494           "There is no constant named '{0}' in '{1}'"); | 
 |  3495  | 
 |  3496   /** | 
 |  3497    * 12.15.3 Unqualified Invocation: If there exists a lexically visible | 
 |  3498    * declaration named <i>id</i>, let <i>f<sub>id</sub></i> be the innermost | 
 |  3499    * such declaration. Then: [skip]. Otherwise, <i>f<sub>id</sub></i> is | 
 |  3500    * considered equivalent to the ordinary method invocation | 
 |  3501    * <b>this</b>.<i>id</i>(<i>a<sub>1</sub></i>, ..., <i>a<sub>n</sub></i>, | 
 |  3502    * <i>x<sub>n+1</sub></i> : <i>a<sub>n+1</sub></i>, ..., | 
 |  3503    * <i>x<sub>n+k</sub></i> : <i>a<sub>n+k</sub></i>). | 
 |  3504    * | 
 |  3505    * Parameters: | 
 |  3506    * 0: the name of the method that is undefined | 
 |  3507    */ | 
 |  3508   static const StaticTypeWarningCode UNDEFINED_FUNCTION = | 
 |  3509       const StaticTypeWarningCode( | 
 |  3510           'UNDEFINED_FUNCTION', "The function '{0}' is not defined"); | 
 |  3511  | 
 |  3512   /** | 
 |  3513    * 12.17 Getter Invocation: Let <i>T</i> be the static type of <i>e</i>. It is | 
 |  3514    * a static type warning if <i>T</i> does not have a getter named <i>m</i>. | 
 |  3515    * | 
 |  3516    * Parameters: | 
 |  3517    * 0: the name of the getter | 
 |  3518    * 1: the name of the enclosing type where the getter is being looked for | 
 |  3519    */ | 
 |  3520   static const StaticTypeWarningCode UNDEFINED_GETTER = | 
 |  3521       const StaticTypeWarningCode('UNDEFINED_GETTER', | 
 |  3522           "The getter '{0}' is not defined for the class '{1}'"); | 
 |  3523  | 
 |  3524   /** | 
 |  3525    * 12.15.1 Ordinary Invocation: Let <i>T</i> be the static type of <i>o</i>. | 
 |  3526    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3527    * instance member named <i>m</i>. | 
 |  3528    * | 
 |  3529    * Parameters: | 
 |  3530    * 0: the name of the method that is undefined | 
 |  3531    * 1: the resolved type name that the method lookup is happening on | 
 |  3532    */ | 
 |  3533   static const StaticTypeWarningCode UNDEFINED_METHOD = | 
 |  3534       const StaticTypeWarningCode('UNDEFINED_METHOD', | 
 |  3535           "The method '{0}' is not defined for the class '{1}'"); | 
 |  3536  | 
 |  3537   /** | 
 |  3538    * 12.18 Assignment: Evaluation of an assignment of the form | 
 |  3539    * <i>e<sub>1</sub></i>[<i>e<sub>2</sub></i>] = <i>e<sub>3</sub></i> is | 
 |  3540    * equivalent to the evaluation of the expression (a, i, e){a.[]=(i, e); | 
 |  3541    * return e;} (<i>e<sub>1</sub></i>, <i>e<sub>2</sub></i>, | 
 |  3542    * <i>e<sub>2</sub></i>). | 
 |  3543    * | 
 |  3544    * 12.29 Assignable Expressions: An assignable expression of the form | 
 |  3545    * <i>e<sub>1</sub></i>[<i>e<sub>2</sub></i>] is evaluated as a method | 
 |  3546    * invocation of the operator method [] on <i>e<sub>1</sub></i> with argument | 
 |  3547    * <i>e<sub>2</sub></i>. | 
 |  3548    * | 
 |  3549    * 12.15.1 Ordinary Invocation: Let <i>T</i> be the static type of <i>o</i>. | 
 |  3550    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3551    * instance member named <i>m</i>. | 
 |  3552    * | 
 |  3553    * Parameters: | 
 |  3554    * 0: the name of the operator | 
 |  3555    * 1: the name of the enclosing type where the operator is being looked for | 
 |  3556    */ | 
 |  3557   static const StaticTypeWarningCode UNDEFINED_OPERATOR = | 
 |  3558       const StaticTypeWarningCode('UNDEFINED_OPERATOR', | 
 |  3559           "The operator '{0}' is not defined for the class '{1}'"); | 
 |  3560  | 
 |  3561   /** | 
 |  3562    * 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i>. | 
 |  3563    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3564    * instance setter named <i>v=</i>. | 
 |  3565    * | 
 |  3566    * Parameters: | 
 |  3567    * 0: the name of the setter | 
 |  3568    * 1: the name of the enclosing type where the setter is being looked for | 
 |  3569    * | 
 |  3570    * See [INACCESSIBLE_SETTER]. | 
 |  3571    */ | 
 |  3572   static const StaticTypeWarningCode UNDEFINED_SETTER = | 
 |  3573       const StaticTypeWarningCode('UNDEFINED_SETTER', | 
 |  3574           "The setter '{0}' is not defined for the class '{1}'"); | 
 |  3575  | 
 |  3576   /** | 
 |  3577    * 12.17 Getter Invocation: Let <i>T</i> be the static type of <i>e</i>. It is | 
 |  3578    * a static type warning if <i>T</i> does not have a getter named <i>m</i>. | 
 |  3579    * | 
 |  3580    * Parameters: | 
 |  3581    * 0: the name of the getter | 
 |  3582    * 1: the name of the enclosing type where the getter is being looked for | 
 |  3583    */ | 
 |  3584   static const StaticTypeWarningCode UNDEFINED_SUPER_GETTER = | 
 |  3585       const StaticTypeWarningCode('UNDEFINED_SUPER_GETTER', | 
 |  3586           "The getter '{0}' is not defined in a superclass of '{1}'"); | 
 |  3587  | 
 |  3588   /** | 
 |  3589    * 12.15.4 Super Invocation: A super method invocation <i>i</i> has the form | 
 |  3590    * <i>super.m(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  3591    * a<sub>n+1</sub>, … x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. It is a | 
 |  3592    * static type warning if <i>S</i> does not have an accessible instance member | 
 |  3593    * named <i>m</i>. | 
 |  3594    * | 
 |  3595    * Parameters: | 
 |  3596    * 0: the name of the method that is undefined | 
 |  3597    * 1: the resolved type name that the method lookup is happening on | 
 |  3598    */ | 
 |  3599   static const StaticTypeWarningCode UNDEFINED_SUPER_METHOD = | 
 |  3600       const StaticTypeWarningCode('UNDEFINED_SUPER_METHOD', | 
 |  3601           "The method '{0}' is not defined in a superclass of '{1}'"); | 
 |  3602  | 
 |  3603   /** | 
 |  3604    * 12.18 Assignment: Evaluation of an assignment of the form | 
 |  3605    * <i>e<sub>1</sub></i>[<i>e<sub>2</sub></i>] = <i>e<sub>3</sub></i> is | 
 |  3606    * equivalent to the evaluation of the expression (a, i, e){a.[]=(i, e); | 
 |  3607    * return e;} (<i>e<sub>1</sub></i>, <i>e<sub>2</sub></i>, | 
 |  3608    * <i>e<sub>2</sub></i>). | 
 |  3609    * | 
 |  3610    * 12.29 Assignable Expressions: An assignable expression of the form | 
 |  3611    * <i>e<sub>1</sub></i>[<i>e<sub>2</sub></i>] is evaluated as a method | 
 |  3612    * invocation of the operator method [] on <i>e<sub>1</sub></i> with argument | 
 |  3613    * <i>e<sub>2</sub></i>. | 
 |  3614    * | 
 |  3615    * 12.15.1 Ordinary Invocation: Let <i>T</i> be the static type of <i>o</i>. | 
 |  3616    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3617    * instance member named <i>m</i>. | 
 |  3618    * | 
 |  3619    * Parameters: | 
 |  3620    * 0: the name of the operator | 
 |  3621    * 1: the name of the enclosing type where the operator is being looked for | 
 |  3622    */ | 
 |  3623   static const StaticTypeWarningCode UNDEFINED_SUPER_OPERATOR = | 
 |  3624       const StaticTypeWarningCode('UNDEFINED_SUPER_OPERATOR', | 
 |  3625           "The operator '{0}' is not defined in a superclass of '{1}'"); | 
 |  3626  | 
 |  3627   /** | 
 |  3628    * 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i>. | 
 |  3629    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3630    * instance setter named <i>v=</i>. | 
 |  3631    * | 
 |  3632    * Parameters: | 
 |  3633    * 0: the name of the setter | 
 |  3634    * 1: the name of the enclosing type where the setter is being looked for | 
 |  3635    * | 
 |  3636    * See [INACCESSIBLE_SETTER]. | 
 |  3637    */ | 
 |  3638   static const StaticTypeWarningCode UNDEFINED_SUPER_SETTER = | 
 |  3639       const StaticTypeWarningCode('UNDEFINED_SUPER_SETTER', | 
 |  3640           "The setter '{0}' is not defined in a superclass of '{1}'"); | 
 |  3641  | 
 |  3642   /** | 
 |  3643    * 12.15.1 Ordinary Invocation: It is a static type warning if <i>T</i> does | 
 |  3644    * not have an accessible (3.2) instance member named <i>m</i>. | 
 |  3645    * | 
 |  3646    * This is a specialization of [INSTANCE_ACCESS_TO_STATIC_MEMBER] that is used | 
 |  3647    * when we are able to find the name defined in a supertype. It exists to | 
 |  3648    * provide a more informative error message. | 
 |  3649    */ | 
 |  3650   static const StaticTypeWarningCode UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_M
      EMBER = | 
 |  3651       const StaticTypeWarningCode( | 
 |  3652           'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER', | 
 |  3653           "Static members from supertypes must be qualified by the name of the d
      efining type"); | 
 |  3654  | 
 |  3655   /** | 
 |  3656    * 15.8 Parameterized Types: It is a static type warning if <i>G</i> is not a | 
 |  3657    * generic type with exactly <i>n</i> type parameters. | 
 |  3658    * | 
 |  3659    * Parameters: | 
 |  3660    * 0: the name of the type being referenced (<i>G</i>) | 
 |  3661    * 1: the number of type parameters that were declared | 
 |  3662    * 2: the number of type arguments provided | 
 |  3663    * | 
 |  3664    * See [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS], and | 
 |  3665    * [CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS]. | 
 |  3666    */ | 
 |  3667   static const StaticTypeWarningCode WRONG_NUMBER_OF_TYPE_ARGUMENTS = | 
 |  3668       const StaticTypeWarningCode('WRONG_NUMBER_OF_TYPE_ARGUMENTS', | 
 |  3669           "The type '{0}' is declared with {1} type parameters, but {2} type arg
      uments were given"); | 
 |  3670  | 
 |  3671   /** | 
 |  3672    * 17.16.1 Yield: Let T be the static type of e [the expression to the right | 
 |  3673    * of "yield"] and let f be the immediately enclosing function.  It is a | 
 |  3674    * static type warning if either: | 
 |  3675    * | 
 |  3676    * - the body of f is marked async* and the type Stream<T> may not be | 
 |  3677    *   assigned to the declared return type of f. | 
 |  3678    * | 
 |  3679    * - the body of f is marked sync* and the type Iterable<T> may not be | 
 |  3680    *   assigned to the declared return type of f. | 
 |  3681    * | 
 |  3682    * 17.16.2 Yield-Each: Let T be the static type of e [the expression to the | 
 |  3683    * right of "yield*"] and let f be the immediately enclosing function.  It is | 
 |  3684    * a static type warning if T may not be assigned to the declared return type | 
 |  3685    * of f.  If f is synchronous it is a static type warning if T may not be | 
 |  3686    * assigned to Iterable.  If f is asynchronous it is a static type warning if | 
 |  3687    * T may not be assigned to Stream. | 
 |  3688    */ | 
 |  3689   static const StaticTypeWarningCode YIELD_OF_INVALID_TYPE = | 
 |  3690       const StaticTypeWarningCode('YIELD_OF_INVALID_TYPE', | 
 |  3691           "The type '{0}' implied by the 'yield' expression must be assignable t
      o '{1}'"); | 
 |  3692  | 
 |  3693   /** | 
 |  3694    * Initialize a newly created error code to have the given [name]. The message | 
 |  3695    * associated with the error will be created from the given [message] | 
 |  3696    * template. The correction associated with the error will be created from the | 
 |  3697    * given [correction] template. | 
 |  3698    */ | 
 |  3699   const StaticTypeWarningCode(String name, String message, [String correction]) | 
 |  3700       : super(name, message, correction); | 
 |  3701  | 
 |  3702   @override | 
 |  3703   ErrorSeverity get errorSeverity => ErrorType.STATIC_TYPE_WARNING.severity; | 
 |  3704  | 
 |  3705   @override | 
 |  3706   ErrorType get type => ErrorType.STATIC_TYPE_WARNING; | 
 |  3707 } | 
 |  3708  | 
 |  3709 /** | 
 |  3710  * The error codes used for static warnings. The convention for this class is | 
 |  3711  * for the name of the error code to indicate the problem that caused the error | 
 |  3712  * to be generated and for the error message to explain what is wrong and, when | 
 |  3713  * appropriate, how the problem can be corrected. | 
 |  3714  */ | 
 |  3715 class StaticWarningCode extends ErrorCode { | 
 |  3716   /** | 
 |  3717    * 14.1 Imports: If a name <i>N</i> is referenced by a library <i>L</i> and | 
 |  3718    * <i>N</i> is introduced into the top level scope <i>L</i> by more than one | 
 |  3719    * import then: | 
 |  3720    * 1. A static warning occurs. | 
 |  3721    * 2. If <i>N</i> is referenced as a function, getter or setter, a | 
 |  3722    *    <i>NoSuchMethodError</i> is raised. | 
 |  3723    * 3. If <i>N</i> is referenced as a type, it is treated as a malformed type. | 
 |  3724    * | 
 |  3725    * Parameters: | 
 |  3726    * 0: the name of the ambiguous type | 
 |  3727    * 1: the name of the first library that the type is found | 
 |  3728    * 2: the name of the second library that the type is found | 
 |  3729    */ | 
 |  3730   static const StaticWarningCode AMBIGUOUS_IMPORT = const StaticWarningCode( | 
 |  3731       'AMBIGUOUS_IMPORT', "The name '{0}' is defined in the libraries {1}", | 
 |  3732       "Consider using 'as prefix' for one of the import directives " | 
 |  3733       "or hiding the name from all but one of the imports."); | 
 |  3734  | 
 |  3735   /** | 
 |  3736    * 12.11.1 New: It is a static warning if the static type of <i>a<sub>i</sub>, | 
 |  3737    * 1 <= i <= n+ k</i> may not be assigned to the type of the | 
 |  3738    * corresponding formal parameter of the constructor <i>T.id</i> (respectively | 
 |  3739    * <i>T</i>). | 
 |  3740    * | 
 |  3741    * 12.11.2 Const: It is a static warning if the static type of | 
 |  3742    * <i>a<sub>i</sub>, 1 <= i <= n+ k</i> may not be assigned to the type | 
 |  3743    * of the corresponding formal parameter of the constructor <i>T.id</i> | 
 |  3744    * (respectively <i>T</i>). | 
 |  3745    * | 
 |  3746    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |  3747    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |  3748    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |  3749    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |  3750    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |  3751    * <= j <= m</i>. | 
 |  3752    * | 
 |  3753    * 12.14.2 Binding Actuals to Formals: Furthermore, each <i>q<sub>i</sub>, 1 | 
 |  3754    * <= i <= l</i>, must have a corresponding named parameter in the set | 
 |  3755    * <i>{p<sub>n+1</sub>, … p<sub>n+k</sub>}</i> or a static warning | 
 |  3756    * occurs. It is a static warning if <i>T<sub>m+j</sub></i> may not be | 
 |  3757    * assigned to <i>S<sub>r</sub></i>, where <i>r = q<sub>j</sub>, 1 <= j | 
 |  3758    * <= l</i>. | 
 |  3759    * | 
 |  3760    * Parameters: | 
 |  3761    * 0: the name of the actual argument type | 
 |  3762    * 1: the name of the expected type | 
 |  3763    */ | 
 |  3764   static const StaticWarningCode ARGUMENT_TYPE_NOT_ASSIGNABLE = | 
 |  3765       const StaticWarningCode('ARGUMENT_TYPE_NOT_ASSIGNABLE', | 
 |  3766           "The argument type '{0}' cannot be assigned to the parameter type '{1}
      '"); | 
 |  3767  | 
 |  3768   /** | 
 |  3769    * 5 Variables: Attempting to assign to a final variable elsewhere will cause | 
 |  3770    * a NoSuchMethodError to be thrown, because no setter is defined for it. The | 
 |  3771    * assignment will also give rise to a static warning for the same reason. | 
 |  3772    * | 
 |  3773    * A constant variable is always implicitly final. | 
 |  3774    */ | 
 |  3775   static const StaticWarningCode ASSIGNMENT_TO_CONST = const StaticWarningCode( | 
 |  3776       'ASSIGNMENT_TO_CONST', "Constant variables cannot be assigned a value"); | 
 |  3777  | 
 |  3778   /** | 
 |  3779    * 5 Variables: Attempting to assign to a final variable elsewhere will cause | 
 |  3780    * a NoSuchMethodError to be thrown, because no setter is defined for it. The | 
 |  3781    * assignment will also give rise to a static warning for the same reason. | 
 |  3782    */ | 
 |  3783   static const StaticWarningCode ASSIGNMENT_TO_FINAL = const StaticWarningCode( | 
 |  3784       'ASSIGNMENT_TO_FINAL', "'{0}' cannot be used as a setter, it is final"); | 
 |  3785  | 
 |  3786   /** | 
 |  3787    * 5 Variables: Attempting to assign to a final variable elsewhere will cause | 
 |  3788    * a NoSuchMethodError to be thrown, because no setter is defined for it. The | 
 |  3789    * assignment will also give rise to a static warning for the same reason. | 
 |  3790    */ | 
 |  3791   static const StaticWarningCode ASSIGNMENT_TO_FINAL_NO_SETTER = | 
 |  3792       const StaticWarningCode('ASSIGNMENT_TO_FINAL_NO_SETTER', | 
 |  3793           "No setter named '{0}' in class '{1}'"); | 
 |  3794  | 
 |  3795   /** | 
 |  3796    * 12.18 Assignment: It is as static warning if an assignment of the form | 
 |  3797    * <i>v = e</i> occurs inside a top level or static function (be it function, | 
 |  3798    * method, getter, or setter) or variable initializer and there is neither a | 
 |  3799    * local variable declaration with name <i>v</i> nor setter declaration with | 
 |  3800    * name <i>v=</i> in the lexical scope enclosing the assignment. | 
 |  3801    */ | 
 |  3802   static const StaticWarningCode ASSIGNMENT_TO_FUNCTION = | 
 |  3803       const StaticWarningCode( | 
 |  3804           'ASSIGNMENT_TO_FUNCTION', "Functions cannot be assigned a value"); | 
 |  3805  | 
 |  3806   /** | 
 |  3807    * 12.18 Assignment: Let <i>T</i> be the static type of <i>e<sub>1</sub></i> | 
 |  3808    * It is a static type warning if <i>T</i> does not have an accessible | 
 |  3809    * instance setter named <i>v=</i>. | 
 |  3810    */ | 
 |  3811   static const StaticWarningCode ASSIGNMENT_TO_METHOD = const StaticWarningCode( | 
 |  3812       'ASSIGNMENT_TO_METHOD', "Methods cannot be assigned a value"); | 
 |  3813  | 
 |  3814   /** | 
 |  3815    * 12.18 Assignment: It is as static warning if an assignment of the form | 
 |  3816    * <i>v = e</i> occurs inside a top level or static function (be it function, | 
 |  3817    * method, getter, or setter) or variable initializer and there is neither a | 
 |  3818    * local variable declaration with name <i>v</i> nor setter declaration with | 
 |  3819    * name <i>v=</i> in the lexical scope enclosing the assignment. | 
 |  3820    */ | 
 |  3821   static const StaticWarningCode ASSIGNMENT_TO_TYPE = const StaticWarningCode( | 
 |  3822       'ASSIGNMENT_TO_TYPE', "Types cannot be assigned a value"); | 
 |  3823  | 
 |  3824   /** | 
 |  3825    * 13.9 Switch: It is a static warning if the last statement of the statement | 
 |  3826    * sequence <i>s<sub>k</sub></i> is not a break, continue, return or throw | 
 |  3827    * statement. | 
 |  3828    */ | 
 |  3829   static const StaticWarningCode CASE_BLOCK_NOT_TERMINATED = | 
 |  3830       const StaticWarningCode('CASE_BLOCK_NOT_TERMINATED', | 
 |  3831           "The last statement of the 'case' should be 'break', 'continue', 'retu
      rn' or 'throw'"); | 
 |  3832  | 
 |  3833   /** | 
 |  3834    * 12.32 Type Cast: It is a static warning if <i>T</i> does not denote a type | 
 |  3835    * available in the current lexical scope. | 
 |  3836    */ | 
 |  3837   static const StaticWarningCode CAST_TO_NON_TYPE = const StaticWarningCode( | 
 |  3838       'CAST_TO_NON_TYPE', | 
 |  3839       "The name '{0}' is not a type and cannot be used in an 'as' expression"); | 
 |  3840  | 
 |  3841   /** | 
 |  3842    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  3843    * is declared or inherited in a concrete class. | 
 |  3844    */ | 
 |  3845   static const StaticWarningCode CONCRETE_CLASS_WITH_ABSTRACT_MEMBER = | 
 |  3846       const StaticWarningCode('CONCRETE_CLASS_WITH_ABSTRACT_MEMBER', | 
 |  3847           "'{0}' must have a method body because '{1}' is not abstract"); | 
 |  3848  | 
 |  3849   /** | 
 |  3850    * 14.1 Imports: If a name <i>N</i> is referenced by a library <i>L</i> and | 
 |  3851    * <i>N</i> would be introduced into the top level scope of <i>L</i> by an | 
 |  3852    * import from a library whose URI begins with <i>dart:</i> and an import from | 
 |  3853    * a library whose URI does not begin with <i>dart:</i>: | 
 |  3854    * * The import from <i>dart:</i> is implicitly extended by a hide N clause. | 
 |  3855    * * A static warning is issued. | 
 |  3856    * | 
 |  3857    * Parameters: | 
 |  3858    * 0: the ambiguous name | 
 |  3859    * 1: the name of the dart: library in which the element is found | 
 |  3860    * 1: the name of the non-dart: library in which the element is found | 
 |  3861    */ | 
 |  3862   static const StaticWarningCode CONFLICTING_DART_IMPORT = | 
 |  3863       const StaticWarningCode('CONFLICTING_DART_IMPORT', | 
 |  3864           "Element '{0}' from SDK library '{1}' is implicitly hidden by '{2}'"); | 
 |  3865  | 
 |  3866   /** | 
 |  3867    * 7.2 Getters: It is a static warning if a class <i>C</i> declares an | 
 |  3868    * instance getter named <i>v</i> and an accessible static member named | 
 |  3869    * <i>v</i> or <i>v=</i> is declared in a superclass of <i>C</i>. | 
 |  3870    * | 
 |  3871    * Parameters: | 
 |  3872    * 0: the name of the super class declaring a static member | 
 |  3873    */ | 
 |  3874   static const StaticWarningCode CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMB
      ER = | 
 |  3875       const StaticWarningCode( | 
 |  3876           'CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER', | 
 |  3877           "Superclass '{0}' declares static member with the same name"); | 
 |  3878  | 
 |  3879   /** | 
 |  3880    * 7.1 Instance Methods: It is a static warning if a class <i>C</i> declares | 
 |  3881    * an instance method named <i>n</i> and has a setter named <i>n=</i>. | 
 |  3882    */ | 
 |  3883   static const StaticWarningCode CONFLICTING_INSTANCE_METHOD_SETTER = | 
 |  3884       const StaticWarningCode('CONFLICTING_INSTANCE_METHOD_SETTER', | 
 |  3885           "Class '{0}' declares instance method '{1}', but also has a setter wit
      h the same name from '{2}'"); | 
 |  3886  | 
 |  3887   /** | 
 |  3888    * 7.1 Instance Methods: It is a static warning if a class <i>C</i> declares | 
 |  3889    * an instance method named <i>n</i> and has a setter named <i>n=</i>. | 
 |  3890    */ | 
 |  3891   static const StaticWarningCode CONFLICTING_INSTANCE_METHOD_SETTER2 = | 
 |  3892       const StaticWarningCode('CONFLICTING_INSTANCE_METHOD_SETTER2', | 
 |  3893           "Class '{0}' declares the setter '{1}', but also has an instance metho
      d in the same class"); | 
 |  3894  | 
 |  3895   /** | 
 |  3896    * 7.3 Setters: It is a static warning if a class <i>C</i> declares an | 
 |  3897    * instance setter named <i>v=</i> and an accessible static member named | 
 |  3898    * <i>v=</i> or <i>v</i> is declared in a superclass of <i>C</i>. | 
 |  3899    * | 
 |  3900    * Parameters: | 
 |  3901    * 0: the name of the super class declaring a static member | 
 |  3902    */ | 
 |  3903   static const StaticWarningCode CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMB
      ER = | 
 |  3904       const StaticWarningCode( | 
 |  3905           'CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER', | 
 |  3906           "Superclass '{0}' declares static member with the same name"); | 
 |  3907  | 
 |  3908   /** | 
 |  3909    * 7.2 Getters: It is a static warning if a class declares a static getter | 
 |  3910    * named <i>v</i> and also has a non-static setter named <i>v=</i>. | 
 |  3911    */ | 
 |  3912   static const StaticWarningCode CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER = | 
 |  3913       const StaticWarningCode('CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER', | 
 |  3914           "Class '{0}' declares non-static setter with the same name"); | 
 |  3915  | 
 |  3916   /** | 
 |  3917    * 7.3 Setters: It is a static warning if a class declares a static setter | 
 |  3918    * named <i>v=</i> and also has a non-static member named <i>v</i>. | 
 |  3919    */ | 
 |  3920   static const StaticWarningCode CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER = | 
 |  3921       const StaticWarningCode('CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER', | 
 |  3922           "Class '{0}' declares non-static member with the same name"); | 
 |  3923  | 
 |  3924   /** | 
 |  3925    * 12.11.2 Const: Given an instance creation expression of the form <i>const | 
 |  3926    * q(a<sub>1</sub>, … a<sub>n</sub>)</i> it is a static warning if | 
 |  3927    * <i>q</i> is the constructor of an abstract class but <i>q</i> is not a | 
 |  3928    * factory constructor. | 
 |  3929    */ | 
 |  3930   static const StaticWarningCode CONST_WITH_ABSTRACT_CLASS = | 
 |  3931       const StaticWarningCode('CONST_WITH_ABSTRACT_CLASS', | 
 |  3932           "Abstract classes cannot be created with a 'const' expression"); | 
 |  3933  | 
 |  3934   /** | 
 |  3935    * 12.7 Maps: It is a static warning if the values of any two keys in a map | 
 |  3936    * literal are equal. | 
 |  3937    */ | 
 |  3938   static const StaticWarningCode EQUAL_KEYS_IN_MAP = const StaticWarningCode( | 
 |  3939       'EQUAL_KEYS_IN_MAP', "Keys in a map cannot be equal"); | 
 |  3940  | 
 |  3941   /** | 
 |  3942    * 14.2 Exports: It is a static warning to export two different libraries with | 
 |  3943    * the same name. | 
 |  3944    * | 
 |  3945    * Parameters: | 
 |  3946    * 0: the uri pointing to a first library | 
 |  3947    * 1: the uri pointing to a second library | 
 |  3948    * 2:e the shared name of the exported libraries | 
 |  3949    */ | 
 |  3950   static const StaticWarningCode EXPORT_DUPLICATED_LIBRARY_NAMED = | 
 |  3951       const StaticWarningCode('EXPORT_DUPLICATED_LIBRARY_NAMED', | 
 |  3952           "The exported libraries '{0}' and '{1}' cannot have the same name '{2}
      '"); | 
 |  3953  | 
 |  3954   /** | 
 |  3955    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m < | 
 |  3956    * h</i> or if <i>m > n</i>. | 
 |  3957    * | 
 |  3958    * Parameters: | 
 |  3959    * 0: the maximum number of positional arguments | 
 |  3960    * 1: the actual number of positional arguments given | 
 |  3961    * | 
 |  3962    * See [NOT_ENOUGH_REQUIRED_ARGUMENTS]. | 
 |  3963    */ | 
 |  3964   static const StaticWarningCode EXTRA_POSITIONAL_ARGUMENTS = | 
 |  3965       const StaticWarningCode('EXTRA_POSITIONAL_ARGUMENTS', | 
 |  3966           "{0} positional arguments expected, but {1} found"); | 
 |  3967  | 
 |  3968   /** | 
 |  3969    * 5. Variables: It is a static warning if a final instance variable that has | 
 |  3970    * been initialized at its point of declaration is also initialized in a | 
 |  3971    * constructor. | 
 |  3972    */ | 
 |  3973   static const StaticWarningCode FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATIO
      N = | 
 |  3974       const StaticWarningCode( | 
 |  3975           'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION', | 
 |  3976           "Values cannot be set in the constructor if they are final, and have a
      lready been set"); | 
 |  3977  | 
 |  3978   /** | 
 |  3979    * 5. Variables: It is a static warning if a final instance variable that has | 
 |  3980    * been initialized at its point of declaration is also initialized in a | 
 |  3981    * constructor. | 
 |  3982    * | 
 |  3983    * Parameters: | 
 |  3984    * 0: the name of the field in question | 
 |  3985    */ | 
 |  3986   static const StaticWarningCode FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTO
      R = | 
 |  3987       const StaticWarningCode( | 
 |  3988           'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR', | 
 |  3989           "'{0}' is final and was given a value when it was declared, so it cann
      ot be set to a new value"); | 
 |  3990  | 
 |  3991   /** | 
 |  3992    * 7.6.1 Generative Constructors: Execution of an initializer of the form | 
 |  3993    * <b>this</b>.<i>v</i> = <i>e</i> proceeds as follows: First, the expression | 
 |  3994    * <i>e</i> is evaluated to an object <i>o</i>. Then, the instance variable | 
 |  3995    * <i>v</i> of the object denoted by this is bound to <i>o</i>. | 
 |  3996    * | 
 |  3997    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |  3998    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |  3999    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |  4000    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |  4001    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |  4002    * <= j <= m</i>. | 
 |  4003    * | 
 |  4004    * Parameters: | 
 |  4005    * 0: the name of the type of the initializer expression | 
 |  4006    * 1: the name of the type of the field | 
 |  4007    */ | 
 |  4008   static const StaticWarningCode FIELD_INITIALIZER_NOT_ASSIGNABLE = | 
 |  4009       const StaticWarningCode('FIELD_INITIALIZER_NOT_ASSIGNABLE', | 
 |  4010           "The initializer type '{0}' cannot be assigned to the field type '{1}'
      "); | 
 |  4011  | 
 |  4012   /** | 
 |  4013    * 7.6.1 Generative Constructors: An initializing formal has the form | 
 |  4014    * <i>this.id</i>. It is a static warning if the static type of <i>id</i> is | 
 |  4015    * not assignable to <i>T<sub>id</sub></i>. | 
 |  4016    * | 
 |  4017    * Parameters: | 
 |  4018    * 0: the name of the type of the field formal parameter | 
 |  4019    * 1: the name of the type of the field | 
 |  4020    */ | 
 |  4021   static const StaticWarningCode FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE = | 
 |  4022       const StaticWarningCode('FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE', | 
 |  4023           "The parameter type '{0}' is incompatable with the field type '{1}'"); | 
 |  4024  | 
 |  4025   /** | 
 |  4026    * 5 Variables: It is a static warning if a library, static or local variable | 
 |  4027    * <i>v</i> is final and <i>v</i> is not initialized at its point of | 
 |  4028    * declaration. | 
 |  4029    * | 
 |  4030    * Parameters: | 
 |  4031    * 0: the name of the uninitialized final variable | 
 |  4032    */ | 
 |  4033   static const StaticWarningCode FINAL_NOT_INITIALIZED = | 
 |  4034       const StaticWarningCode('FINAL_NOT_INITIALIZED', | 
 |  4035           "The final variable '{0}' must be initialized"); | 
 |  4036  | 
 |  4037   /** | 
 |  4038    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i> | 
 |  4039    * declared in the immediately enclosing class must have an initializer in | 
 |  4040    * <i>k</i>'s initializer list unless it has already been initialized by one | 
 |  4041    * of the following means: | 
 |  4042    * * Initialization at the declaration of <i>f</i>. | 
 |  4043    * * Initialization by means of an initializing formal of <i>k</i>. | 
 |  4044    * or a static warning occurs. | 
 |  4045    * | 
 |  4046    * Parameters: | 
 |  4047    * 0: the name of the uninitialized final variable | 
 |  4048    */ | 
 |  4049   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 = | 
 |  4050       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_1', | 
 |  4051           "The final variable '{0}' must be initialized"); | 
 |  4052  | 
 |  4053   /** | 
 |  4054    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i> | 
 |  4055    * declared in the immediately enclosing class must have an initializer in | 
 |  4056    * <i>k</i>'s initializer list unless it has already been initialized by one | 
 |  4057    * of the following means: | 
 |  4058    * * Initialization at the declaration of <i>f</i>. | 
 |  4059    * * Initialization by means of an initializing formal of <i>k</i>. | 
 |  4060    * or a static warning occurs. | 
 |  4061    * | 
 |  4062    * Parameters: | 
 |  4063    * 0: the name of the uninitialized final variable | 
 |  4064    * 1: the name of the uninitialized final variable | 
 |  4065    */ | 
 |  4066   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 = | 
 |  4067       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_2', | 
 |  4068           "The final variables '{0}' and '{1}' must be initialized"); | 
 |  4069  | 
 |  4070   /** | 
 |  4071    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i> | 
 |  4072    * declared in the immediately enclosing class must have an initializer in | 
 |  4073    * <i>k</i>'s initializer list unless it has already been initialized by one | 
 |  4074    * of the following means: | 
 |  4075    * * Initialization at the declaration of <i>f</i>. | 
 |  4076    * * Initialization by means of an initializing formal of <i>k</i>. | 
 |  4077    * or a static warning occurs. | 
 |  4078    * | 
 |  4079    * Parameters: | 
 |  4080    * 0: the name of the uninitialized final variable | 
 |  4081    * 1: the name of the uninitialized final variable | 
 |  4082    * 2: the number of additional not initialized variables that aren't listed | 
 |  4083    */ | 
 |  4084   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS = | 
 |  4085       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_3', | 
 |  4086           "The final variables '{0}', '{1}' and '{2}' more must be initialized")
      ; | 
 |  4087  | 
 |  4088   /** | 
 |  4089    * 15.5 Function Types: It is a static warning if a concrete class implements | 
 |  4090    * Function and does not have a concrete method named call(). | 
 |  4091    */ | 
 |  4092   static const StaticWarningCode FUNCTION_WITHOUT_CALL = const StaticWarningCode
      ( | 
 |  4093       'FUNCTION_WITHOUT_CALL', | 
 |  4094       "Concrete classes that implement Function must implement the method call()
      "); | 
 |  4095  | 
 |  4096   /** | 
 |  4097    * 14.1 Imports: It is a static warning to import two different libraries with | 
 |  4098    * the same name. | 
 |  4099    * | 
 |  4100    * Parameters: | 
 |  4101    * 0: the uri pointing to a first library | 
 |  4102    * 1: the uri pointing to a second library | 
 |  4103    * 2: the shared name of the imported libraries | 
 |  4104    */ | 
 |  4105   static const StaticWarningCode IMPORT_DUPLICATED_LIBRARY_NAMED = | 
 |  4106       const StaticWarningCode('IMPORT_DUPLICATED_LIBRARY_NAMED', | 
 |  4107           "The imported libraries '{0}' and '{1}' cannot have the same name '{2}
      '"); | 
 |  4108  | 
 |  4109   /** | 
 |  4110    * 14.1 Imports: It is a static warning if the specified URI of a deferred | 
 |  4111    * import does not refer to a library declaration. | 
 |  4112    * | 
 |  4113    * Parameters: | 
 |  4114    * 0: the uri pointing to a non-library declaration | 
 |  4115    * | 
 |  4116    * See [CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY]. | 
 |  4117    */ | 
 |  4118   static const StaticWarningCode IMPORT_OF_NON_LIBRARY = | 
 |  4119       const StaticWarningCode('IMPORT_OF_NON_LIBRARY', | 
 |  4120           "The imported library '{0}' must not have a part-of directive"); | 
 |  4121  | 
 |  4122   /** | 
 |  4123    * 8.1.1 Inheritance and Overriding: However, if the above rules would cause | 
 |  4124    * multiple members <i>m<sub>1</sub>, …, m<sub>k</sub></i> with the | 
 |  4125    * same name <i>n</i> that would be inherited (because identically named | 
 |  4126    * members existed in several superinterfaces) then at most one member is | 
 |  4127    * inherited. | 
 |  4128    * | 
 |  4129    * If some but not all of the <i>m<sub>i</sub>, 1 <= i <= k</i> are | 
 |  4130    * getters none of the <i>m<sub>i</sub></i> are inherited, and a static | 
 |  4131    * warning is issued. | 
 |  4132    */ | 
 |  4133   static const StaticWarningCode INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METH
      OD = | 
 |  4134       const StaticWarningCode( | 
 |  4135           'INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD', | 
 |  4136           "'{0}' is inherited as a getter and also a method"); | 
 |  4137  | 
 |  4138   /** | 
 |  4139    * 7.1 Instance Methods: It is a static warning if a class <i>C</i> declares | 
 |  4140    * an instance method named <i>n</i> and an accessible static member named | 
 |  4141    * <i>n</i> is declared in a superclass of <i>C</i>. | 
 |  4142    * | 
 |  4143    * Parameters: | 
 |  4144    * 0: the name of the member with the name conflict | 
 |  4145    * 1: the name of the enclosing class that has the static member | 
 |  4146    */ | 
 |  4147   static const StaticWarningCode INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_S
      TATIC = | 
 |  4148       const StaticWarningCode( | 
 |  4149           'INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC', | 
 |  4150           "'{0}' collides with a static member in the superclass '{1}'"); | 
 |  4151  | 
 |  4152   /** | 
 |  4153    * 7.2 Getters: It is a static warning if a getter <i>m1</i> overrides a | 
 |  4154    * getter <i>m2</i> and the type of <i>m1</i> is not a subtype of the type of | 
 |  4155    * <i>m2</i>. | 
 |  4156    * | 
 |  4157    * Parameters: | 
 |  4158    * 0: the name of the actual return type | 
 |  4159    * 1: the name of the expected return type, not assignable to the actual | 
 |  4160    *    return type | 
 |  4161    * 2: the name of the class where the overridden getter is declared | 
 |  4162    * | 
 |  4163    * See [INVALID_METHOD_OVERRIDE_RETURN_TYPE]. | 
 |  4164    */ | 
 |  4165   static const StaticWarningCode INVALID_GETTER_OVERRIDE_RETURN_TYPE = | 
 |  4166       const StaticWarningCode('INVALID_GETTER_OVERRIDE_RETURN_TYPE', | 
 |  4167           "The return type '{0}' is not assignable to '{1}' as required by the g
      etter it is overriding from '{2}'"); | 
 |  4168  | 
 |  4169   /** | 
 |  4170    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4171    * <i>m1</i> overrides an instance method <i>m2</i> and the type of <i>m1</i> | 
 |  4172    * is not a subtype of the type of <i>m2</i>. | 
 |  4173    * | 
 |  4174    * Parameters: | 
 |  4175    * 0: the name of the actual parameter type | 
 |  4176    * 1: the name of the expected parameter type, not assignable to the actual | 
 |  4177    *    parameter type | 
 |  4178    * 2: the name of the class where the overridden method is declared | 
 |  4179    */ | 
 |  4180   static const StaticWarningCode INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE = | 
 |  4181       const StaticWarningCode('INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE', | 
 |  4182           "The parameter type '{0}' is not assignable to '{1}' as required by th
      e method it is overriding from '{2}'"); | 
 |  4183  | 
 |  4184   /** | 
 |  4185    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4186    * <i>m1</i> overrides an instance method <i>m2</i> and the type of <i>m1</i> | 
 |  4187    * is not a subtype of the type of <i>m2</i>. | 
 |  4188    * | 
 |  4189    * Parameters: | 
 |  4190    * 0: the name of the actual parameter type | 
 |  4191    * 1: the name of the expected parameter type, not assignable to the actual | 
 |  4192    *    parameter type | 
 |  4193    * 2: the name of the class where the overridden method is declared | 
 |  4194    * See [INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]. | 
 |  4195    */ | 
 |  4196   static const StaticWarningCode INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE = | 
 |  4197       const StaticWarningCode('INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE', | 
 |  4198           "The parameter type '{0}' is not assignable to '{1}' as required by th
      e method it is overriding from '{2}'"); | 
 |  4199  | 
 |  4200   /** | 
 |  4201    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4202    * <i>m1</i> overrides an instance method <i>m2</i> and the type of <i>m1</i> | 
 |  4203    * is not a subtype of the type of <i>m2</i>. | 
 |  4204    * | 
 |  4205    * Parameters: | 
 |  4206    * 0: the name of the actual parameter type | 
 |  4207    * 1: the name of the expected parameter type, not assignable to the actual | 
 |  4208    *    parameter type | 
 |  4209    * 2: the name of the class where the overridden method is declared | 
 |  4210    */ | 
 |  4211   static const StaticWarningCode INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE = | 
 |  4212       const StaticWarningCode('INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE', | 
 |  4213           "The parameter type '{0}' is not assignable to '{1}' as required by th
      e method it is overriding from '{2}'"); | 
 |  4214  | 
 |  4215   /** | 
 |  4216    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4217    * <i>m1</i> overrides an instance method <i>m2</i> and the type of <i>m1</i> | 
 |  4218    * is not a subtype of the type of <i>m2</i>. | 
 |  4219    * | 
 |  4220    * Parameters: | 
 |  4221    * 0: the name of the actual return type | 
 |  4222    * 1: the name of the expected return type, not assignable to the actual | 
 |  4223    *    return type | 
 |  4224    * 2: the name of the class where the overridden method is declared | 
 |  4225    * | 
 |  4226    * See [INVALID_GETTER_OVERRIDE_RETURN_TYPE]. | 
 |  4227    */ | 
 |  4228   static const StaticWarningCode INVALID_METHOD_OVERRIDE_RETURN_TYPE = | 
 |  4229       const StaticWarningCode('INVALID_METHOD_OVERRIDE_RETURN_TYPE', | 
 |  4230           "The return type '{0}' is not assignable to '{1}' as required by the m
      ethod it is overriding from '{2}'"); | 
 |  4231  | 
 |  4232   /** | 
 |  4233    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4234    * <i>m1</i> overrides an instance member <i>m2</i>, the signature of | 
 |  4235    * <i>m2</i> explicitly specifies a default value for a formal parameter | 
 |  4236    * <i>p</i> and the signature of <i>m1</i> specifies a different default value | 
 |  4237    * for <i>p</i>. | 
 |  4238    */ | 
 |  4239   static const StaticWarningCode INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED
       = | 
 |  4240       const StaticWarningCode('INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED', | 
 |  4241           "Parameters cannot override default values, this method overrides '{0}
      .{1}' where '{2}' has a different value"); | 
 |  4242  | 
 |  4243   /** | 
 |  4244    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4245    * <i>m1</i> overrides an instance member <i>m2</i>, the signature of | 
 |  4246    * <i>m2</i> explicitly specifies a default value for a formal parameter | 
 |  4247    * <i>p</i> and the signature of <i>m1</i> specifies a different default value | 
 |  4248    * for <i>p</i>. | 
 |  4249    */ | 
 |  4250   static const StaticWarningCode INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSIT
      IONAL = | 
 |  4251       const StaticWarningCode( | 
 |  4252           'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL', | 
 |  4253           "Parameters cannot override default values, this method overrides '{0}
      .{1}' where this positional parameter has a different value"); | 
 |  4254  | 
 |  4255   /** | 
 |  4256    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4257    * <i>m1</i> overrides an instance member <i>m2</i> and <i>m1</i> does not | 
 |  4258    * declare all the named parameters declared by <i>m2</i>. | 
 |  4259    * | 
 |  4260    * Parameters: | 
 |  4261    * 0: the number of named parameters in the overridden member | 
 |  4262    * 1: the name of the class from the overridden method | 
 |  4263    */ | 
 |  4264   static const StaticWarningCode INVALID_OVERRIDE_NAMED = const StaticWarningCod
      e( | 
 |  4265       'INVALID_OVERRIDE_NAMED', | 
 |  4266       "Missing the named parameter '{0}' to match the overridden method from '{1
      }'"); | 
 |  4267  | 
 |  4268   /** | 
 |  4269    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4270    * <i>m1</i> overrides an instance member <i>m2</i> and <i>m1</i> has fewer | 
 |  4271    * positional parameters than <i>m2</i>. | 
 |  4272    * | 
 |  4273    * Parameters: | 
 |  4274    * 0: the number of positional parameters in the overridden member | 
 |  4275    * 1: the name of the class from the overridden method | 
 |  4276    */ | 
 |  4277   static const StaticWarningCode INVALID_OVERRIDE_POSITIONAL = | 
 |  4278       const StaticWarningCode('INVALID_OVERRIDE_POSITIONAL', | 
 |  4279           "Must have at least {0} parameters to match the overridden method from
       '{1}'"); | 
 |  4280  | 
 |  4281   /** | 
 |  4282    * 7.1 Instance Methods: It is a static warning if an instance method | 
 |  4283    * <i>m1</i> overrides an instance member <i>m2</i> and <i>m1</i> has a | 
 |  4284    * greater number of required parameters than <i>m2</i>. | 
 |  4285    * | 
 |  4286    * Parameters: | 
 |  4287    * 0: the number of required parameters in the overridden member | 
 |  4288    * 1: the name of the class from the overridden method | 
 |  4289    */ | 
 |  4290   static const StaticWarningCode INVALID_OVERRIDE_REQUIRED = | 
 |  4291       const StaticWarningCode('INVALID_OVERRIDE_REQUIRED', | 
 |  4292           "Must have {0} required parameters or less to match the overridden met
      hod from '{1}'"); | 
 |  4293  | 
 |  4294   /** | 
 |  4295    * 7.3 Setters: It is a static warning if a setter <i>m1</i> overrides a | 
 |  4296    * setter <i>m2</i> and the type of <i>m1</i> is not a subtype of the type of | 
 |  4297    * <i>m2</i>. | 
 |  4298    * | 
 |  4299    * Parameters: | 
 |  4300    * 0: the name of the actual parameter type | 
 |  4301    * 1: the name of the expected parameter type, not assignable to the actual | 
 |  4302    * parameter type | 
 |  4303    * 2: the name of the class where the overridden setter is declared | 
 |  4304    * | 
 |  4305    * See [INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE]. | 
 |  4306    */ | 
 |  4307   static const StaticWarningCode INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE = | 
 |  4308       const StaticWarningCode('INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE', | 
 |  4309           "The parameter type '{0}' is not assignable to '{1}' as required by th
      e setter it is overriding from '{2}'"); | 
 |  4310  | 
 |  4311   /** | 
 |  4312    * 12.6 Lists: A run-time list literal <<i>E</i>> [<i>e<sub>1</sub></i> | 
 |  4313    * … <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |  4314    * * The operator []= is invoked on <i>a</i> with first argument <i>i</i> and | 
 |  4315    *   second argument <i>o<sub>i+1</sub></i><i>, 1 <= i <= n</i> | 
 |  4316    * | 
 |  4317    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |  4318    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |  4319    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |  4320    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |  4321    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |  4322    * <= j <= m</i>. | 
 |  4323    */ | 
 |  4324   static const StaticWarningCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE = | 
 |  4325       const StaticWarningCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE', | 
 |  4326           "The element type '{0}' cannot be assigned to the list type '{1}'"); | 
 |  4327  | 
 |  4328   /** | 
 |  4329    * 12.7 Map: A run-time map literal <<i>K</i>, <i>V</i>> | 
 |  4330    * [<i>k<sub>1</sub></i> : <i>e<sub>1</sub></i> … <i>k<sub>n</sub></i> | 
 |  4331    * : <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |  4332    * * The operator []= is invoked on <i>m</i> with first argument | 
 |  4333    *   <i>k<sub>i</sub></i> and second argument <i>e<sub>i</sub></i><i>, 1 <= | 
 |  4334    *   i <= n</i> | 
 |  4335    * | 
 |  4336    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |  4337    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |  4338    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |  4339    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |  4340    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |  4341    * <= j <= m</i>. | 
 |  4342    */ | 
 |  4343   static const StaticWarningCode MAP_KEY_TYPE_NOT_ASSIGNABLE = | 
 |  4344       const StaticWarningCode('MAP_KEY_TYPE_NOT_ASSIGNABLE', | 
 |  4345           "The element type '{0}' cannot be assigned to the map key type '{1}'")
      ; | 
 |  4346  | 
 |  4347   /** | 
 |  4348    * 12.7 Map: A run-time map literal <<i>K</i>, <i>V</i>> | 
 |  4349    * [<i>k<sub>1</sub></i> : <i>e<sub>1</sub></i> … <i>k<sub>n</sub></i> | 
 |  4350    * : <i>e<sub>n</sub></i>] is evaluated as follows: | 
 |  4351    * * The operator []= is invoked on <i>m</i> with first argument | 
 |  4352    *   <i>k<sub>i</sub></i> and second argument <i>e<sub>i</sub></i><i>, 1 <= | 
 |  4353    *   i <= n</i> | 
 |  4354    * | 
 |  4355    * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static | 
 |  4356    * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of | 
 |  4357    * <i>p<sub>i</sub>, 1 <= i <= n+k</i> and let <i>S<sub>q</sub></i> be | 
 |  4358    * the type of the named parameter <i>q</i> of <i>f</i>. It is a static | 
 |  4359    * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1 | 
 |  4360    * <= j <= m</i>. | 
 |  4361    */ | 
 |  4362   static const StaticWarningCode MAP_VALUE_TYPE_NOT_ASSIGNABLE = | 
 |  4363       const StaticWarningCode('MAP_VALUE_TYPE_NOT_ASSIGNABLE', | 
 |  4364           "The element type '{0}' cannot be assigned to the map value type '{1}'
      "); | 
 |  4365  | 
 |  4366   /** | 
 |  4367    * 7.3 Setters: It is a static warning if a class has a setter named <i>v=</i> | 
 |  4368    * with argument type <i>T</i> and a getter named <i>v</i> with return type | 
 |  4369    * <i>S</i>, and <i>T</i> may not be assigned to <i>S</i>. | 
 |  4370    */ | 
 |  4371   static const StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES = | 
 |  4372       const StaticWarningCode('MISMATCHED_GETTER_AND_SETTER_TYPES', | 
 |  4373           "The parameter type for setter '{0}' is '{1}' which is not assignable 
      to its getter (of type '{2}')"); | 
 |  4374  | 
 |  4375   /** | 
 |  4376    * 7.3 Setters: It is a static warning if a class has a setter named <i>v=</i> | 
 |  4377    * with argument type <i>T</i> and a getter named <i>v</i> with return type | 
 |  4378    * <i>S</i>, and <i>T</i> may not be assigned to <i>S</i>. | 
 |  4379    */ | 
 |  4380   static const StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTY
      PE = | 
 |  4381       const StaticWarningCode( | 
 |  4382           'MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE', | 
 |  4383           "The parameter type for setter '{0}' is '{1}' which is not assignable 
      to its getter (of type '{2}'), from superclass '{3}'"); | 
 |  4384  | 
 |  4385   /** | 
 |  4386    * 13.12 Return: It is a static warning if a function contains both one or | 
 |  4387    * more return statements of the form <i>return;</i> and one or more return | 
 |  4388    * statements of the form <i>return e;</i>. | 
 |  4389    */ | 
 |  4390   static const StaticWarningCode MIXED_RETURN_TYPES = const StaticWarningCode( | 
 |  4391       'MIXED_RETURN_TYPES', | 
 |  4392       "Methods and functions cannot use return both with and without values"); | 
 |  4393  | 
 |  4394   /** | 
 |  4395    * 12.11.1 New: It is a static warning if <i>q</i> is a constructor of an | 
 |  4396    * abstract class and <i>q</i> is not a factory constructor. | 
 |  4397    */ | 
 |  4398   static const StaticWarningCode NEW_WITH_ABSTRACT_CLASS = | 
 |  4399       const StaticWarningCode('NEW_WITH_ABSTRACT_CLASS', | 
 |  4400           "Abstract classes cannot be created with a 'new' expression"); | 
 |  4401  | 
 |  4402   /** | 
 |  4403    * 15.8 Parameterized Types: Any use of a malbounded type gives rise to a | 
 |  4404    * static warning. | 
 |  4405    * | 
 |  4406    * Parameters: | 
 |  4407    * 0: the name of the type being referenced (<i>S</i>) | 
 |  4408    * 1: the number of type parameters that were declared | 
 |  4409    * 2: the number of type arguments provided | 
 |  4410    * | 
 |  4411    * See [CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS], and | 
 |  4412    * [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]. | 
 |  4413    */ | 
 |  4414   static const StaticWarningCode NEW_WITH_INVALID_TYPE_PARAMETERS = | 
 |  4415       const StaticWarningCode('NEW_WITH_INVALID_TYPE_PARAMETERS', | 
 |  4416           "The type '{0}' is declared with {1} type parameters, but {2} type arg
      uments were given"); | 
 |  4417  | 
 |  4418   /** | 
 |  4419    * 12.11.1 New: It is a static warning if <i>T</i> is not a class accessible | 
 |  4420    * in the current scope, optionally followed by type arguments. | 
 |  4421    * | 
 |  4422    * Parameters: | 
 |  4423    * 0: the name of the non-type element | 
 |  4424    */ | 
 |  4425   static const StaticWarningCode NEW_WITH_NON_TYPE = const StaticWarningCode( | 
 |  4426       'NEW_WITH_NON_TYPE', "The name '{0}' is not a class"); | 
 |  4427  | 
 |  4428   /** | 
 |  4429    * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the | 
 |  4430    * current scope then: | 
 |  4431    * 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, …, | 
 |  4432    *    a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …, | 
 |  4433    *    x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if | 
 |  4434    *    <i>T.id</i> is not the name of a constructor declared by the type | 
 |  4435    *    <i>T</i>. | 
 |  4436    * If <i>e</i> of the form <i>new T(a<sub>1</sub>, …, a<sub>n</sub>, | 
 |  4437    * x<sub>n+1</sub>: a<sub>n+1</sub>, …, x<sub>n+k</sub>: | 
 |  4438    * a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not | 
 |  4439    * declare a constructor with the same name as the declaration of <i>T</i>. | 
 |  4440    */ | 
 |  4441   static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR = | 
 |  4442       const StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR', | 
 |  4443           "The class '{0}' does not have a constructor '{1}'"); | 
 |  4444  | 
 |  4445   /** | 
 |  4446    * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the | 
 |  4447    * current scope then: | 
 |  4448    * 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, …, | 
 |  4449    * a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …, x<sub>n+k</sub>: | 
 |  4450    * a<sub>n+k</sub>)</i> it is a static warning if <i>T.id</i> is not the name | 
 |  4451    * of a constructor declared by the type <i>T</i>. If <i>e</i> of the form | 
 |  4452    * <i>new T(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  4453    * a<sub>n+1</sub>, …, x<sub>n+k</sub>: a<sub>n+kM/sub>)</i> it is a | 
 |  4454    * static warning if the type <i>T</i> does not declare a constructor with the | 
 |  4455    * same name as the declaration of <i>T</i>. | 
 |  4456    */ | 
 |  4457   static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT = | 
 |  4458       const StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT', | 
 |  4459           "The class '{0}' does not have a default constructor"); | 
 |  4460  | 
 |  4461   /** | 
 |  4462    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract | 
 |  4463    * class inherits an abstract method. | 
 |  4464    * | 
 |  4465    * 7.10 Superinterfaces: Let <i>C</i> be a concrete class that does not | 
 |  4466    * declare its own <i>noSuchMethod()</i> method. It is a static warning if the | 
 |  4467    * implicit interface of <i>C</i> includes an instance member <i>m</i> of type | 
 |  4468    * <i>F</i> and <i>C</i> does not declare or inherit a corresponding instance | 
 |  4469    * member <i>m</i> of type <i>F'</i> such that <i>F' <: F</i>. | 
 |  4470    * | 
 |  4471    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  4472    * is declared or inherited in a concrete class unless that member overrides a | 
 |  4473    * concrete one. | 
 |  4474    * | 
 |  4475    * Parameters: | 
 |  4476    * 0: the name of the first member | 
 |  4477    * 1: the name of the second member | 
 |  4478    * 2: the name of the third member | 
 |  4479    * 3: the name of the fourth member | 
 |  4480    * 4: the number of additional missing members that aren't listed | 
 |  4481    */ | 
 |  4482   static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIV
      E_PLUS = | 
 |  4483       const StaticWarningCode( | 
 |  4484           'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS', | 
 |  4485           "Missing concrete implementation of {0}, {1}, {2}, {3} and {4} more"); | 
 |  4486  | 
 |  4487   /** | 
 |  4488    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract | 
 |  4489    * class inherits an abstract method. | 
 |  4490    * | 
 |  4491    * 7.10 Superinterfaces: Let <i>C</i> be a concrete class that does not | 
 |  4492    * declare its own <i>noSuchMethod()</i> method. It is a static warning if the | 
 |  4493    * implicit interface of <i>C</i> includes an instance member <i>m</i> of type | 
 |  4494    * <i>F</i> and <i>C</i> does not declare or inherit a corresponding instance | 
 |  4495    * member <i>m</i> of type <i>F'</i> such that <i>F' <: F</i>. | 
 |  4496    * | 
 |  4497    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  4498    * is declared or inherited in a concrete class unless that member overrides a | 
 |  4499    * concrete one. | 
 |  4500    * | 
 |  4501    * Parameters: | 
 |  4502    * 0: the name of the first member | 
 |  4503    * 1: the name of the second member | 
 |  4504    * 2: the name of the third member | 
 |  4505    * 3: the name of the fourth member | 
 |  4506    */ | 
 |  4507   static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOU
      R = | 
 |  4508       const StaticWarningCode( | 
 |  4509           'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR', | 
 |  4510           "Missing concrete implementation of {0}, {1}, {2} and {3}"); | 
 |  4511  | 
 |  4512   /** | 
 |  4513    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract | 
 |  4514    * class inherits an abstract method. | 
 |  4515    * | 
 |  4516    * 7.10 Superinterfaces: Let <i>C</i> be a concrete class that does not | 
 |  4517    * declare its own <i>noSuchMethod()</i> method. It is a static warning if the | 
 |  4518    * implicit interface of <i>C</i> includes an instance member <i>m</i> of type | 
 |  4519    * <i>F</i> and <i>C</i> does not declare or inherit a corresponding instance | 
 |  4520    * member <i>m</i> of type <i>F'</i> such that <i>F' <: F</i>. | 
 |  4521    * | 
 |  4522    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  4523    * is declared or inherited in a concrete class unless that member overrides a | 
 |  4524    * concrete one. | 
 |  4525    * | 
 |  4526    * Parameters: | 
 |  4527    * 0: the name of the member | 
 |  4528    */ | 
 |  4529   static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
       = | 
 |  4530       const StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE', | 
 |  4531           "Missing concrete implementation of {0}"); | 
 |  4532  | 
 |  4533   /** | 
 |  4534    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract | 
 |  4535    * class inherits an abstract method. | 
 |  4536    * | 
 |  4537    * 7.10 Superinterfaces: Let <i>C</i> be a concrete class that does not | 
 |  4538    * declare its own <i>noSuchMethod()</i> method. It is a static warning if the | 
 |  4539    * implicit interface of <i>C</i> includes an instance member <i>m</i> of type | 
 |  4540    * <i>F</i> and <i>C</i> does not declare or inherit a corresponding instance | 
 |  4541    * member <i>m</i> of type <i>F'</i> such that <i>F' <: F</i>. | 
 |  4542    * | 
 |  4543    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  4544    * is declared or inherited in a concrete class unless that member overrides a | 
 |  4545    * concrete one. | 
 |  4546    * | 
 |  4547    * Parameters: | 
 |  4548    * 0: the name of the first member | 
 |  4549    * 1: the name of the second member | 
 |  4550    * 2: the name of the third member | 
 |  4551    */ | 
 |  4552   static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THR
      EE = | 
 |  4553       const StaticWarningCode( | 
 |  4554           'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE', | 
 |  4555           "Missing concrete implementation of {0}, {1} and {2}"); | 
 |  4556  | 
 |  4557   /** | 
 |  4558    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract | 
 |  4559    * class inherits an abstract method. | 
 |  4560    * | 
 |  4561    * 7.10 Superinterfaces: Let <i>C</i> be a concrete class that does not | 
 |  4562    * declare its own <i>noSuchMethod()</i> method. It is a static warning if the | 
 |  4563    * implicit interface of <i>C</i> includes an instance member <i>m</i> of type | 
 |  4564    * <i>F</i> and <i>C</i> does not declare or inherit a corresponding instance | 
 |  4565    * member <i>m</i> of type <i>F'</i> such that <i>F' <: F</i>. | 
 |  4566    * | 
 |  4567    * 7.4 Abstract Instance Members: It is a static warning if an abstract member | 
 |  4568    * is declared or inherited in a concrete class unless that member overrides a | 
 |  4569    * concrete one. | 
 |  4570    * | 
 |  4571    * Parameters: | 
 |  4572    * 0: the name of the first member | 
 |  4573    * 1: the name of the second member | 
 |  4574    */ | 
 |  4575   static const StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO
       = | 
 |  4576       const StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO', | 
 |  4577           "Missing concrete implementation of {0} and {1}"); | 
 |  4578  | 
 |  4579   /** | 
 |  4580    * 13.11 Try: An on-catch clause of the form <i>on T catch (p<sub>1</sub>, | 
 |  4581    * p<sub>2</sub>) s</i> or <i>on T s</i> matches an object <i>o</i> if the | 
 |  4582    * type of <i>o</i> is a subtype of <i>T</i>. It is a static warning if | 
 |  4583    * <i>T</i> does not denote a type available in the lexical scope of the | 
 |  4584    * catch clause. | 
 |  4585    * | 
 |  4586    * Parameters: | 
 |  4587    * 0: the name of the non-type element | 
 |  4588    */ | 
 |  4589   static const StaticWarningCode NON_TYPE_IN_CATCH_CLAUSE = | 
 |  4590       const StaticWarningCode('NON_TYPE_IN_CATCH_CLAUSE', | 
 |  4591           "The name '{0}' is not a type and cannot be used in an on-catch clause
      "); | 
 |  4592  | 
 |  4593   /** | 
 |  4594    * 7.1.1 Operators: It is a static warning if the return type of the | 
 |  4595    * user-declared operator []= is explicitly declared and not void. | 
 |  4596    */ | 
 |  4597   static const StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR = | 
 |  4598       const StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR', | 
 |  4599           "The return type of the operator []= must be 'void'"); | 
 |  4600  | 
 |  4601   /** | 
 |  4602    * 7.3 Setters: It is a static warning if a setter declares a return type | 
 |  4603    * other than void. | 
 |  4604    */ | 
 |  4605   static const StaticWarningCode NON_VOID_RETURN_FOR_SETTER = | 
 |  4606       const StaticWarningCode('NON_VOID_RETURN_FOR_SETTER', | 
 |  4607           "The return type of the setter must be 'void'"); | 
 |  4608  | 
 |  4609   /** | 
 |  4610    * 15.1 Static Types: A type <i>T</i> is malformed iff: | 
 |  4611    * * <i>T</i> has the form <i>id</i> or the form <i>prefix.id</i>, and in the | 
 |  4612    *   enclosing lexical scope, the name <i>id</i> (respectively | 
 |  4613    *   <i>prefix.id</i>) does not denote a type. | 
 |  4614    * * <i>T</i> denotes a type parameter in the enclosing lexical scope, but | 
 |  4615    * occurs in the signature or body of a static member. | 
 |  4616    * * <i>T</i> is a parameterized type of the form <i>G<S<sub>1</sub>, .., | 
 |  4617    * S<sub>n</sub>></i>, | 
 |  4618    * | 
 |  4619    * Any use of a malformed type gives rise to a static warning. | 
 |  4620    * | 
 |  4621    * Parameters: | 
 |  4622    * 0: the name that is not a type | 
 |  4623    */ | 
 |  4624   static const StaticWarningCode NOT_A_TYPE = | 
 |  4625       const StaticWarningCode('NOT_A_TYPE', "{0} is not a type"); | 
 |  4626  | 
 |  4627   /** | 
 |  4628    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m < | 
 |  4629    * h</i> or if <i>m > n</i>. | 
 |  4630    * | 
 |  4631    * Parameters: | 
 |  4632    * 0: the expected number of required arguments | 
 |  4633    * 1: the actual number of positional arguments given | 
 |  4634    * | 
 |  4635    * See [EXTRA_POSITIONAL_ARGUMENTS]. | 
 |  4636    */ | 
 |  4637   static const StaticWarningCode NOT_ENOUGH_REQUIRED_ARGUMENTS = | 
 |  4638       const StaticWarningCode('NOT_ENOUGH_REQUIRED_ARGUMENTS', | 
 |  4639           "{0} required argument(s) expected, but {1} found"); | 
 |  4640  | 
 |  4641   /** | 
 |  4642    * 14.3 Parts: It is a static warning if the referenced part declaration | 
 |  4643    * <i>p</i> names a library other than the current library as the library to | 
 |  4644    * which <i>p</i> belongs. | 
 |  4645    * | 
 |  4646    * Parameters: | 
 |  4647    * 0: the name of expected library name | 
 |  4648    * 1: the non-matching actual library name from the "part of" declaration | 
 |  4649    */ | 
 |  4650   static const StaticWarningCode PART_OF_DIFFERENT_LIBRARY = | 
 |  4651       const StaticWarningCode('PART_OF_DIFFERENT_LIBRARY', | 
 |  4652           "Expected this library to be part of '{0}', not '{1}'"); | 
 |  4653  | 
 |  4654   /** | 
 |  4655    * 7.6.2 Factories: It is a static warning if the function type of <i>k'</i> | 
 |  4656    * is not a subtype of the type of <i>k</i>. | 
 |  4657    * | 
 |  4658    * Parameters: | 
 |  4659    * 0: the name of the redirected constructor | 
 |  4660    * 1: the name of the redirecting constructor | 
 |  4661    */ | 
 |  4662   static const StaticWarningCode REDIRECT_TO_INVALID_FUNCTION_TYPE = | 
 |  4663       const StaticWarningCode('REDIRECT_TO_INVALID_FUNCTION_TYPE', | 
 |  4664           "The redirected constructor '{0}' has incompatible parameters with '{1
      }'"); | 
 |  4665  | 
 |  4666   /** | 
 |  4667    * 7.6.2 Factories: It is a static warning if the function type of <i>k'</i> | 
 |  4668    * is not a subtype of the type of <i>k</i>. | 
 |  4669    * | 
 |  4670    * Parameters: | 
 |  4671    * 0: the name of the redirected constructor return type | 
 |  4672    * 1: the name of the redirecting constructor return type | 
 |  4673    */ | 
 |  4674   static const StaticWarningCode REDIRECT_TO_INVALID_RETURN_TYPE = | 
 |  4675       const StaticWarningCode('REDIRECT_TO_INVALID_RETURN_TYPE', | 
 |  4676           "The return type '{0}' of the redirected constructor is not assignable
       to '{1}'"); | 
 |  4677  | 
 |  4678   /** | 
 |  4679    * 7.6.2 Factories: It is a static warning if type does not denote a class | 
 |  4680    * accessible in the current scope; if type does denote such a class <i>C</i> | 
 |  4681    * it is a static warning if the referenced constructor (be it <i>type</i> or | 
 |  4682    * <i>type.id</i>) is not a constructor of <i>C</i>. | 
 |  4683    */ | 
 |  4684   static const StaticWarningCode REDIRECT_TO_MISSING_CONSTRUCTOR = | 
 |  4685       const StaticWarningCode('REDIRECT_TO_MISSING_CONSTRUCTOR', | 
 |  4686           "The constructor '{0}' could not be found in '{1}'"); | 
 |  4687  | 
 |  4688   /** | 
 |  4689    * 7.6.2 Factories: It is a static warning if type does not denote a class | 
 |  4690    * accessible in the current scope; if type does denote such a class <i>C</i> | 
 |  4691    * it is a static warning if the referenced constructor (be it <i>type</i> or | 
 |  4692    * <i>type.id</i>) is not a constructor of <i>C</i>. | 
 |  4693    */ | 
 |  4694   static const StaticWarningCode REDIRECT_TO_NON_CLASS = const StaticWarningCode
      ( | 
 |  4695       'REDIRECT_TO_NON_CLASS', | 
 |  4696       "The name '{0}' is not a type and cannot be used in a redirected construct
      or"); | 
 |  4697  | 
 |  4698   /** | 
 |  4699    * 13.12 Return: Let <i>f</i> be the function immediately enclosing a return | 
 |  4700    * statement of the form <i>return;</i> It is a static warning if both of the | 
 |  4701    * following conditions hold: | 
 |  4702    * * <i>f</i> is not a generative constructor. | 
 |  4703    * * The return type of <i>f</i> may not be assigned to void. | 
 |  4704    */ | 
 |  4705   static const StaticWarningCode RETURN_WITHOUT_VALUE = const StaticWarningCode( | 
 |  4706       'RETURN_WITHOUT_VALUE', "Missing return value after 'return'"); | 
 |  4707  | 
 |  4708   /** | 
 |  4709    * 12.16.3 Static Invocation: It is a static warning if <i>C</i> does not | 
 |  4710    * declare a static method or getter <i>m</i>. | 
 |  4711    * | 
 |  4712    * Parameters: | 
 |  4713    * 0: the name of the instance member | 
 |  4714    */ | 
 |  4715   static const StaticWarningCode STATIC_ACCESS_TO_INSTANCE_MEMBER = | 
 |  4716       const StaticWarningCode('STATIC_ACCESS_TO_INSTANCE_MEMBER', | 
 |  4717           "Instance member '{0}' cannot be accessed using static access"); | 
 |  4718  | 
 |  4719   /** | 
 |  4720    * 13.9 Switch: It is a static warning if the type of <i>e</i> may not be | 
 |  4721    * assigned to the type of <i>e<sub>k</sub></i>. | 
 |  4722    */ | 
 |  4723   static const StaticWarningCode SWITCH_EXPRESSION_NOT_ASSIGNABLE = | 
 |  4724       const StaticWarningCode('SWITCH_EXPRESSION_NOT_ASSIGNABLE', | 
 |  4725           "Type '{0}' of the switch expression is not assignable to the type '{1
      }' of case expressions"); | 
 |  4726  | 
 |  4727   /** | 
 |  4728    * 15.1 Static Types: It is a static warning to use a deferred type in a type | 
 |  4729    * annotation. | 
 |  4730    * | 
 |  4731    * Parameters: | 
 |  4732    * 0: the name of the type that is deferred and being used in a type | 
 |  4733    *    annotation | 
 |  4734    */ | 
 |  4735   static const StaticWarningCode TYPE_ANNOTATION_DEFERRED_CLASS = | 
 |  4736       const StaticWarningCode('TYPE_ANNOTATION_DEFERRED_CLASS', | 
 |  4737           "The deferred type '{0}' cannot be used in a declaration, cast or type
       test"); | 
 |  4738  | 
 |  4739   /** | 
 |  4740    * 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type | 
 |  4741    * available in the current lexical scope. | 
 |  4742    */ | 
 |  4743   static const StaticWarningCode TYPE_TEST_WITH_NON_TYPE = const StaticWarningCo
      de( | 
 |  4744       'TYPE_TEST_WITH_NON_TYPE', | 
 |  4745       "The name '{0}' is not a type and cannot be used in an 'is' expression"); | 
 |  4746  | 
 |  4747   /** | 
 |  4748    * 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type | 
 |  4749    * available in the current lexical scope. | 
 |  4750    */ | 
 |  4751   static const StaticWarningCode TYPE_TEST_WITH_UNDEFINED_NAME = | 
 |  4752       const StaticWarningCode('TYPE_TEST_WITH_UNDEFINED_NAME', | 
 |  4753           "The name '{0}' is not defined and cannot be used in an 'is' expressio
      n"); | 
 |  4754  | 
 |  4755   /** | 
 |  4756    * 10 Generics: However, a type parameter is considered to be a malformed type | 
 |  4757    * when referenced by a static member. | 
 |  4758    * | 
 |  4759    * 15.1 Static Types: Any use of a malformed type gives rise to a static | 
 |  4760    * warning. A malformed type is then interpreted as dynamic by the static type | 
 |  4761    * checker and the runtime. | 
 |  4762    */ | 
 |  4763   static const StaticWarningCode TYPE_PARAMETER_REFERENCED_BY_STATIC = | 
 |  4764       const StaticWarningCode('TYPE_PARAMETER_REFERENCED_BY_STATIC', | 
 |  4765           "Static members cannot reference type parameters"); | 
 |  4766  | 
 |  4767   /** | 
 |  4768    * 12.16.3 Static Invocation: A static method invocation <i>i</i> has the form | 
 |  4769    * <i>C.m(a<sub>1</sub>, …, a<sub>n</sub>, x<sub>n+1</sub>: | 
 |  4770    * a<sub>n+1</sub>, … x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. It is a | 
 |  4771    * static warning if <i>C</i> does not denote a class in the current scope. | 
 |  4772    * | 
 |  4773    * Parameters: | 
 |  4774    * 0: the name of the undefined class | 
 |  4775    */ | 
 |  4776   static const StaticWarningCode UNDEFINED_CLASS = | 
 |  4777       const StaticWarningCode('UNDEFINED_CLASS', "Undefined class '{0}'"); | 
 |  4778  | 
 |  4779   /** | 
 |  4780    * Same as [UNDEFINED_CLASS], but to catch using "boolean" instead of "bool". | 
 |  4781    */ | 
 |  4782   static const StaticWarningCode UNDEFINED_CLASS_BOOLEAN = | 
 |  4783       const StaticWarningCode('UNDEFINED_CLASS_BOOLEAN', | 
 |  4784           "Undefined class 'boolean'; did you mean 'bool'?"); | 
 |  4785  | 
 |  4786   /** | 
 |  4787    * 12.17 Getter Invocation: It is a static warning if there is no class | 
 |  4788    * <i>C</i> in the enclosing lexical scope of <i>i</i>, or if <i>C</i> does | 
 |  4789    * not declare, implicitly or explicitly, a getter named <i>m</i>. | 
 |  4790    * | 
 |  4791    * Parameters: | 
 |  4792    * 0: the name of the getter | 
 |  4793    * 1: the name of the enclosing type where the getter is being looked for | 
 |  4794    */ | 
 |  4795   static const StaticWarningCode UNDEFINED_GETTER = const StaticWarningCode( | 
 |  4796       'UNDEFINED_GETTER', | 
 |  4797       "The getter '{0}' is not defined for the class '{1}'"); | 
 |  4798  | 
 |  4799   /** | 
 |  4800    * 12.30 Identifier Reference: It is as static warning if an identifier | 
 |  4801    * expression of the form <i>id</i> occurs inside a top level or static | 
 |  4802    * function (be it function, method, getter, or setter) or variable | 
 |  4803    * initializer and there is no declaration <i>d</i> with name <i>id</i> in the | 
 |  4804    * lexical scope enclosing the expression. | 
 |  4805    * | 
 |  4806    * Parameters: | 
 |  4807    * 0: the name of the identifier | 
 |  4808    */ | 
 |  4809   static const StaticWarningCode UNDEFINED_IDENTIFIER = | 
 |  4810       const StaticWarningCode('UNDEFINED_IDENTIFIER', "Undefined name '{0}'"); | 
 |  4811  | 
 |  4812   /** | 
 |  4813    * 12.14.2 Binding Actuals to Formals: Furthermore, each <i>q<sub>i</sub></i>, | 
 |  4814    * <i>1<=i<=l</i>, must have a corresponding named parameter in the set | 
 |  4815    * {<i>p<sub>n+1</sub></i> … <i>p<sub>n+k</sub></i>} or a static | 
 |  4816    * warning occurs. | 
 |  4817    * | 
 |  4818    * Parameters: | 
 |  4819    * 0: the name of the requested named parameter | 
 |  4820    */ | 
 |  4821   static const StaticWarningCode UNDEFINED_NAMED_PARAMETER = | 
 |  4822       const StaticWarningCode('UNDEFINED_NAMED_PARAMETER', | 
 |  4823           "The named parameter '{0}' is not defined"); | 
 |  4824  | 
 |  4825   /** | 
 |  4826    * 12.18 Assignment: It is as static warning if an assignment of the form | 
 |  4827    * <i>v = e</i> occurs inside a top level or static function (be it function, | 
 |  4828    * method, getter, or setter) or variable initializer and there is no | 
 |  4829    * declaration <i>d</i> with name <i>v=</i> in the lexical scope enclosing the | 
 |  4830    * assignment. | 
 |  4831    * | 
 |  4832    * 12.18 Assignment: It is a static warning if there is no class <i>C</i> in | 
 |  4833    * the enclosing lexical scope of the assignment, or if <i>C</i> does not | 
 |  4834    * declare, implicitly or explicitly, a setter <i>v=</i>. | 
 |  4835    * | 
 |  4836    * Parameters: | 
 |  4837    * 0: the name of the getter | 
 |  4838    * 1: the name of the enclosing type where the setter is being looked for | 
 |  4839    */ | 
 |  4840   static const StaticWarningCode UNDEFINED_SETTER = const StaticWarningCode( | 
 |  4841       'UNDEFINED_SETTER', | 
 |  4842       "The setter '{0}' is not defined for the class '{1}'"); | 
 |  4843  | 
 |  4844   /** | 
 |  4845    * 12.16.3 Static Invocation: It is a static warning if <i>C</i> does not | 
 |  4846    * declare a static method or getter <i>m</i>. | 
 |  4847    * | 
 |  4848    * Parameters: | 
 |  4849    * 0: the name of the method | 
 |  4850    * 1: the name of the enclosing type where the method is being looked for | 
 |  4851    */ | 
 |  4852   static const StaticWarningCode UNDEFINED_STATIC_METHOD_OR_GETTER = | 
 |  4853       const StaticWarningCode('UNDEFINED_STATIC_METHOD_OR_GETTER', | 
 |  4854           "The static method, getter or setter '{0}' is not defined for the clas
      s '{1}'"); | 
 |  4855  | 
 |  4856   /** | 
 |  4857    * 12.17 Getter Invocation: It is a static warning if there is no class | 
 |  4858    * <i>C</i> in the enclosing lexical scope of <i>i</i>, or if <i>C</i> does | 
 |  4859    * not declare, implicitly or explicitly, a getter named <i>m</i>. | 
 |  4860    * | 
 |  4861    * Parameters: | 
 |  4862    * 0: the name of the getter | 
 |  4863    * 1: the name of the enclosing type where the getter is being looked for | 
 |  4864    */ | 
 |  4865   static const StaticWarningCode UNDEFINED_SUPER_GETTER = | 
 |  4866       const StaticWarningCode('UNDEFINED_SUPER_GETTER', | 
 |  4867           "The getter '{0}' is not defined in a superclass of '{1}'"); | 
 |  4868  | 
 |  4869   /** | 
 |  4870    * 12.18 Assignment: It is as static warning if an assignment of the form | 
 |  4871    * <i>v = e</i> occurs inside a top level or static function (be it function, | 
 |  4872    * method, getter, or setter) or variable initializer and there is no | 
 |  4873    * declaration <i>d</i> with name <i>v=</i> in the lexical scope enclosing the | 
 |  4874    * assignment. | 
 |  4875    * | 
 |  4876    * 12.18 Assignment: It is a static warning if there is no class <i>C</i> in | 
 |  4877    * the enclosing lexical scope of the assignment, or if <i>C</i> does not | 
 |  4878    * declare, implicitly or explicitly, a setter <i>v=</i>. | 
 |  4879    * | 
 |  4880    * Parameters: | 
 |  4881    * 0: the name of the getter | 
 |  4882    * 1: the name of the enclosing type where the setter is being looked for | 
 |  4883    */ | 
 |  4884   static const StaticWarningCode UNDEFINED_SUPER_SETTER = | 
 |  4885       const StaticWarningCode('UNDEFINED_SUPER_SETTER', | 
 |  4886           "The setter '{0}' is not defined in a superclass of '{1}'"); | 
 |  4887  | 
 |  4888   /** | 
 |  4889    * 7.2 Getters: It is a static warning if the return type of a getter is void. | 
 |  4890    */ | 
 |  4891   static const StaticWarningCode VOID_RETURN_FOR_GETTER = | 
 |  4892       const StaticWarningCode('VOID_RETURN_FOR_GETTER', | 
 |  4893           "The return type of the getter must not be 'void'"); | 
 |  4894  | 
 |  4895   /** | 
 |  4896    * Initialize a newly created error code to have the given [name]. The message | 
 |  4897    * associated with the error will be created from the given [message] | 
 |  4898    * template. The correction associated with the error will be created from the | 
 |  4899    * given [correction] template. | 
 |  4900    */ | 
 |  4901   const StaticWarningCode(String name, String message, [String correction]) | 
 |  4902       : super(name, message, correction); | 
 |  4903  | 
 |  4904   @override | 
 |  4905   ErrorSeverity get errorSeverity => ErrorType.STATIC_WARNING.severity; | 
 |  4906  | 
 |  4907   @override | 
 |  4908   ErrorType get type => ErrorType.STATIC_WARNING; | 
 |  4909 } | 
 |  4910  | 
 |  4911 /** | 
 |  4912  * The error code indicating a marker in code for work that needs to be finished | 
 |  4913  * or revisited. | 
 |  4914  */ | 
 |  4915 class TodoCode extends ErrorCode { | 
 |  4916   /** | 
 |  4917    * The single enum of TodoCode. | 
 |  4918    */ | 
 |  4919   static const TodoCode TODO = const TodoCode('TODO'); | 
 |  4920  | 
 |  4921   /** | 
 |  4922    * This matches the two common Dart task styles | 
 |  4923    * | 
 |  4924    * * TODO: | 
 |  4925    * * TODO(username): | 
 |  4926    * | 
 |  4927    * As well as | 
 |  4928    * * TODO | 
 |  4929    * | 
 |  4930    * But not | 
 |  4931    * * todo | 
 |  4932    * * TODOS | 
 |  4933    */ | 
 |  4934   static RegExp TODO_REGEX = | 
 |  4935       new RegExp("([\\s/\\*])((TODO[^\\w\\d][^\\r\\n]*)|(TODO:?\$))"); | 
 |  4936  | 
 |  4937   /** | 
 |  4938    * Initialize a newly created error code to have the given [name]. | 
 |  4939    */ | 
 |  4940   const TodoCode(String name) : super(name, "{0}"); | 
 |  4941  | 
 |  4942   @override | 
 |  4943   ErrorSeverity get errorSeverity => ErrorSeverity.INFO; | 
 |  4944  | 
 |  4945   @override | 
 |  4946   ErrorType get type => ErrorType.TODO; | 
 |  4947 } | 
| OLD | NEW |