| Index: samples/swarm/swarm_ui_lib/util/CollectionUtils.dart | 
| diff --git a/samples/swarm/swarm_ui_lib/util/CollectionUtils.dart b/samples/swarm/swarm_ui_lib/util/CollectionUtils.dart | 
| index ca8e0191a60a3bf55e58c9332feab36a9ed7a347..763738b6ae4997c24062a2a08ad83b421d676cee 100644 | 
| --- a/samples/swarm/swarm_ui_lib/util/CollectionUtils.dart | 
| +++ b/samples/swarm/swarm_ui_lib/util/CollectionUtils.dart | 
| @@ -40,22 +40,6 @@ class CollectionUtils { | 
| } | 
| } | 
|  | 
| -  // Collection<T> supports most of the ES 5 list methods, but it's missing | 
| -  // map. | 
| - | 
| -  // TODO(jmesserly): we might want a version of this that return an iterable, | 
| -  // however JS, Python and Ruby versions are all eager. | 
| -  static List map(Iterable source, var mapper) { | 
| -    // TODO(jmesserly): I was trying to set the capacity here, but instead it | 
| -    // seems to create a fixed list. Hence assigning by index below. | 
| -    List result = new List(source is List ? (source as List).length : null); | 
| -    int i = 0; | 
| -    for (final item in source) { | 
| -      result[i++] = mapper(item); | 
| -    } | 
| -    return result; | 
| -  } | 
| - | 
| /** | 
| * Finds the item in [source] that matches [test].  Returns null if | 
| * no item matches.  The typing should be: | 
| @@ -72,26 +56,26 @@ class CollectionUtils { | 
|  | 
| /** Compute the minimum of an iterable. Returns null if empty. */ | 
| static num min(Iterable source) { | 
| -    final iter = source.iterator(); | 
| -    if (!iter.hasNext) { | 
| +    final iter = source.iterator; | 
| +    if (!iter.moveNext()) { | 
| return null; | 
| } | 
| -    num best = iter.next(); | 
| -    while (iter.hasNext) { | 
| -      best = Math.min(best, iter.next()); | 
| +    num best = iter.current; | 
| +    while (iter.moveNext()) { | 
| +      best = Math.min(best, iter.current); | 
| } | 
| return best; | 
| } | 
|  | 
| /** Compute the maximum of an iterable. Returns null if empty. */ | 
| static num max(Iterable source) { | 
| -    final iter = source.iterator(); | 
| -    if (!iter.hasNext) { | 
| +    final iter = source.iterator; | 
| +    if (!iter.moveNext()) { | 
| return null; | 
| } | 
| -    num best = iter.next(); | 
| -    while (iter.hasNext) { | 
| -      best = Math.max(best, iter.next()); | 
| +    num best = iter.current; | 
| +    while (iter.moveNext()) { | 
| +      best = Math.max(best, iter.current); | 
| } | 
| return best; | 
| } | 
| @@ -117,17 +101,21 @@ class CollectionUtils { | 
|  | 
| /** Compute the sum of an iterable. An empty iterable is an error. */ | 
| static num sum(Iterable source, [NumericValueSelector selector = null]) { | 
| -    final iter = source.iterator(); | 
| +    final iter = source.iterator; | 
| +    bool wasEmpty = true; | 
| num total = 0; | 
| if (selector != null) { | 
| -      do { | 
| -        total += selector(iter.next()); | 
| -      } while (iter.hasNext); | 
| +      for (var element in source) { | 
| +        wasEmpty = false; | 
| +        total += selector(element); | 
| +      } | 
| } else { | 
| -      do { | 
| -        total += iter.next(); | 
| -      } while (iter.hasNext); | 
| +      for (num element in source) { | 
| +        wasEmpty = false; | 
| +        total += element; | 
| +      } | 
| } | 
| +    if (wasEmpty) throw new StateError("No elements"); | 
| return total; | 
| } | 
|  | 
|  |