| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2014 Google Inc. All Rights Reserved. |  | 
| 2 // |  | 
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); |  | 
| 4 // you may not use this file except in compliance with the License. |  | 
| 5 // You may obtain a copy of the License at |  | 
| 6 // |  | 
| 7 //     http://www.apache.org/licenses/LICENSE-2.0 |  | 
| 8 // |  | 
| 9 // Unless required by applicable law or agreed to in writing, software |  | 
| 10 // distributed under the License is distributed on an "AS IS" BASIS, |  | 
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | 
| 12 // See the License for the specific language governing permissions and |  | 
| 13 // limitations under the License. |  | 
| 14 |  | 
| 15 /// A simple set of pre/post-condition checkers based on the |  | 
| 16 /// [Guava](https://code.google.com/p/guava-libraries/) Preconditions |  | 
| 17 /// class in Java. |  | 
| 18 /// |  | 
| 19 /// These checks are stronger than 'assert' statements, which can be |  | 
| 20 /// switched off, so they must only be used in situations where we actively |  | 
| 21 /// want the program to break when the check fails. |  | 
| 22 /// |  | 
| 23 /// ## Performance |  | 
| 24 /// Performance may be an issue with these checks if complex logic is computed |  | 
| 25 /// in order to make the method call. You should be careful with its use in |  | 
| 26 /// these cases - this library is aimed at improving maintainability and |  | 
| 27 /// readability rather than performance. They are also useful when the program |  | 
| 28 /// should fail early - for example, null-checking a parameter that might not |  | 
| 29 /// be used until the end of the method call. |  | 
| 30 /// |  | 
| 31 /// ## Error messages |  | 
| 32 /// The message parameter can be either a `() => Object` or any other `Object`. |  | 
| 33 /// The object will be converted to an error message by calling its |  | 
| 34 /// `toString()`. The `Function` should be preferred if the message is complex |  | 
| 35 /// to construct (i.e., it uses `String` interpolation), because it is only |  | 
| 36 /// called when the check fails. |  | 
| 37 /// |  | 
| 38 /// If the message parameter is `null` or returns `null`, a default error |  | 
| 39 /// message will be used. |  | 
| 40 library quiver.check; |  | 
| 41 |  | 
| 42 /// Throws an [ArgumentError] if the given [expression] is `false`. |  | 
| 43 void checkArgument(bool expression, {message}) { |  | 
| 44   if (!expression) { |  | 
| 45     throw new ArgumentError(_resolveMessage(message, null)); |  | 
| 46   } |  | 
| 47 } |  | 
| 48 |  | 
| 49 /// Throws a [RangeError] if the given [index] is not a valid index for a list |  | 
| 50 /// with [size] elements. Otherwise, returns the [index] parameter. |  | 
| 51 int checkListIndex(int index, int size, {message}) { |  | 
| 52   if (index < 0 || index >= size) { |  | 
| 53     throw new RangeError(_resolveMessage( |  | 
| 54         message, 'index $index not valid for list of size $size')); |  | 
| 55   } |  | 
| 56   return index; |  | 
| 57 } |  | 
| 58 |  | 
| 59 /// Throws an [ArgumentError] if the given [reference] is `null`. Otherwise, |  | 
| 60 /// returns the [reference] parameter. |  | 
| 61 dynamic checkNotNull(reference, {message}) { |  | 
| 62   if (reference == null) { |  | 
| 63     throw new ArgumentError(_resolveMessage(message, 'null pointer')); |  | 
| 64   } |  | 
| 65   return reference; |  | 
| 66 } |  | 
| 67 |  | 
| 68 /// Throws a [StateError] if the given [expression] is `false`. |  | 
| 69 void checkState(bool expression, {message}) { |  | 
| 70   if (!expression) { |  | 
| 71     throw new StateError(_resolveMessage(message, 'failed precondition')); |  | 
| 72   } |  | 
| 73 } |  | 
| 74 |  | 
| 75 String _resolveMessage(message, String defaultMessage) { |  | 
| 76   if (message is Function) message = message(); |  | 
| 77   if (message == null) return defaultMessage; |  | 
| 78   return message.toString(); |  | 
| 79 } |  | 
| OLD | NEW | 
|---|