Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1178)

Unified Diff: sdk/lib/html/dart2js/html_dart2js.dart

Issue 13934019: Revert "With the collections deriving from ListBase, we no longer need to implement a number of boi… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/html/dart2js/html_dart2js.dart
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index b715cecfa6c2d7107121b2dd7b10ccb64db228e7..ef12fd87eb6a53ef94ad1b284232db9b012f951d 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -7792,6 +7792,8 @@ class DomTokenList native "*DOMTokenList" {
// BSD-style license that can be found in the LICENSE file.
+// TODO(jacobr): use _Lists.dart to remove some of the duplicated
+// functionality.
class _ChildrenElementList extends ListBase<Element> {
// Raw Element.
final Element _element;
@@ -7801,13 +7803,106 @@ class _ChildrenElementList extends ListBase<Element> {
: _childElements = element.$dom_children,
_element = element;
+ List<Element> toList({ bool growable: true }) {
+ List<Element> output;
+ if (growable) {
+ output = <Element>[];
+ output.length = _childElements.length;
+ } else {
+ output = new List<Element>(_childElements.length);
+ }
+ for (int i = 0, len = _childElements.length; i < len; i++) {
+ output[i] = _childElements[i];
+ }
+ return output;
+ }
+
+ Set<Element> toSet() {
+ final output = new Set<Element>();
+ for (int i = 0, len = _childElements.length; i < len; i++) {
+ output.add(_childElements[i]);
+ }
+ return output;
+ }
+
bool contains(Element element) => _childElements.contains(element);
+ void forEach(void f(Element element)) {
+ for (Element element in _childElements) {
+ f(element);
+ }
+ }
+
+ bool every(bool f(Element element)) {
+ for (Element element in this) {
+ if (!f(element)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ bool any(bool f(Element element)) {
+ for (Element element in this) {
+ if (f(element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ String join([String separator = ""]) {
+ return _childElements.join(separator);
+ }
+
+ Iterable map(f(Element element)) {
+ return _childElements.map(f);
+ }
+
+ Iterable<Element> where(bool f(Element element)) {
+ return _childElements.where(f);
+ }
+
+ Iterable expand(Iterable f(Element element)) {
+ return _childElements.expand(f);
+ }
bool get isEmpty {
return _element.$dom_firstElementChild == null;
}
+ Iterable<Element> take(int n) {
+ return _childElements.take(n);
+ }
+
+ Iterable<Element> takeWhile(bool test(Element value)) {
+ return _childElements.takeWhile(test);
+ }
+
+ Iterable<Element> skip(int n) {
+ return _childElements.skip(n);
+ }
+
+ Iterable<Element> skipWhile(bool test(Element value)) {
+ return _childElements.skipWhile(test);
+ }
+
+ Element firstWhere(bool test(Element value), {Element orElse()}) {
+ return _childElements.firstWhere(test, orElse: orElse);
+ }
+
+ Element lastWhere(bool test(Element value), {Element orElse()}) {
+ return _childElements.lastWhere(test, orElse: orElse);
+ }
+
+ Element singleWhere(bool test(Element value)) {
+ return _childElements.singleWhere(test);
+ }
+
+ Element elementAt(int index) {
+ return this[index];
+ }
+
int get length {
return _childElements.length;
}
@@ -7822,7 +7917,7 @@ class _ChildrenElementList extends ListBase<Element> {
void set length(int newLength) {
// TODO(jacobr): remove children when length is reduced.
- throw new UnsupportedError('Cannot resize element lists');
+ throw new UnsupportedError('');
}
Element add(Element value) {
@@ -7842,8 +7937,21 @@ class _ChildrenElementList extends ListBase<Element> {
}
}
+ Iterable<Element> get reversed {
+ return _childElements.reversed;
+ }
+
void sort([int compare(Element a, Element b)]) {
- throw new UnsupportedError('Cannot sort element lists');
+ throw new UnsupportedError('TODO(jacobr): should we impl?');
+ }
+
+ Element reduce(Element combine(Element value, Element element)) {
+ return _childElements.reduce(combine);
+ }
+
+ dynamic fold(dynamic initialValue,
+ dynamic combine(dynamic previousValue, Element element)) {
+ return _childElements.fold(initialValue, combine);
}
void setRange(int start, int end, Iterable<Element> iterable,
@@ -7868,6 +7976,36 @@ class _ChildrenElementList extends ListBase<Element> {
}
}
+ void removeWhere(bool test(Element element)) {
+ _childElements.removeWhere(test);
+ }
+
+ void retainWhere(bool test(Element element)) {
+ _childElements.retainWhere(test);
+ }
+
+ void removeRange(int start, int end) {
+ throw new UnimplementedError();
+ }
+
+ Iterable getRange(int start, int end) {
+ throw new UnimplementedError();
+ }
+
+ List sublist(int start, [int end]) {
+ if (end == null) end = length;
+ return new _FrozenElementList._wrap(Lists.getRange(this, start, end, []));
+ }
+
+ int indexOf(Element element, [int start = 0]) {
+ return Lists.indexOf(this, element, start, this.length);
+ }
+
+ int lastIndexOf(Element element, [int start = null]) {
+ if (start == null) start = length - 1;
+ return Lists.lastIndexOf(this, element, start);
+ }
+
void insert(int index, Element element) {
if (index < 0 || index > length) {
throw new RangeError.range(index, 0, length);
@@ -7879,6 +8017,10 @@ class _ChildrenElementList extends ListBase<Element> {
}
}
+ void insertAll(int index, Iterable<Element> iterable) {
+ throw new UnimplementedError();
+ }
+
void setAll(int index, Iterable<Element> iterable) {
throw new UnimplementedError();
}
@@ -7921,13 +8063,24 @@ class _ChildrenElementList extends ListBase<Element> {
if (length > 1) throw new StateError("More than one element");
return first;
}
+
+ Map<int, Element> asMap() {
+ return _childElements.asMap();
+ }
+
+ String toString() {
+ StringBuffer buffer = new StringBuffer('[');
+ buffer.writeAll(this, ', ');
+ buffer.write(']');
+ return buffer.toString();
+ }
}
// TODO(jacobr): this is an inefficient implementation but it is hard to see
// a better option given that we cannot quite force NodeList to be an
// ElementList as there are valid cases where a NodeList JavaScript object
// contains Node objects that are not Elements.
-class _FrozenElementList extends ListBase<Element> {
+class _FrozenElementList extends ListBase {
final List<Node> _nodeList;
_FrozenElementList._wrap(this._nodeList);
@@ -7937,15 +8090,60 @@ class _FrozenElementList extends ListBase<Element> {
Element operator [](int index) => _nodeList[index];
void operator []=(int index, Element value) {
- throw new UnsupportedError('Cannot modify list');
+ throw new UnsupportedError('');
}
void set length(int newLength) {
- throw new UnsupportedError('Cannot modify list');
+ _nodeList.length = newLength;
+ }
+
+ void add(Element value) {
+ throw new UnsupportedError('');
+ }
+
+ void addAll(Iterable<Element> iterable) {
+ throw new UnsupportedError('');
+ }
+
+ void sort([int compare(Element a, Element b)]) {
+ throw new UnsupportedError('');
+ }
+
+ void setRange(int start, int end, Iterable<Element> iterable,
+ [int skipCount = 0]) {
+ throw new UnsupportedError('');
}
- void sort([Comparator<Element> compare]) {
- throw new UnsupportedError('Cannot sort list');
+ void removeRange(int start, int end) {
+ throw new UnsupportedError('');
+ }
+
+ List<Element> sublist(int start, [int end]) {
+ return new _FrozenElementList._wrap(_nodeList.sublist(start, end));
+ }
+
+ void clear() {
+ throw new UnsupportedError('');
+ }
+
+ Element removeAt(int index) {
+ throw new UnsupportedError('');
+ }
+
+ Element removeLast() {
+ throw new UnsupportedError('');
+ }
+
+ void remove(Object element) {
+ throw new UnsupportedError('');
+ }
+
+ void removeWhere(bool test(Element element)) {
+ throw new UnsupportedError('');
+ }
+
+ void retainWhere(bool test(Element element)) {
+ throw new UnsupportedError('');
}
Element get first => _nodeList.first;
@@ -7953,6 +8151,13 @@ class _FrozenElementList extends ListBase<Element> {
Element get last => _nodeList.last;
Element get single => _nodeList.single;
+
+ String toString() {
+ StringBuffer buffer = new StringBuffer('[');
+ buffer.writeAll(this, ', ');
+ buffer.write(']');
+ return buffer.toString();
+ }
}
class _ElementCssClassSet extends CssClassSet {
@@ -15651,12 +15856,11 @@ class _ChildNodeListLazy extends ListBase<Node> {
}
void insertAll(int index, Iterable<Node> iterable) {
- var item = this[index];
- _this.insertAllBefore(iterable, item);
+ throw new UnimplementedError();
}
void setAll(int index, Iterable<Node> iterable) {
- throw new UnsupportedError("Cannot setAll on Node list");
+ throw new UnimplementedError();
}
Node removeLast() {
@@ -15714,22 +15918,53 @@ class _ChildNodeListLazy extends ListBase<Node> {
Iterator<Node> get iterator => _this.$dom_childNodes.iterator;
+ List<Node> toList({ bool growable: true }) =>
+ new List<Node>.from(this, growable: growable);
+ Set<Node> toSet() => new Set<Node>.from(this);
+
+ bool get isEmpty => this.length == 0;
+
// From List<Node>:
// TODO(jacobr): this could be implemented for child node lists.
// The exception we throw here is misleading.
- void sort([Comparator<Node> compare]) {
- throw new UnsupportedError("Cannot sort Node list");
+ void sort([int compare(Node a, Node b)]) {
+ throw new UnsupportedError("Cannot sort immutable List.");
}
// FIXME: implement these.
void setRange(int start, int end, Iterable<Node> iterable,
[int skipCount = 0]) {
- throw new UnsupportedError("Cannot setRange on Node list");
+ throw new UnsupportedError(
+ "Cannot setRange on immutable List.");
+ }
+ void removeRange(int start, int end) {
+ throw new UnsupportedError(
+ "Cannot removeRange on immutable List.");
+ }
+
+ Iterable<Node> getRange(int start, int end) {
+ throw new UnimplementedError("NodeList.getRange");
+ }
+
+ void replaceRange(int start, int end, Iterable<Node> iterable) {
+ throw new UnimplementedError("NodeList.replaceRange");
+ }
+
+ void fillRange(int start, int end, [Node fillValue]) {
+ throw new UnimplementedError("NodeList.fillRange");
+ }
+
+ List<Node> sublist(int start, [int end]) {
+ if (end == null) end == length;
+ return Lists.getRange(this, start, end, <Node>[]);
}
- void fillRange(int start, int end, [Node fill]) {
- throw new UnsupportedError("Cannot fillRange on Node list");
+ String toString() {
+ StringBuffer buffer = new StringBuffer('[');
+ buffer.writeAll(this, ', ');
+ buffer.write(']');
+ return buffer.toString();
}
// -- end List<Node> mixins.
@@ -29034,7 +29269,7 @@ class _WrappedEvent implements Event {
* A list which just wraps another list, for either intercepting list calls or
* retyping the list (for example, from List<A> to List<B> where B extends A).
*/
-class _WrappedList<E> extends ListBase<E> {
+class _WrappedList<E> implements List<E> {
final List _list;
_WrappedList(this._list);
@@ -29043,14 +29278,73 @@ class _WrappedList<E> extends ListBase<E> {
Iterator<E> get iterator => new _WrappedIterator(_list.iterator);
+ Iterable map(f(E element)) => _list.map(f);
+
+ Iterable<E> where(bool f(E element)) => _list.where(f);
+
+ Iterable expand(Iterable f(E element)) => _list.expand(f);
+
+ bool contains(E element) => _list.contains(element);
+
+ void forEach(void f(E element)) { _list.forEach(f); }
+
+ E reduce(E combine(E value, E element)) =>
+ _list.reduce(combine);
+
+ dynamic fold(initialValue, combine(previousValue, E element)) =>
+ _list.fold(initialValue, combine);
+
+ bool every(bool f(E element)) => _list.every(f);
+
+ String join([String separator = ""]) => _list.join(separator);
+
+ bool any(bool f(E element)) => _list.any(f);
+
+ List<E> toList({ bool growable: true }) =>
+ new List.from(_list, growable: growable);
+
+ Set<E> toSet() => _list.toSet();
+
int get length => _list.length;
+ bool get isEmpty => _list.isEmpty;
+
+ Iterable<E> take(int n) => _list.take(n);
+
+ Iterable<E> takeWhile(bool test(E value)) => _list.takeWhile(test);
+
+ Iterable<E> skip(int n) => _list.skip(n);
+
+ Iterable<E> skipWhile(bool test(E value)) => _list.skipWhile(test);
+
+ E get first => _list.first;
+
+ E get last => _list.last;
+
+ E get single => _list.single;
+
+ E firstWhere(bool test(E value), { E orElse() }) =>
+ _list.firstWhere(test, orElse: orElse);
+
+ E lastWhere(bool test(E value), {E orElse()}) =>
+ _list.lastWhere(test, orElse: orElse);
+
+ E singleWhere(bool test(E value)) => _list.singleWhere(test);
+
+ E elementAt(int index) => _list.elementAt(index);
+
// Collection APIs
void add(E element) { _list.add(element); }
+ void addAll(Iterable<E> elements) { _list.addAll(elements); }
+
void remove(Object element) { _list.remove(element); }
+ void removeWhere(bool test(E element)) { _list.removeWhere(test); }
+
+ void retainWhere(bool test(E element)) { _list.retainWhere(test); }
+
void clear() { _list.clear(); }
// List APIs
@@ -29061,6 +29355,8 @@ class _WrappedList<E> extends ListBase<E> {
void set length(int newLength) { _list.length = newLength; }
+ Iterable<E> get reversed => _list.reversed;
+
void sort([int compare(E a, E b)]) { _list.sort(compare); }
int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
@@ -29069,8 +29365,20 @@ class _WrappedList<E> extends ListBase<E> {
void insert(int index, E element) => _list.insert(index, element);
+ void insertAll(int index, Iterable<E> iterable) =>
+ _list.insertAll(index, iterable);
+
+ void setAll(int index, Iterable<E> iterable) =>
+ _list.setAll(index, iterable);
+
E removeAt(int index) => _list.removeAt(index);
+ E removeLast() => _list.removeLast();
+
+ List<E> sublist(int start, [int end]) => _list.sublist(start, end);
+
+ Iterable<E> getRange(int start, int end) => _list.getRange(start, end);
+
void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
_list.setRange(start, end, iterable, skipCount);
}
@@ -29084,6 +29392,15 @@ class _WrappedList<E> extends ListBase<E> {
void fillRange(int start, int end, [E fillValue]) {
_list.fillRange(start, end, fillValue);
}
+
+ Map<int, E> asMap() => _list.asMap();
+
+ String toString() {
+ StringBuffer buffer = new StringBuffer('[');
+ buffer.writeAll(this, ', ');
+ buffer.write(']');
+ return buffer.toString();
+ }
}
/**
« no previous file with comments | « no previous file | sdk/lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698