package org.testory.common; import static java.lang.String.join; import java.lang.reflect.Array; import java.util.Iterator; public class Formatter { protected Formatter() {} public static Formatter formatter() { return new Formatter(); } public String format(@Nullable Object object) { if (object == null) { return "null"; } else if (object.getClass().isArray()) { return formatArray(object); } else { return String.valueOf(object); } } public String formatSequence(final Iterable<?> iterable) { Iterable<String> strings = new Iterable<String>() { public Iterator<String> iterator() { return new Iterator<String>() { Iterator<?> iterator = iterable.iterator(); public boolean hasNext() { return iterator.hasNext(); } public String next() { return format(iterator.next()); } }; } }; return join(", ", strings); } private String formatArray(Object array) { return "[" + formatSequence(arrayAsIterable(array)) + "]"; } private Iterable<Object> arrayAsIterable(final Object array) { return new Iterable<Object>() { public Iterator<Object> iterator() { return new Iterator<Object>() { private final int size = Array.getLength(array); int index = 0; public boolean hasNext() { return index < size; } public Object next() { return Array.get(array, index++); } }; } }; } }