OLD | NEW |
1 // Copyright (c) 2015, the Fletch project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Fletch 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
4 | 4 |
5 library fletchc.diagnostic; | 5 library fletchc.diagnostic; |
6 | 6 |
7 import 'messages.dart' show | 7 import 'messages.dart' show |
8 DiagnosticKind, | 8 DiagnosticKind, |
9 getMessage; | 9 getMessage; |
10 | 10 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 Target target = value; | 117 Target target = value; |
118 // TODO(ahe): Improve this conversion. | 118 // TODO(ahe): Improve this conversion. |
119 stringValue = target.toString(); | 119 stringValue = target.toString(); |
120 break; | 120 break; |
121 } | 121 } |
122 result[parameter.name] = stringValue; | 122 result[parameter.name] = stringValue; |
123 }); | 123 }); |
124 return result; | 124 return result; |
125 } | 125 } |
126 | 126 |
| 127 /// Throw an internal error that will be recorded as a compiler crash. |
| 128 /// |
| 129 /// In general, assume, no matter how unlikely, that [message] may be read by a |
| 130 /// user (that is, a developer using Fletch). For this reason, try to: |
| 131 /// |
| 132 /// * Avoid phrases that can be interpreted as blaming the user (all error |
| 133 /// messages should state what is wrong, in a way that doesn't assign blame). |
| 134 /// |
| 135 /// * Avoid being cute or funny (there's nothing more frustrating than being |
| 136 /// affected by a bug and see a cute or funny message, especially if it |
| 137 /// happens a lot). |
| 138 /// |
| 139 /// * Avoid phrases like "unreachable", "can't happen", "shouldn't happen", |
| 140 /// "shouldn't be called", simply because it is wrong: it did happen. In most |
| 141 /// cases a factual message would be "unimplemented", "unhandled case", |
| 142 /// etc. Remember that the stacktrace will pinpoint the exact location of the |
| 143 /// problem, so no need to repeat a method name. |
127 void throwInternalError(String message) { | 144 void throwInternalError(String message) { |
128 throw new InputError( | 145 throw new InputError( |
129 DiagnosticKind.internalError, | 146 DiagnosticKind.internalError, |
130 <DiagnosticParameter, dynamic>{DiagnosticParameter.message: message}); | 147 <DiagnosticParameter, dynamic>{DiagnosticParameter.message: message}); |
131 } | 148 } |
132 | 149 |
133 void throwFatalError( | 150 void throwFatalError( |
134 DiagnosticKind kind, | 151 DiagnosticKind kind, |
135 {String message, | 152 {String message, |
136 ResolvedVerb verb, | 153 ResolvedVerb verb, |
(...skipping 16 matching lines...) Expand all Loading... |
153 arguments[DiagnosticParameter.target] = target; | 170 arguments[DiagnosticParameter.target] = target; |
154 } | 171 } |
155 if (address != null) { | 172 if (address != null) { |
156 arguments[DiagnosticParameter.address] = address; | 173 arguments[DiagnosticParameter.address] = address; |
157 } | 174 } |
158 if (userInput != null) { | 175 if (userInput != null) { |
159 arguments[DiagnosticParameter.userInput] = address; | 176 arguments[DiagnosticParameter.userInput] = address; |
160 } | 177 } |
161 throw new InputError(kind, arguments); | 178 throw new InputError(kind, arguments); |
162 } | 179 } |
OLD | NEW |