Chromium Code Reviews| Index: sdk/lib/core/errors.dart |
| diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart |
| index 0ac18808e643191f51e96665a57656df8ad4e2bf..0244ea91753d4e98bf7f9d9ff093520e27a22b5d 100644 |
| --- a/sdk/lib/core/errors.dart |
| +++ b/sdk/lib/core/errors.dart |
| @@ -157,7 +157,7 @@ class ArgumentError extends Error { |
| */ |
| ArgumentError.value(value, |
| [String this.name, |
| - String this.message = "Invalid argument"]) |
| + String this.message]) |
| : invalidValue = value, |
| _hasValue = true; |
| @@ -170,19 +170,22 @@ class ArgumentError extends Error { |
| ArgumentError.notNull([String name]) |
| : this.value(null, name, "Must not be null"); |
| + // Helper functions for toString overridden in subclasses. |
| + String get _errorName => "Invalid argument${name == null ? "(s)" : ""}"; |
|
Søren Gjesse
2015/01/27 15:27:59
Maybe use ''s for either the outer string or the s
|
| + String get _errorExplanation => ""; |
| + |
| String toString() { |
| - if (!_hasValue) { |
| - var result = "Invalid arguments(s)"; |
| - if (message != null) { |
| - result = "$result: $message"; |
| - } |
| - return result; |
| - } |
| String nameString = ""; |
| if (name != null) { |
| nameString = " ($name)"; |
| } |
| - return "$message$nameString: ${Error.safeToString(invalidValue)}"; |
| + var message = this.message == null ? "" : ": ${this.message}"; |
| + String prefix = "$_errorName$nameString$message"; |
| + if (invalidValue == null) return prefix; |
| + // If we know the invalid value, we can try to describe the problem. |
| + String explanation = _errorExplanation; |
| + String errorValue = Error.safeToString(invalidValue); |
| + return "$prefix$explanation: $errorValue"; |
| } |
| } |
| @@ -274,7 +277,7 @@ class RangeError extends ArgumentError { |
| * `[]` that accepts an index if `0 <= index < length`. |
| * |
| * If [length] is provided, it is used as the length of the indexable object, |
| - * otherwise the length is found as `idexable.length`. |
| + * otherwise the length is found as `indexable.length`. |
| */ |
| static void checkValidIndex(int index, var indexable, |
| [String name, int length, String message]) { |
| @@ -320,9 +323,9 @@ class RangeError extends ArgumentError { |
| if (value < 0) throw new RangeError.range(value, 0, null, name, message); |
| } |
| - String toString() { |
| - if (!_hasValue) return "RangeError: $message"; |
| - String value = Error.safeToString(invalidValue); |
| + String get _errorName => "RangeError"; |
| + String get _errorExplanation { |
| + assert(_hasValue); |
| String explanation = ""; |
| if (start == null) { |
| if (end != null) { |
| @@ -332,14 +335,14 @@ class RangeError extends ArgumentError { |
| } else if (end == null) { |
| explanation = ": Not greater than or equal to $start"; |
| } else if (end > start) { |
| - explanation = ": Not in range $start..$end, inclusive."; |
| + explanation = ": Not in range $start..$end, inclusive"; |
| } else if (end < start) { |
| explanation = ": Valid value range is empty"; |
| } else { |
| // end == start. |
| explanation = ": Only valid value is $start"; |
| } |
| - return "RangeError: $message ($value)$explanation"; |
| + return explanation; |
| } |
| } |
| @@ -376,14 +379,15 @@ class IndexError extends ArgumentError implements RangeError { |
| int get start => 0; |
| int get end => length - 1; |
| - String toString() { |
| + String get _errorName => "RangeError"; |
| + String get _errorExplanation { |
| assert(_hasValue); |
| String target = Error.safeToString(indexable); |
| - var explanation = "index should be less than $length"; |
| + var explanation = ": index should be less than $length"; |
| if (invalidValue < 0) { |
| - explanation = "index must not be negative"; |
| + explanation = ": index must not be negative"; |
| } |
| - return "RangeError: $message ($target[$invalidValue]): $explanation"; |
| + return explanation; |
| } |
| } |