@VisibleForTesting List<String> processMessage(String message) { // Split leaves a trailing empty line if there's a terminating newline. ArrayList<String> split = Lists.newArrayList(message.split("\r?\n", -1)); Preconditions.checkArgument(split.size() > 0); synchronized (this) { buffer.append(split.get(0)); if (split.size() == 1) // no newlines. return ImmutableList.of(); split.set(0, buffer.toString()); buffer = new StringBuilder().append(split.remove(split.size() - 1)); } return split; }