tests/refactoring: use permutations from Guava
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/CommonSuperTypeFinderTest.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/CommonSuperTypeFinderTest.java
index 48a44b8..8343eb9 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/CommonSuperTypeFinderTest.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/CommonSuperTypeFinderTest.java
@@ -11,7 +11,10 @@
  *******************************************************************************/
 package org.eclipse.dltk.javascript.core.tests.typeinfo;
 
-import static java.util.Arrays.asList;
+import static com.google.common.collect.Collections2.permutations;
+
+import java.util.List;
+
 import junit.framework.TestCase;
 
 import org.eclipse.dltk.internal.javascript.ti.TypeSystemImpl;
@@ -23,6 +26,8 @@
 import org.eclipse.dltk.javascript.typeinfo.model.Type;
 import org.eclipse.dltk.javascript.typeinfo.model.TypeInfoModelFactory;
 
+import com.google.common.collect.ImmutableList;
+
 @SuppressWarnings("restriction")
 public class CommonSuperTypeFinderTest extends TestCase {
 
@@ -49,11 +54,11 @@
 	}
 
 	private IRType evaluate(IRType... types) {
-		final IRType result = CommonSuperTypeFinder.evaluate(typeSystem,
-				asList(types));
-		for (IRType[] permutation : Permutations.of(types)) {
-			assertEquals(result, CommonSuperTypeFinder.evaluate(typeSystem,
-					asList(permutation)));
+		final List<IRType> input = ImmutableList.copyOf(types);
+		final IRType result = CommonSuperTypeFinder.evaluate(typeSystem, input);
+		for (List<IRType> permutation : permutations(input)) {
+			assertEquals(result,
+					CommonSuperTypeFinder.evaluate(typeSystem, permutation));
 		}
 		return result;
 	}
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/Permutations.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/Permutations.java
deleted file mode 100644
index d11fc59..0000000
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinfo/Permutations.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 NumberFour AG
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     NumberFour AG - initial API and Implementation (Alex Panchenko)
- *******************************************************************************/
-package org.eclipse.dltk.javascript.core.tests.typeinfo;
-
-import java.lang.reflect.Array;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Generates all the permutations of the specified values. Implements the
- * algorithm described at
- * http://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order
- */
-public class Permutations<T> implements Iterable<T[]> {
-
-	final T[] in;
-
-	private Permutations(T[] elements) {
-		this.in = elements;
-	}
-
-	@Override
-	public Iterator<T[]> iterator() {
-		return new PermutationIterator();
-	}
-
-	private class PermutationIterator implements Iterator<T[]> {
-		private final int count;
-		private final int[] indexes;
-		private final T[] out;
-		private boolean hasNext = true;
-
-		@SuppressWarnings("unchecked")
-		public PermutationIterator() {
-			count = in.length;
-			indexes = new int[count];
-			for (int i = 0; i < count; ++i) {
-				indexes[i] = i;
-			}
-			this.out = (T[]) Array.newInstance(
-					in.getClass().getComponentType(), count);
-		}
-
-		public boolean generate() {
-			for (int k = count - 1; --k >= 0;) {
-				if (indexes[k] < indexes[k + 1]) {
-					int l = count - 1;
-					while (l > k && indexes[k] >= indexes[l]) {
-						--l;
-					}
-					assert l >= k + 1;
-					swap(k, l);
-					reverse(k + 1, count - 1);
-					return true;
-				}
-			}
-			return false;
-		}
-
-		private void reverse(int low, int high) {
-			while (low < high) {
-				swap(low, high);
-				++low;
-				--high;
-			}
-		}
-
-		private void swap(int k, int l) {
-			final int temp = indexes[k];
-			indexes[k] = indexes[l];
-			indexes[l] = temp;
-		}
-
-		@Override
-		public boolean hasNext() {
-			if (!hasNext) {
-				hasNext = generate();
-			}
-			return hasNext;
-		}
-
-		@Override
-		public T[] next() {
-			if (!hasNext) {
-				if (!generate()) {
-					throw new NoSuchElementException();
-				}
-			} else {
-				hasNext = false;
-			}
-			for (int i = 0; i < count; ++i) {
-				out[i] = in[indexes[i]];
-			}
-			return out;
-		}
-
-		@Override
-		public void remove() {
-			throw new UnsupportedOperationException();
-		}
-	}
-
-	public static <T> Permutations<T> of(T... elements) {
-		return new Permutations<T>(elements);
-	}
-
-}