class SourcePrinter {

    public String render(final Stream<String> lines, final Issue issue, final String description,
            final String iconUrl) {
        try (LookaheadStream stream = new LookaheadStream(lines)) {
            int start = issue.getLineStart();
            int end = issue.getLineEnd();

            StringBuilder before = readBlockUntilLine(stream, start - 1);
            StringBuilder marked = readBlockUntilLine(stream, end);
            StringBuilder after = readBlockUntilLine(stream, Integer.MAX_VALUE);

            String language = selectLanguageClass(issue);
            String code = asCode(before, language, "line-numbers")
                    + asCode(marked, language, "highlight")
                    + createInfoPanel(issue, description, iconUrl)
                    + asCode(after, language);

            return pre().with(new UnescapedText(code)).renderFormatted();
        }
    }

    public  SourcePrinter();
    @VisibleForTesting  SourcePrinter(final JenkinsFacade jenkinsFacade);

}