/* * Copyright 2016 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.diffplug.spotless; import static com.diffplug.spotless.LibPreconditions.requireElementsNonNull; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; final class MoreIterables { // prevent direct instantiation private MoreIterables() {} /** Returns a shallow copy of input elements, throwing on null elements. */ static <T> List<T> toNullHostileList(Iterable<T> input) { requireElementsNonNull(input); List<T> shallowCopy = (input instanceof Collection) ? new ArrayList<>(((Collection<?>) input).size()) : new ArrayList<>(); input.forEach(shallowCopy::add); return shallowCopy; } /** Sorts "raw" and removes duplicates, throwing on null elements. */ static <T extends Comparable<T>> List<T> toSortedSet(Iterable<T> raw) { List<T> toBeSorted = toNullHostileList(raw); // sort it Collections.sort(toBeSorted); // remove any duplicates (normally there won't be any) if (toBeSorted.size() > 1) { Iterator<T> iter = toBeSorted.iterator(); T last = iter.next(); while (iter.hasNext()) { T next = iter.next(); if (next.compareTo(last) == 0) { iter.remove(); } else { last = next; } } } return toBeSorted; } }