OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer.source.error_processor; | 5 library analyzer.source.error_processor; |
6 | 6 |
7 import 'package:analyzer/src/generated/engine.dart'; | 7 import 'package:analyzer/src/generated/engine.dart'; |
8 import 'package:analyzer/src/generated/error.dart'; | 8 import 'package:analyzer/src/generated/error.dart'; |
9 import 'package:analyzer/src/generated/utilities_general.dart'; | 9 import 'package:analyzer/src/generated/utilities_general.dart'; |
10 import 'package:analyzer/src/task/options.dart'; | 10 import 'package:analyzer/src/task/options.dart'; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 /// Check if this processor applies to the given [error]. | 86 /// Check if this processor applies to the given [error]. |
87 bool appliesTo(AnalysisError error) => code == error.errorCode.name; | 87 bool appliesTo(AnalysisError error) => code == error.errorCode.name; |
88 | 88 |
89 /// Return an error processor associated with this [context] for the given | 89 /// Return an error processor associated with this [context] for the given |
90 /// [error], or `null` if none is found. | 90 /// [error], or `null` if none is found. |
91 static ErrorProcessor getProcessor( | 91 static ErrorProcessor getProcessor( |
92 AnalysisContext context, AnalysisError error) { | 92 AnalysisContext context, AnalysisError error) { |
93 if (context == null) { | 93 if (context == null) { |
94 return null; | 94 return null; |
95 } | 95 } |
| 96 |
| 97 // By default, the error is not processed. |
| 98 ErrorProcessor processor; |
| 99 |
| 100 // Give strong mode a chance to upgrade it. |
| 101 if (context.analysisOptions.strongMode) { |
| 102 processor = _StrongModeTypeErrorProcessor.instance; |
| 103 } |
| 104 |
| 105 // Let the user configure how specific errors are processed. |
96 List<ErrorProcessor> processors = | 106 List<ErrorProcessor> processors = |
97 context.getConfigurationData(CONFIGURED_ERROR_PROCESSORS); | 107 context.getConfigurationData(CONFIGURED_ERROR_PROCESSORS); |
| 108 |
98 return processors.firstWhere((ErrorProcessor p) => p.appliesTo(error), | 109 return processors.firstWhere((ErrorProcessor p) => p.appliesTo(error), |
99 orElse: () => null); | 110 orElse: () => processor); |
100 } | 111 } |
101 } | 112 } |
| 113 |
| 114 /// In strong mode, this upgrades static type warnings to errors. |
| 115 class _StrongModeTypeErrorProcessor implements ErrorProcessor { |
| 116 static final instance = new _StrongModeTypeErrorProcessor(); |
| 117 |
| 118 // TODO(rnystrom): As far as I know, this is only used to implement |
| 119 // appliesTo(). Consider making it private in ErrorProcessor if possible. |
| 120 String get code => throw new UnsupportedError( |
| 121 "_StrongModeTypeErrorProcessor is not specific to an error code."); |
| 122 |
| 123 /// In strong mode, type warnings are upgraded to errors. |
| 124 ErrorSeverity get severity => ErrorSeverity.ERROR; |
| 125 |
| 126 /// Check if this processor applies to the given [error]. |
| 127 bool appliesTo(AnalysisError error) => |
| 128 error.errorCode.type == ErrorType.STATIC_TYPE_WARNING; |
| 129 } |
OLD | NEW |