refactor(ListWrapper): drop forEach and removeLast

Closes #4584
This commit is contained in:
Victor Berchet 2015-10-07 09:09:43 -07:00
parent 4ed642f921
commit aee176115b
35 changed files with 71 additions and 104 deletions

View File

@ -221,7 +221,7 @@ export class RecursiveAstVisitor implements AstVisitor {
return this.visitAll(ast.args);
}
visitAll(asts: AST[]): any {
ListWrapper.forEach(asts, (ast) => { ast.visit(this); });
asts.forEach(ast => ast.visit(this));
return null;
}
}

View File

@ -139,8 +139,7 @@ export class CssSelector {
res += ']';
}
}
ListWrapper.forEach(this.notSelectors,
(notSelector) => { res += ":not(" + notSelector.toString() + ")"; });
this.notSelectors.forEach(notSelector => res += `:not(${notSelector})`);
return res;
}
}

View File

@ -213,7 +213,7 @@ function _removeDotSegments(path: string): string {
var trailingSlash = path[path.length - 1] === '/' ? '/' : '';
var segments = path.split('/');
var out = [];
var out: string[] = [];
var up = 0;
for (var pos = 0; pos < segments.length; pos++) {
var segment = segments[pos];
@ -223,7 +223,7 @@ function _removeDotSegments(path: string): string {
break;
case '..':
if (out.length > 0) {
ListWrapper.removeAt(out, out.length - 1);
out.pop();
} else {
up++;
}
@ -235,7 +235,7 @@ function _removeDotSegments(path: string): string {
if (leadingSlash == '') {
while (up-- > 0) {
ListWrapper.insert(out, 0, '..');
out.unshift('..');
}
if (out.length === 0) out.push('.');

View File

@ -28,8 +28,7 @@ export class MockXHR extends XHR {
}
do {
var request = ListWrapper.removeAt(this._requests, 0);
this._processRequest(request);
this._processRequest(this._requests.shift());
} while (this._requests.length > 0);
this.verifyNoOustandingExpectations();

View File

@ -126,9 +126,8 @@ export class DebugElement {
var views = view.viewContainers[view.elementOffset + i];
if (isPresent(views)) {
ListWrapper.forEach(views.views, (nextView) => {
els = els.concat(this._getChildElements(nextView, null));
});
views.views.forEach(
(nextView) => { els = els.concat(this._getChildElements(nextView, null)); });
}
}
}
@ -155,17 +154,15 @@ export class Scope {
var scope = [];
scope.push(debugElement);
ListWrapper.forEach(debugElement.children,
(child) => { scope = scope.concat(Scope.all(child)); });
debugElement.children.forEach(child => scope = scope.concat(Scope.all(child)));
ListWrapper.forEach(debugElement.componentViewChildren,
(child) => { scope = scope.concat(Scope.all(child)); });
debugElement.componentViewChildren.forEach(child => scope = scope.concat(Scope.all(child)));
return scope;
}
static light(debugElement: DebugElement): DebugElement[] {
var scope = [];
ListWrapper.forEach(debugElement.children, (child) => {
debugElement.children.forEach(child => {
scope.push(child);
scope = scope.concat(Scope.light(child));
});
@ -175,7 +172,7 @@ export class Scope {
static view(debugElement: DebugElement): DebugElement[] {
var scope = [];
ListWrapper.forEach(debugElement.componentViewChildren, (child) => {
debugElement.componentViewChildren.forEach(child => {
scope.push(child);
scope = scope.concat(Scope.light(child));
});

View File

@ -498,10 +498,10 @@ function _createListOfBindings(flattenedBindings: Map<number, any>): any[] {
return MapWrapper.values(flattenedBindings);
}
function _normalizeBindings(bindings: Array<Type | Binding | any[]>,
function _normalizeBindings(bindings: Array<Type | Binding | BindingBuilder | any[]>,
res: Map<number, _NormalizedBinding | _NormalizedBinding[]>):
Map<number, _NormalizedBinding | _NormalizedBinding[]> {
ListWrapper.forEach(bindings, (b) => {
bindings.forEach(b => {
if (b instanceof Type) {
_normalizeBinding(bind(b).toClass(b), res);

View File

@ -9,11 +9,7 @@ import {
KeyValueDiffers
} from 'angular2/src/core/change_detection';
import {Renderer} from 'angular2/src/core/render';
import {
ListWrapper,
StringMapWrapper,
isListLikeIterable
} from 'angular2/src/core/facade/collection';
import {StringMapWrapper, isListLikeIterable} from 'angular2/src/core/facade/collection';
/**
* Adds and removes CSS classes based on an {expression} value.
@ -109,14 +105,13 @@ export class NgClass implements DoCheck, OnDestroy {
}
private _applyInitialClasses(isCleanup: boolean) {
ListWrapper.forEach(this._initialClasses,
(className) => { this._toggleClass(className, !isCleanup); });
this._initialClasses.forEach(className => this._toggleClass(className, !isCleanup));
}
private _applyClasses(rawClassVal, isCleanup: boolean) {
if (isPresent(rawClassVal)) {
if (isListLikeIterable(rawClassVal)) {
ListWrapper.forEach(rawClassVal, (className) => this._toggleClass(className, !isCleanup));
(<string[]>rawClassVal).forEach(className => this._toggleClass(className, !isCleanup));
} else {
StringMapWrapper.forEach(rawClassVal, (expVal, className) => {
if (expVal) this._toggleClass(className, !isCleanup);

View File

@ -165,9 +165,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
return node;
}
insertBefore(el, node) { el.parentNode.insertBefore(node, el); }
insertAllBefore(el, nodes) {
ListWrapper.forEach(nodes, (n) => { el.parentNode.insertBefore(n, el); });
}
insertAllBefore(el, nodes) { nodes.forEach(n => el.parentNode.insertBefore(n, el)); }
insertAfter(el, node) { el.parentNode.insertBefore(node, el.nextSibling); }
setInnerHTML(el, value) { el.innerHTML = value; }
getText(el): string { return el.textContent; }

View File

@ -222,9 +222,7 @@ export class Parse5DomAdapter extends DomAdapter {
this.remove(node);
treeAdapter.insertBefore(el.parent, node, el);
}
insertAllBefore(el, nodes) {
ListWrapper.forEach(nodes, (n) => { this.insertBefore(el, n); });
}
insertAllBefore(el, nodes) { nodes.forEach(n => this.insertBefore(el, n)); }
insertAfter(el, node) {
if (el.nextSibling) {
this.insertBefore(el.nextSibling, node);

View File

@ -125,9 +125,6 @@ class ListWrapper {
static find(List list, bool fn(item)) =>
list.firstWhere(fn, orElse: () => null);
static bool any(List list, bool fn(item)) => list.any(fn);
static void forEach(Iterable list, fn(item)) {
list.forEach(fn);
}
static void forEachWithIndex(List list, fn(item, index)) {
for (var i = 0; i < list.length; ++i) {
@ -160,7 +157,6 @@ class ListWrapper {
}
}
static removeLast(List list) => list.removeLast();
static bool remove(List list, item) => list.remove(item);
static void clear(List l) {
l.clear();

View File

@ -177,11 +177,6 @@ export class ListWrapper {
static createFixedSize(size: number): any[] { return new Array(size); }
static createGrowableSize(size: number): any[] { return new Array(size); }
static clone<T>(array: T[]): T[] { return array.slice(0); }
static forEach<T>(array: T[], fn: (T) => void) {
for (var i = 0; i < array.length; i++) {
fn(array[i]);
}
}
static forEachWithIndex<T>(array: T[], fn: (T, number) => void) {
for (var i = 0; i < array.length; i++) {
fn(array[i], i);
@ -234,7 +229,6 @@ export class ListWrapper {
list.splice(index, 1);
}
}
static removeLast<T>(list: T[]): T { return list.pop(); }
static remove<T>(list: T[], el: T): boolean {
var index = list.indexOf(el);
if (index > -1) {

View File

@ -158,7 +158,7 @@ export class NgForm extends ControlContainer implements Form {
}
_findContainer(path: string[]): ControlGroup {
ListWrapper.removeLast(path);
path.pop();
return ListWrapper.isEmpty(path) ? this.form : <ControlGroup>this.form.find(path);
}

View File

@ -141,7 +141,7 @@ export class NgFormModel extends ControlContainer implements Form,
}
_updateDomValue() {
ListWrapper.forEach(this.directives, dir => {
this.directives.forEach(dir => {
var ctrl: any = this.form.find(dir.path);
dir.valueAccessor.writeValue(ctrl.value);
});

View File

@ -1,6 +1,6 @@
import {Inject, Injectable, OpaqueToken} from 'angular2/src/core/di';
import {ListWrapper, MapWrapper, Map} from 'angular2/src/core/facade/collection';
import {MapWrapper, Map} from 'angular2/src/core/facade/collection';
import {isPresent, isBlank, CONST_EXPR} from 'angular2/src/core/facade/lang';
import * as viewModule from './view';
@ -19,7 +19,7 @@ export class AppViewPool {
getView(protoView: viewModule.AppProtoView): viewModule.AppView {
var pooledViews = this._pooledViewsPerProtoView.get(protoView);
if (isPresent(pooledViews) && pooledViews.length > 0) {
return ListWrapper.removeLast(pooledViews);
return pooledViews.pop();
}
return null;
}

View File

@ -39,19 +39,19 @@ export class KeyEventsPlugin extends EventManagerPlugin {
}
static parseEventName(eventName: string): {[key: string]: string} {
var parts = eventName.toLowerCase().split('.');
var parts: string[] = eventName.toLowerCase().split('.');
var domEventName = ListWrapper.removeAt(parts, 0);
var domEventName = parts.shift();
if ((parts.length === 0) ||
!(StringWrapper.equals(domEventName, 'keydown') ||
StringWrapper.equals(domEventName, 'keyup'))) {
return null;
}
var key = KeyEventsPlugin._normalizeKey(ListWrapper.removeLast(parts));
var key = KeyEventsPlugin._normalizeKey(parts.pop());
var fullKey = '';
ListWrapper.forEach(modifierKeys, (modifierName) => {
modifierKeys.forEach(modifierName => {
if (ListWrapper.contains(parts, modifierName)) {
ListWrapper.remove(parts, modifierName);
fullKey += modifierName + '.';
@ -78,7 +78,7 @@ export class KeyEventsPlugin extends EventManagerPlugin {
} else if (StringWrapper.equals(key, '.')) {
key = 'dot'; // because '.' is used as a separator in event names
}
ListWrapper.forEach(modifierKeys, (modifierName) => {
modifierKeys.forEach(modifierName => {
if (modifierName != key) {
var modifierGetter = StringMapWrapper.get(modifierKeyGetters, modifierName);
if (modifierGetter(event)) {

View File

@ -10,7 +10,7 @@ function paramParser(rawParams: string = ''): Map<string, string[]> {
var map = new Map<string, string[]>();
if (rawParams.length > 0) {
var params: string[] = StringWrapper.split(rawParams, new RegExp('&'));
ListWrapper.forEach(params, (param: string) => {
params.forEach((param: string) => {
var split: string[] = StringWrapper.split(param, new RegExp('='));
var key = split[0];
var val = split[1];
@ -127,9 +127,8 @@ export class URLSearchParams {
toString(): string {
var paramsList = [];
MapWrapper.forEach(this.paramsMap, (values, k) => {
ListWrapper.forEach(values, v => { paramsList.push(k + '=' + v); });
});
MapWrapper.forEach(this.paramsMap,
(values, k) => { values.forEach(v => paramsList.push(k + '=' + v)); });
return paramsList.join('&');
}

View File

@ -8,7 +8,7 @@ import {
} from 'angular2/src/core/facade/lang';
import {BaseException, WrappedException} from 'angular2/src/core/facade/exceptions';
import {Map, MapWrapper, StringMapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
import {Map, MapWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
import {RouteHandler} from './route_handler';
import {Url, RootUrl, serializeParams} from './url_parser';
@ -35,7 +35,7 @@ class TouchMap {
getUnused(): {[key: string]: any} {
var unused: {[key: string]: any} = StringMapWrapper.create();
var keys = StringMapWrapper.keys(this.keys);
ListWrapper.forEach(keys, (key) => { unused[key] = StringMapWrapper.get(this.map, key); });
keys.forEach(key => unused[key] = StringMapWrapper.get(this.map, key));
return unused;
}
}

View File

@ -89,7 +89,8 @@ export class RouteRegistry {
var annotation = annotations[i];
if (annotation instanceof RouteConfig) {
ListWrapper.forEach(annotation.configs, (config) => this.config(component, config));
let routeCfgs: RouteDefinition[] = annotation.configs;
routeCfgs.forEach(config => this.config(component, config));
}
}
}

View File

@ -427,7 +427,7 @@ export class Router {
}
if (rest[rest.length - 1] == '') {
ListWrapper.removeLast(rest);
rest.pop();
}
if (rest.length < 1) {

View File

@ -8,7 +8,7 @@ import {
ObservableWrapper,
EventEmitter
} from "angular2/src/core/facade/async";
import {ListWrapper, StringMapWrapper, MapWrapper} from "angular2/src/core/facade/collection";
import {StringMapWrapper, MapWrapper} from "angular2/src/core/facade/collection";
import {Serializer} from "angular2/src/web_workers/shared/serializer";
import {Injectable} from "angular2/src/core/di";
import {Type, StringWrapper} from "angular2/src/core/facade/lang";
@ -58,7 +58,7 @@ export class ClientMessageBroker {
runOnService(args: UiArguments, returnType: Type): Promise<any> {
var fnArgs = [];
if (isPresent(args.args)) {
ListWrapper.forEach(args.args, (argument) => {
args.args.forEach(argument => {
if (argument.type != null) {
fnArgs.push(this._serializer.serialize(argument.value, argument.type));
} else {

View File

@ -41,7 +41,7 @@ export class RenderViewWithFragmentsStore {
this._lookupByView.set(view.viewRef, startIndex);
startIndex++;
ListWrapper.forEach(view.fragmentRefs, (ref) => {
view.fragmentRefs.forEach(ref => {
this._lookupByIndex.set(startIndex, ref);
this._lookupByView.set(ref, startIndex);
startIndex++;

View File

@ -7,7 +7,7 @@ import {
} from "angular2/src/core/facade/lang";
import {BaseException, WrappedException} from 'angular2/src/core/facade/exceptions';
import {ListWrapper, Map, StringMapWrapper, MapWrapper} from "angular2/src/core/facade/collection";
import {Map, StringMapWrapper, MapWrapper} from "angular2/src/core/facade/collection";
import {
RenderProtoViewRef,
RenderViewRef,
@ -52,9 +52,7 @@ export class Serializer {
return null;
}
if (isArray(obj)) {
var serializedObj = [];
ListWrapper.forEach(obj, (val) => { serializedObj.push(this.serialize(val, type)); });
return serializedObj;
return (<any[]>obj).map(v => this.serialize(v, type));
}
if (type == PRIMITIVE) {
return obj;
@ -80,7 +78,7 @@ export class Serializer {
}
if (isArray(map)) {
var obj: any[] = [];
ListWrapper.forEach(map, (val) => { obj.push(this.deserialize(val, type, data)); });
(<any[]>map).forEach(val => obj.push(this.deserialize(val, type, data)));
return obj;
}
if (type == PRIMITIVE) {

View File

@ -22,7 +22,7 @@ import {
normalizeBool
} from 'angular2/src/core/facade/lang';
import {BaseException, WrappedException} from 'angular2/src/core/facade/exceptions';
import {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
import {MapWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
import {
ChangeDispatcher,
@ -67,7 +67,7 @@ const _DEFAULT_CONTEXT = CONST_EXPR(new Object());
* can be found in the generated/change_detector_classes library.
*/
export function main() {
ListWrapper.forEach(['dynamic', 'JIT', 'Pregen'], (cdType) => {
['dynamic', 'JIT', 'Pregen'].forEach(cdType => {
if (cdType == "JIT" && IS_DART) return;
if (cdType == "Pregen" && !IS_DART) return;

View File

@ -13,7 +13,6 @@ import {
} from 'angular2/test_lib';
import {ObservableWrapper, EventEmitter, PromiseWrapper} from 'angular2/src/core/facade/async';
import {ListWrapper} from 'angular2/src/core/facade/collection';
export function main() {
describe('EventEmitter', () => {
@ -88,7 +87,7 @@ export function main() {
one.resolve('one');
}));
ListWrapper.forEach([null, true, false, 10, 'thing', {}, []], (abruptCompletion) => {
[null, true, false, 10, 'thing', {}, []].forEach(abruptCompletion => {
it(`should treat "${abruptCompletion}" as an "abrupt completion"`,
inject([AsyncTestCompleter], (async) => {
var one = PromiseWrapper.completer();

View File

@ -1,5 +1,4 @@
import {EventEmitter} from 'angular2/src/core/facade/async';
import {ListWrapper} from 'angular2/src/core/facade/collection';
export class MockEventEmitter extends EventEmitter {
private _nextFns: Function[] = [];
@ -11,9 +10,7 @@ export class MockEventEmitter extends EventEmitter {
return new MockDisposable();
}
next(value: any) {
ListWrapper.forEach(this._nextFns, (fn) => { fn(value); });
}
next(value: any) { this._nextFns.forEach(fn => fn(value)); }
}
class MockDisposable {

View File

@ -12,7 +12,6 @@ import {
import {isPresent, StringWrapper, NumberWrapper} from 'angular2/src/core/facade/lang';
import {ObservableWrapper, EventEmitter} from 'angular2/src/core/facade/async';
import {ListWrapper} from 'angular2/src/core/facade/collection';
import {Event, KeyboardEvent} from 'angular2/src/core/facade/browser';
import {MdRadioDispatcher} from 'angular2_material/src/components/radio/radio_dispatcher';
@ -111,7 +110,7 @@ export class MdRadioGroup implements OnChanges {
// child radio buttons and select the one that has a corresponding value (if any).
if (isPresent(this.value) && this.value != '') {
this.radioDispatcher.notify(this.name_);
ListWrapper.forEach(this.radios_, (radio) => {
this.radios_.forEach(radio => {
if (radio.value == this.value) {
radio.checked = true;
this.selectedRadioId = radio.id;

View File

@ -69,7 +69,7 @@ class MultiplyViewResolver extends ViewResolver {
constructor(multiple: number, components: Type[]) {
super();
this._multiplyBy = multiple;
ListWrapper.forEach(components, (c) => this._fillCache(c));
components.forEach(c => this._fillCache(c));
}
_fillCache(component: Type) {

View File

@ -1,5 +1,5 @@
import {bind, Binding, Injector, OpaqueToken} from 'angular2/src/core/di';
import {ListWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
import {StringMapWrapper} from 'angular2/src/core/facade/collection';
import {Promise, PromiseWrapper} from 'angular2/src/core/facade/async';
import {Metric} from '../metric';
@ -42,11 +42,10 @@ export class MultiMetric extends Metric {
}
}
function mergeStringMaps(maps): Object {
function mergeStringMaps(maps: any[]): Object {
var result = {};
ListWrapper.forEach(maps, (map) => {
StringMapWrapper.forEach(map, (value, prop) => { result[prop] = value; });
});
maps.forEach(
map => { StringMapWrapper.forEach(map, (value, prop) => { result[prop] = value; }); });
return result;
}

View File

@ -142,9 +142,9 @@ export class PerflogMetric extends Metric {
});
}
_addEvents(events) {
_addEvents(events: any[]) {
var needSort = false;
ListWrapper.forEach(events, (event) => {
events.forEach(event => {
if (StringWrapper.equals(event['ph'], 'X')) {
needSort = true;
var startEvent = {};

View File

@ -1,4 +1,4 @@
import {StringMapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
import {StringMapWrapper} from 'angular2/src/core/facade/collection';
import {bind, Binding, OpaqueToken} from 'angular2/src/core/di';
import {Validator} from './validator';
import {Metric} from './metric';
@ -15,7 +15,7 @@ export class SampleDescription {
constructor(public id: string, descriptions: Array<{[key: string]: any}>,
public metrics: {[key: string]: any}) {
this.description = {};
ListWrapper.forEach(descriptions, (description) => {
descriptions.forEach(description => {
StringMapWrapper.forEach(description, (value, prop) => this.description[prop] = value);
});
}

View File

@ -1,21 +1,22 @@
import {Math} from 'angular2/src/core/facade/math';
import {ListWrapper} from 'angular2/src/core/facade/collection';
export class Statistic {
static calculateCoefficientOfVariation(sample, mean) {
return Statistic.calculateStandardDeviation(sample, mean) / mean * 100;
}
static calculateMean(sample) {
static calculateMean(samples: any[]) {
var total = 0;
ListWrapper.forEach(sample, (x) => {total += x});
return total / sample.length;
// TODO: use reduce
samples.forEach(x => total += x);
return total / samples.length;
}
static calculateStandardDeviation(sample, mean) {
static calculateStandardDeviation(samples: any[], mean) {
var deviation = 0;
ListWrapper.forEach(sample, (x) => { deviation += Math.pow(x - mean, 2); });
deviation = deviation / (sample.length);
// TODO: use reduce
samples.forEach(x => deviation += Math.pow(x - mean, 2));
deviation = deviation / (samples.length);
deviation = Math.sqrt(deviation);
return deviation;
}

View File

@ -3,7 +3,6 @@ import {bind, Binding, Injector, OpaqueToken} from 'angular2/src/core/di';
import {isBlank, isPresent} from 'angular2/src/core/facade/lang';
import {BaseException, WrappedException} from 'angular2/src/core/facade/exceptions';
import {Promise, PromiseWrapper} from 'angular2/src/core/facade/async';
import {ListWrapper} from 'angular2/src/core/facade/collection';
import {Options} from './common_options';
@ -20,9 +19,9 @@ export abstract class WebDriverExtension {
[Injector]),
bind(WebDriverExtension)
.toFactory(
(children, capabilities) => {
(children: WebDriverExtension[], capabilities) => {
var delegate;
ListWrapper.forEach(children, (extension) => {
children.forEach(extension => {
if (extension.supports(capabilities)) {
delegate = extension;
}

View File

@ -71,7 +71,7 @@ export class ChromeDriverExtension extends WebDriverExtension {
.then((_) => this._driver.logs('performance'))
.then((entries) => {
var events = [];
ListWrapper.forEach(entries, function(entry) {
entries.forEach(entry => {
var message = Json.parse(entry['message'])['message'];
if (StringWrapper.equals(message['method'], 'Tracing.dataCollected')) {
events.push(message['params']);

View File

@ -1,5 +1,4 @@
import {bind, Binding} from 'angular2/src/core/di';
import {ListWrapper} from 'angular2/src/core/facade/collection';
import {
Json,
isPresent,
@ -41,7 +40,7 @@ export class IOsDriverExtension extends WebDriverExtension {
.then((_) => this._driver.logs('performance'))
.then((entries) => {
var records = [];
ListWrapper.forEach(entries, function(entry) {
entries.forEach(entry => {
var message = Json.parse(entry['message'])['message'];
if (StringWrapper.equals(message['method'], 'Timeline.eventRecorded')) {
records.push(message['params']['record']);

View File

@ -11,7 +11,7 @@ import {
xit,
} from 'angular2/test_lib';
import {ListWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
import {StringMapWrapper} from 'angular2/src/core/facade/collection';
import {PromiseWrapper, Promise} from 'angular2/src/core/facade/async';
import {isPresent, isBlank} from 'angular2/src/core/facade/lang';
@ -325,7 +325,7 @@ export function main() {
describe('aggregation', () => {
function aggregate(events: any[], microMetrics = null, captureFrames = null) {
ListWrapper.insert(events, 0, eventFactory.markStart('benchpress0', 0));
events.unshift(eventFactory.markStart('benchpress0', 0));
events.push(eventFactory.markEnd('benchpress0', 10));
var metric = createMetric([events], microMetrics, null, null, captureFrames);
return metric.beginMeasure().then((_) => metric.endMeasure(false));
@ -662,7 +662,7 @@ class MockDriverExtension extends WebDriverExtension {
this._commandLog.push('readPerfLog');
if (this._perfLogs.length > 0) {
var next = this._perfLogs[0];
ListWrapper.removeAt(this._perfLogs, 0);
this._perfLogs.shift();
return PromiseWrapper.resolve(next);
} else {
return PromiseWrapper.resolve([]);