| Index: tool/input_sdk/lib/internal/iterable.dart
|
| diff --git a/tool/input_sdk/lib/internal/iterable.dart b/tool/input_sdk/lib/internal/iterable.dart
|
| index 66361c6cf848f19f7e21e0a506f2415e3b3ac761..96d2dbc5306e3e6be42d7448fcf4c1bbd9c5eb1e 100644
|
| --- a/tool/input_sdk/lib/internal/iterable.dart
|
| +++ b/tool/input_sdk/lib/internal/iterable.dart
|
| @@ -172,7 +172,7 @@ abstract class ListIterable<E> extends IterableBase<E>
|
|
|
| Iterable<E> where(bool test(E element)) => super.where(test);
|
|
|
| - Iterable map(f(E element)) => new MappedListIterable(this, f);
|
| + Iterable/*<T>*/ map/*<T>*/(/*=T*/f(E element)) => new MappedListIterable<E, dynamic/*=T*/>(this, f);
|
|
|
| E reduce(E combine(var value, E element)) {
|
| int length = this.length;
|
| @@ -188,7 +188,7 @@ abstract class ListIterable<E> extends IterableBase<E>
|
| return value;
|
| }
|
|
|
| - fold(var initialValue, combine(var previousValue, E element)) {
|
| + /*=T*/ fold/*<T>*/(var/*=T*/ initialValue, /*=T*/combine(var/*=T*/ previousValue, E element)) {
|
| var value = initialValue;
|
| int length = this.length;
|
| for (int i = 0; i < length; i++) {
|
| @@ -716,13 +716,13 @@ class EmptyIterable<E> extends IterableBase<E> implements EfficientLength {
|
|
|
| Iterable<E> where(bool test(E element)) => this;
|
|
|
| - Iterable map(f(E element)) => const EmptyIterable();
|
| + Iterable/*<T>*/ map/*<T>*/(/*=T*/ f(E element)) => const EmptyIterable();
|
|
|
| E reduce(E combine(E value, E element)) {
|
| throw IterableElementError.noElement();
|
| }
|
|
|
| - fold(var initialValue, combine(var previousValue, E element)) {
|
| + /*=T*/ fold/*<T>*/(var/*=T*/ initialValue, /*=T*/ combine(var/*=T*/ previousValue, E element)) {
|
| return initialValue;
|
| }
|
|
|
| @@ -763,36 +763,36 @@ abstract class BidirectionalIterator<T> implements Iterator<T> {
|
| * The uses of this class will be replaced by mixins.
|
| */
|
| class IterableMixinWorkaround<T> {
|
| - static bool contains(Iterable iterable, var element) {
|
| + static bool contains/*<E>*/(Iterable/*<E>*/ iterable, var element) {
|
| for (final e in iterable) {
|
| if (e == element) return true;
|
| }
|
| return false;
|
| }
|
|
|
| - static void forEach(Iterable iterable, void f(o)) {
|
| + static void forEach/*<E>*/(Iterable/*<E>*/ iterable, void f(/*=E*/ o)) {
|
| for (final e in iterable) {
|
| f(e);
|
| }
|
| }
|
|
|
| - static bool any(Iterable iterable, bool f(o)) {
|
| + static bool any/*<E>*/(Iterable/*<E>*/ iterable, bool f(/*=E*/ o)) {
|
| for (final e in iterable) {
|
| if (f(e)) return true;
|
| }
|
| return false;
|
| }
|
|
|
| - static bool every(Iterable iterable, bool f(o)) {
|
| + static bool every/*<E>*/(Iterable/*<E>*/ iterable, bool f(/*=E*/ o)) {
|
| for (final e in iterable) {
|
| if (!f(e)) return false;
|
| }
|
| return true;
|
| }
|
|
|
| - static dynamic reduce(Iterable iterable,
|
| - dynamic combine(previousValue, element)) {
|
| - Iterator iterator = iterable.iterator;
|
| + static dynamic/*=E*/ reduce/*<E>*/(Iterable/*<E>*/ iterable,
|
| + dynamic/*=E*/ combine(/*=E*/previousValue, /*=E*/element)) {
|
| + Iterator/*<E>*/ iterator = iterable.iterator;
|
| if (!iterator.moveNext()) throw IterableElementError.noElement();
|
| var value = iterator.current;
|
| while (iterator.moveNext()) {
|
| @@ -801,9 +801,9 @@ class IterableMixinWorkaround<T> {
|
| return value;
|
| }
|
|
|
| - static dynamic fold(Iterable iterable,
|
| - dynamic initialValue,
|
| - dynamic combine(dynamic previousValue, element)) {
|
| + static /*=V*/ fold/*<E, V>*/(Iterable/*<E>*/ iterable,
|
| + dynamic/*=V*/ initialValue,
|
| + dynamic/*=V*/ combine(dynamic/*=V*/ previousValue, /*=E*/element)) {
|
| for (final element in iterable) {
|
| initialValue = combine(initialValue, element);
|
| }
|
| @@ -817,8 +817,8 @@ class IterableMixinWorkaround<T> {
|
| * to the [test] function. First the elements to retain are found, and then
|
| * the original list is updated to contain those elements.
|
| */
|
| - static void removeWhereList(List list, bool test(var element)) {
|
| - List retained = [];
|
| + static void removeWhereList/*<E>*/(List/*<E>*/ list, bool test(var/*=E*/ element)) {
|
| + List/*<E>*/ retained = [];
|
| int length = list.length;
|
| for (int i = 0; i < length; i++) {
|
| var element = list[i];
|
| @@ -836,54 +836,54 @@ class IterableMixinWorkaround<T> {
|
| }
|
| }
|
|
|
| - static bool isEmpty(Iterable iterable) {
|
| + static bool isEmpty/*<E>*/(Iterable/*<E>*/ iterable) {
|
| return !iterable.iterator.moveNext();
|
| }
|
|
|
| - static dynamic first(Iterable iterable) {
|
| - Iterator it = iterable.iterator;
|
| + static dynamic/*=E*/ first/*<E>*/(Iterable/*<E>*/ iterable) {
|
| + Iterator/*<E>*/ it = iterable.iterator;
|
| if (!it.moveNext()) {
|
| throw IterableElementError.noElement();
|
| }
|
| return it.current;
|
| }
|
|
|
| - static dynamic last(Iterable iterable) {
|
| - Iterator it = iterable.iterator;
|
| + static dynamic/*=E*/ last/*<E>*/(Iterable/*<E>*/ iterable) {
|
| + Iterator/*<E>*/ it = iterable.iterator;
|
| if (!it.moveNext()) {
|
| throw IterableElementError.noElement();
|
| }
|
| - dynamic result;
|
| + var/*=E*/ result;
|
| do {
|
| result = it.current;
|
| } while(it.moveNext());
|
| return result;
|
| }
|
|
|
| - static dynamic single(Iterable iterable) {
|
| - Iterator it = iterable.iterator;
|
| + static dynamic/*=E*/ single/*<E>*/(Iterable/*<E>*/ iterable) {
|
| + Iterator/*<E>*/ it = iterable.iterator;
|
| if (!it.moveNext()) throw IterableElementError.noElement();
|
| - dynamic result = it.current;
|
| + var result = it.current;
|
| if (it.moveNext()) throw IterableElementError.tooMany();
|
| return result;
|
| }
|
|
|
| - static dynamic firstWhere(Iterable iterable,
|
| - bool test(dynamic value),
|
| - dynamic orElse()) {
|
| - for (dynamic element in iterable) {
|
| + static dynamic/*=E*/ firstWhere/*<E>*/(Iterable/*<E>*/ iterable,
|
| + bool test(dynamic/*=E*/ value),
|
| + dynamic/*=E*/ orElse()) {
|
| + for (var element in iterable) {
|
| if (test(element)) return element;
|
| }
|
| if (orElse != null) return orElse();
|
| throw IterableElementError.noElement();
|
| }
|
|
|
| - static dynamic lastWhere(Iterable iterable,
|
| - bool test(dynamic value),
|
| - dynamic orElse()) {
|
| - dynamic result = null;
|
| + static dynamic/*=E*/ lastWhere/*<E>*/(Iterable/*<E>*/ iterable,
|
| + bool test(dynamic/*=E*/ value),
|
| + dynamic/*=E*/ orElse()) {
|
| + dynamic/*=E*/ result = null;
|
| bool foundMatching = false;
|
| - for (dynamic element in iterable) {
|
| + for (var element in iterable) {
|
| if (test(element)) {
|
| result = element;
|
| foundMatching = true;
|
| @@ -894,22 +894,22 @@ class IterableMixinWorkaround<T> {
|
| throw IterableElementError.noElement();
|
| }
|
|
|
| - static dynamic lastWhereList(List list,
|
| - bool test(dynamic value),
|
| - dynamic orElse()) {
|
| + static dynamic/*=E*/ lastWhereList/*<E>*/(List/*<E>*/ list,
|
| + bool test(dynamic/*=E*/ value),
|
| + dynamic/*=E*/ orElse()) {
|
| // TODO(floitsch): check that arguments are of correct type?
|
| for (int i = list.length - 1; i >= 0; i--) {
|
| - dynamic element = list[i];
|
| + var element = list[i];
|
| if (test(element)) return element;
|
| }
|
| if (orElse != null) return orElse();
|
| throw IterableElementError.noElement();
|
| }
|
|
|
| - static dynamic singleWhere(Iterable iterable, bool test(dynamic value)) {
|
| - dynamic result = null;
|
| + static dynamic/*=E*/ singleWhere/*<E>*/(Iterable/*<E>*/ iterable, bool test(dynamic/*=E*/ value)) {
|
| + dynamic/*=E*/ result = null;
|
| bool foundMatching = false;
|
| - for (dynamic element in iterable) {
|
| + for (var element in iterable) {
|
| if (test(element)) {
|
| if (foundMatching) {
|
| throw IterableElementError.tooMany();
|
| @@ -922,7 +922,7 @@ class IterableMixinWorkaround<T> {
|
| throw IterableElementError.noElement();
|
| }
|
|
|
| - static elementAt(Iterable iterable, int index) {
|
| + static dynamic/*=E*/ elementAt/*<E>*/(Iterable/*<E>*/ iterable, int index) {
|
| if (index is! int) throw new ArgumentError.notNull("index");
|
| RangeError.checkNotNegative(index, "index");
|
| int elementIndex = 0;
|
| @@ -933,13 +933,13 @@ class IterableMixinWorkaround<T> {
|
| throw new RangeError.index(index, iterable, "index", null, elementIndex);
|
| }
|
|
|
| - static String join(Iterable iterable, [String separator]) {
|
| + static String join/*<E>*/(Iterable/*<E>*/ iterable, [String separator]) {
|
| StringBuffer buffer = new StringBuffer();
|
| buffer.writeAll(iterable, separator);
|
| return buffer.toString();
|
| }
|
|
|
| - static String joinList(List list, [String separator]) {
|
| + static String joinList/*<E>*/(List/*<E>*/ list, [String separator]) {
|
| if (list.isEmpty) return "";
|
| if (list.length == 1) return "${list[0]}";
|
| StringBuffer buffer = new StringBuffer();
|
| @@ -957,20 +957,20 @@ class IterableMixinWorkaround<T> {
|
| return buffer.toString();
|
| }
|
|
|
| - Iterable<T> where(Iterable iterable, bool f(var element)) {
|
| + Iterable<T> where(Iterable<T> iterable, bool f(T element)) {
|
| return new WhereIterable<T>(iterable, f);
|
| }
|
|
|
| - static Iterable map(Iterable iterable, f(var element)) {
|
| - return new MappedIterable(iterable, f);
|
| + static Iterable/*<V>*/ map/*<E, V>*/(Iterable/*<E>*/ iterable, /*=V*/ f(var/*=E*/ element)) {
|
| + return new MappedIterable/*<E, V>*/(iterable, f);
|
| }
|
|
|
| - static Iterable mapList(List list, f(var element)) {
|
| - return new MappedListIterable(list, f);
|
| + static Iterable/*<V>*/ mapList/*<E, V>*/(List/*<E>*/ list, /*=V*/ f(var/*=E*/ element)) {
|
| + return new MappedListIterable/*<E, V>*/(list, f);
|
| }
|
|
|
| - static Iterable expand(Iterable iterable, Iterable f(var element)) {
|
| - return new ExpandIterable(iterable, f);
|
| + static Iterable/*<V>*/ expand/*<E, V>*/(Iterable/*<E>*/ iterable, Iterable/*<V>*/ f(var/*=E*/ element)) {
|
| + return new ExpandIterable/*<E, V>*/(iterable, f);
|
| }
|
|
|
| Iterable<T> takeList(List list, int n) {
|
|
|