| Index: tool/input_sdk/lib/collection/maps.dart
|
| diff --git a/tool/input_sdk/lib/collection/maps.dart b/tool/input_sdk/lib/collection/maps.dart
|
| index 5da1e8225e449ea12ccc5535574969ceed4801ba..7871b8720b1351190766c03865d7defec267e7c3 100644
|
| --- a/tool/input_sdk/lib/collection/maps.dart
|
| +++ b/tool/input_sdk/lib/collection/maps.dart
|
| @@ -68,7 +68,7 @@ abstract class MapMixin<K, V> implements Map<K, V> {
|
| }
|
|
|
| V putIfAbsent(K key, V ifAbsent()) {
|
| - if (keys.contains(key)) {
|
| + if (containsKey(key)) {
|
| return this[key];
|
| }
|
| return this[key] = ifAbsent();
|
| @@ -78,7 +78,7 @@ abstract class MapMixin<K, V> implements Map<K, V> {
|
| int get length => keys.length;
|
| bool get isEmpty => keys.isEmpty;
|
| bool get isNotEmpty => keys.isNotEmpty;
|
| - Iterable<V> get values => new _MapBaseValueIterable<V>(this);
|
| + Iterable<V> get values => new _MapBaseValueIterable<K, V>(this);
|
| String toString() => Maps.mapToString(this);
|
| }
|
|
|
| @@ -111,9 +111,9 @@ abstract class UnmodifiableMapBase<K, V> =
|
| * It accesses the values by iterating over the keys of the map, and using the
|
| * map's `operator[]` to lookup the keys.
|
| */
|
| -class _MapBaseValueIterable<V> extends IterableBase<V>
|
| - implements EfficientLength {
|
| - final Map _map;
|
| +class _MapBaseValueIterable<K, V> extends Iterable<V>
|
| + implements EfficientLength {
|
| + final Map<K, V> _map;
|
| _MapBaseValueIterable(this._map);
|
|
|
| int get length => _map.length;
|
| @@ -123,7 +123,7 @@ class _MapBaseValueIterable<V> extends IterableBase<V>
|
| V get single => _map[_map.keys.single];
|
| V get last => _map[_map.keys.last];
|
|
|
| - Iterator<V> get iterator => new _MapBaseValueIterator<V>(_map);
|
| + Iterator<V> get iterator => new _MapBaseValueIterator<K, V>(_map);
|
| }
|
|
|
| /**
|
| @@ -132,12 +132,14 @@ class _MapBaseValueIterable<V> extends IterableBase<V>
|
| * Iterates over the values of a map by iterating its keys and lookup up the
|
| * values.
|
| */
|
| -class _MapBaseValueIterator<V> implements Iterator<V> {
|
| - final Iterator _keys;
|
| - final Map _map;
|
| +class _MapBaseValueIterator<K, V> implements Iterator<V> {
|
| + final Iterator<K> _keys;
|
| + final Map<K, V> _map;
|
| V _current = null;
|
|
|
| - _MapBaseValueIterator(Map map) : _map = map, _keys = map.keys.iterator;
|
| + _MapBaseValueIterator(Map<K, V> map)
|
| + : _map = map,
|
| + _keys = map.keys.iterator;
|
|
|
| bool moveNext() {
|
| if (_keys.moveNext()) {
|
| @@ -218,18 +220,18 @@ class UnmodifiableMapView<K, V> =
|
| * necessary to implement each particular operation.
|
| */
|
| class Maps {
|
| - static bool containsValue(Map map, value) {
|
| + static bool containsValue(Map map, Object value) {
|
| for (final v in map.values) {
|
| - if (value == v) {
|
| + if (v == value) {
|
| return true;
|
| }
|
| }
|
| return false;
|
| }
|
|
|
| - static bool containsKey(Map map, key) {
|
| + static bool containsKey(Map map, Object key) {
|
| for (final k in map.keys) {
|
| - if (key == k) {
|
| + if (k == key) {
|
| return true;
|
| }
|
| }
|
| @@ -285,11 +287,11 @@ class Maps {
|
| */
|
| static String mapToString(Map m) {
|
| // Reuse the list in IterableBase for detecting toString cycles.
|
| - if (IterableBase._isToStringVisiting(m)) { return '{...}'; }
|
| + if (_isToStringVisiting(m)) { return '{...}'; }
|
|
|
| var result = new StringBuffer();
|
| try {
|
| - IterableBase._toStringVisiting.add(m);
|
| + _toStringVisiting.add(m);
|
| result.write('{');
|
| bool first = true;
|
| m.forEach((k, v) {
|
| @@ -303,8 +305,8 @@ class Maps {
|
| });
|
| result.write('}');
|
| } finally {
|
| - assert(identical(IterableBase._toStringVisiting.last, m));
|
| - IterableBase._toStringVisiting.removeLast();
|
| + assert(identical(_toStringVisiting.last, m));
|
| + _toStringVisiting.removeLast();
|
| }
|
|
|
| return result.toString();
|
|
|