| package org.dartlang.vm.service.element; |
| |
| import com.google.gson.JsonArray; |
| import com.google.gson.JsonObject; |
| |
| import java.util.Iterator; |
| |
| /** |
| * Simple wrapper around a {@link JsonArray} which lazily converts {@link JsonObject} elements to |
| * subclasses of {@link Element}. Subclasses need only implement {@link #basicGet(JsonArray, int)} |
| * to return an {@link Element} subclass for the {@link JsonObject} at a given index. |
| */ |
| public abstract class ElementList<T> implements Iterable<T> { |
| |
| private final JsonArray array; |
| |
| public ElementList(JsonArray array) { |
| this.array = array; |
| } |
| |
| public T get(int index) { |
| return basicGet(array, index); |
| } |
| |
| public boolean isEmpty() { |
| return size() == 0; |
| } |
| |
| @Override |
| public Iterator<T> iterator() { |
| return new Iterator<T>() { |
| int index = 0; |
| |
| @Override |
| public boolean hasNext() { |
| return index < size(); |
| } |
| |
| @Override |
| public T next() { |
| return get(index++); |
| } |
| |
| @Override |
| public void remove() { |
| throw new UnsupportedOperationException(); |
| } |
| }; |
| } |
| |
| public int size() { |
| return array.size(); |
| } |
| |
| protected abstract T basicGet(JsonArray array, int index); |
| } |