TinylogLoggingConfiguration { public static Collection<Writer> getAllWriters(final Collection<Writer>[][] matrix) { Collection<Writer> writers = Collections.newSetFromMap(new IdentityHashMap<Writer, Boolean>()); for (int i = 0; i < matrix.length; ++i) { for (int j = 0; j < matrix[i].length; ++j) { writers.addAll(matrix[i][j]); } } return writers; } TinylogLoggingConfiguration(); @SuppressWarnings("unchecked") Collection<Writer>[][] createWriters(final List<String> tags, final Level minimumLevel, final boolean writingThread); Level calculateMinimumLevel(final Level globalLevel, final Map<String, Level> customLevels); @SuppressWarnings("unchecked") Collection<LogEntryValue>[][] calculateRequiredLogEntryValues(final Collection<Writer>[][] writers); BitSet calculateFullStackTraceRequirements(final Collection<LogEntryValue>[][] logEntryValues); WritingThread createWritingThread(final Collection<Writer>[][] matrix); static Collection<Writer> getAllWriters(final Collection<Writer>[][] matrix); static LogEntry createLogEntry(final StackTraceElement stackTraceElement, final String tag, 
		final Level level, final Throwable exception, final MessageFormatter formatter, final Object obj,
		final Object[] arguments, final Collection<LogEntryValue>[] requiredLogEntryValues, 
		final TinylogContextProvider contextProvider);  }
@Test @SuppressWarnings("unchecked") public void getAllWriters() { Collection<Writer>[][] writers = new Collection[2][Level.values().length - 1]; for (Collection<Writer>[] writer: writers) { Arrays.fill(writer, Collections.emptyList()); } writers[0][0] = Collections.singleton(new WriterOne()); writers[0][1] = Collections.singleton(new WriterTwo()); writers[1][0] = Arrays.asList(new Writer[] {new WriterOne(), new WriterTwo()}); Collection<Writer> allWriters = TinylogLoggingConfiguration.getAllWriters(writers); assertThat(allWriters) .hasSize(4) .hasAtLeastOneElementOfType(WriterOne.class) .hasAtLeastOneElementOfType(WriterTwo.class); }