| Index: dart/compiler/java/com/google/dart/compiler/util/Lists.java
|
| diff --git a/dart/compiler/java/com/google/dart/compiler/util/Lists.java b/dart/compiler/java/com/google/dart/compiler/util/Lists.java
|
| deleted file mode 100644
|
| index 5d7f6ddc54535433f3fe923eedd6340f7f2f340d..0000000000000000000000000000000000000000
|
| --- a/dart/compiler/java/com/google/dart/compiler/util/Lists.java
|
| +++ /dev/null
|
| @@ -1,296 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -package com.google.dart.compiler.util;
|
| -
|
| -import java.util.ArrayList;
|
| -import java.util.Arrays;
|
| -import java.util.Collection;
|
| -import java.util.Collections;
|
| -import java.util.Comparator;
|
| -import java.util.List;
|
| -
|
| -/**
|
| - * Utility methods for operating on memory-efficient lists. All lists of size 0
|
| - * or 1 are assumed to be immutable. All lists of size greater than 1 are
|
| - * assumed to be mutable.
|
| - */
|
| -public class Lists {
|
| -
|
| - private static final Class<?> MULTI_LIST_CLASS = ArrayList.class;
|
| - private static final Class<?> SINGLETON_LIST_CLASS = Collections.singletonList(null).getClass();
|
| -
|
| - public static <T> List<T> add(List<T> list, int index, T toAdd) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - // Empty -> Singleton
|
| - if (index != 0) {
|
| - throw newIndexOutOfBounds(list, index);
|
| - }
|
| - return Collections.singletonList(toAdd);
|
| - case 1: {
|
| - // Singleton -> ArrayList
|
| - List<T> result = new ArrayList<T>(2);
|
| - switch (index) {
|
| - case 0:
|
| - result.add(toAdd);
|
| - result.add(list.get(0));
|
| - return result;
|
| - case 1:
|
| - result.add(list.get(0));
|
| - result.add(toAdd);
|
| - return result;
|
| - default:
|
| - throw newIndexOutOfBounds(list, index);
|
| - }
|
| - }
|
| - default:
|
| - // ArrayList
|
| - list.add(index, toAdd);
|
| - return list;
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> add(List<T> list, T toAdd) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - // Empty -> Singleton
|
| - return Collections.singletonList(toAdd);
|
| - case 1: {
|
| - // Singleton -> ArrayList
|
| - List<T> result = new ArrayList<T>(2);
|
| - result.add(list.get(0));
|
| - result.add(toAdd);
|
| - return result;
|
| - }
|
| - default:
|
| - // ArrayList
|
| - list.add(toAdd);
|
| - return list;
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> addAll(List<T> list, int index, List<T> toAdd) {
|
| - switch (toAdd.size()) {
|
| - case 0:
|
| - // No-op.
|
| - return list;
|
| - case 1:
|
| - // Add one element.
|
| - return add(list, index, toAdd.get(0));
|
| - default:
|
| - // True list merge, result >= 2.
|
| - switch (list.size()) {
|
| - case 0:
|
| - if (index != 0) {
|
| - throw newIndexOutOfBounds(list, index);
|
| - }
|
| - return new ArrayList<T>(toAdd);
|
| - case 1: {
|
| - List<T> result = new ArrayList<T>(1 + toAdd.size());
|
| - switch (index) {
|
| - case 0:
|
| - result.addAll(toAdd);
|
| - result.add(list.get(0));
|
| - return result;
|
| - case 1:
|
| - result.add(list.get(0));
|
| - result.addAll(toAdd);
|
| - return result;
|
| - default:
|
| - throw newIndexOutOfBounds(list, index);
|
| - }
|
| - }
|
| - default:
|
| - list.addAll(index, toAdd);
|
| - return list;
|
| - }
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> addAll(List<T> list, List<T> toAdd) {
|
| - switch (toAdd.size()) {
|
| - case 0:
|
| - // No-op.
|
| - return list;
|
| - case 1:
|
| - // Add one element.
|
| - return add(list, toAdd.get(0));
|
| - default:
|
| - // True list merge, result >= 2.
|
| - switch (list.size()) {
|
| - case 0:
|
| - return new ArrayList<T>(toAdd);
|
| - case 1: {
|
| - List<T> result = new ArrayList<T>(1 + toAdd.size());
|
| - result.add(list.get(0));
|
| - result.addAll(toAdd);
|
| - return result;
|
| - }
|
| - default:
|
| - list.addAll(toAdd);
|
| - return list;
|
| - }
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> addAll(List<T> list, T... toAdd) {
|
| - switch (toAdd.length) {
|
| - case 0:
|
| - // No-op.
|
| - return list;
|
| - case 1:
|
| - // Add one element.
|
| - return add(list, toAdd[0]);
|
| - default:
|
| - // True list merge, result >= 2.
|
| - switch (list.size()) {
|
| - case 0:
|
| - return new ArrayList<T>(Arrays.asList(toAdd));
|
| - case 1: {
|
| - List<T> result = new ArrayList<T>(1 + toAdd.length);
|
| - result.add(list.get(0));
|
| - result.addAll(Arrays.asList(toAdd));
|
| - return result;
|
| - }
|
| - default:
|
| - list.addAll(Arrays.asList(toAdd));
|
| - return list;
|
| - }
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> create() {
|
| - return Collections.emptyList();
|
| - }
|
| -
|
| - public static <T> List<T> create(Collection<T> collection) {
|
| - switch (collection.size()) {
|
| - case 0:
|
| - return create();
|
| - default:
|
| - return new ArrayList<T>(collection);
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> create(List<T> list) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - return create();
|
| - case 1:
|
| - return create(list.get(0));
|
| - default:
|
| - return new ArrayList<T>(list);
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> create(T item) {
|
| - return Collections.singletonList(item);
|
| - }
|
| -
|
| - public static <T> List<T> create(T... items) {
|
| - switch (items.length) {
|
| - case 0:
|
| - return create();
|
| - case 1:
|
| - return create(items[0]);
|
| - default:
|
| - return new ArrayList<T>(Arrays.asList(items));
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> normalize(List<T> list) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - return create();
|
| - case 1: {
|
| - if (list.getClass() == SINGLETON_LIST_CLASS) {
|
| - return list;
|
| - }
|
| - return create(list.get(0));
|
| - }
|
| - default:
|
| - if (list.getClass() == MULTI_LIST_CLASS) {
|
| - return list;
|
| - }
|
| - return new ArrayList<T>(list);
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> normalizeUnmodifiable(List<T> list) {
|
| - if (list.size() < 2) {
|
| - return normalize(list);
|
| - } else {
|
| - List<T> copy = new ArrayList<T>(list.size());
|
| - Collections.copy(copy, list);
|
| - return copy;
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> remove(List<T> list, int toRemove) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - // Empty
|
| - throw newIndexOutOfBounds(list, toRemove);
|
| - case 1:
|
| - // Singleton -> Empty
|
| - if (toRemove == 0) {
|
| - return Collections.emptyList();
|
| - } else {
|
| - throw newIndexOutOfBounds(list, toRemove);
|
| - }
|
| - case 2:
|
| - // ArrayList -> Singleton
|
| - switch (toRemove) {
|
| - case 0:
|
| - return Collections.singletonList(list.get(1));
|
| - case 1:
|
| - return Collections.singletonList(list.get(0));
|
| - default:
|
| - throw newIndexOutOfBounds(list, toRemove);
|
| - }
|
| - default:
|
| - // ArrayList
|
| - list.remove(toRemove);
|
| - return list;
|
| - }
|
| - }
|
| -
|
| - public static <T> List<T> set(List<T> list, int index, T e) {
|
| - switch (list.size()) {
|
| - case 0:
|
| - // Empty
|
| - throw newIndexOutOfBounds(list, index);
|
| - case 1:
|
| - // Singleton
|
| - if (index == 0) {
|
| - return Collections.singletonList(e);
|
| - } else {
|
| - throw newIndexOutOfBounds(list, index);
|
| - }
|
| - default:
|
| - // ArrayList
|
| - list.set(index, e);
|
| - return list;
|
| - }
|
| - }
|
| -
|
| - public static <T extends Comparable<? super T>> List<T> sort(List<T> list) {
|
| - if (list.size() > 1) {
|
| - Collections.sort(list);
|
| - }
|
| - return list;
|
| - }
|
| -
|
| - public static <T> List<T> sort(List<T> list, Comparator<? super T> sort) {
|
| - if (list.size() > 1) {
|
| - Collections.sort(list, sort);
|
| - }
|
| - return list;
|
| - }
|
| -
|
| - private static <T> IndexOutOfBoundsException newIndexOutOfBounds(List<T> list, int index) {
|
| - return new IndexOutOfBoundsException("Index: " + index + ", Size: " + list.size());
|
| - }
|
| -}
|
|
|