/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.coverage.reporting.lineCoverage; import java.util.*; import javax.annotation.*; import mockit.coverage.*; import mockit.coverage.lines.*; import mockit.coverage.reporting.*; import mockit.coverage.reporting.parsing.*; final class LineCoverageFormatter { @Nonnull private final StringBuilder formattedLine; @Nonnull private final LineSegmentsFormatter segmentsFormatter; @Nullable private final ListOfCallPoints listOfCallPoints; LineCoverageFormatter(boolean withCallPoints) { formattedLine = new StringBuilder(200); segmentsFormatter = new LineSegmentsFormatter(withCallPoints, formattedLine); listOfCallPoints = withCallPoints ? new ListOfCallPoints() : null; } String format(@Nonnull LineParser lineParser, @Nonnull PerFileLineCoverage lineCoverageData) { formattedLine.setLength(0); formattedLine.append("<pre class='prettyprint"); int line = lineParser.getNumber(); LineCoverageData lineData = lineCoverageData.getLineData(line); if (lineData.containsBranches()) { formatLineWithMultipleSegments(lineParser, lineData); } else { formatLineWithSingleSegment(lineParser, lineData); } return formattedLine.toString(); } private void formatLineWithMultipleSegments(@Nonnull LineParser lineParser, @Nonnull LineCoverageData lineData) { formattedLine.append(" jmp'>"); segmentsFormatter.formatSegments(lineParser, lineData); } private void formatLineWithSingleSegment(@Nonnull LineParser lineParser, @Nonnull LineCoverageData lineData) { formattedLine.append(lineData.isCovered() ? " covered" : " uncovered"); List<CallPoint> callPoints = lineData.getCallPoints(); if (listOfCallPoints != null && callPoints != null) { formattedLine.append(" cp' onclick='showHide(this)"); } formattedLine.append("' id='l").append(lineParser.getNumber()).append("s0'>"); String content = lineParser.getInitialElement().toString(); formattedLine.append(content).append("</pre>"); if (listOfCallPoints != null) { listOfCallPoints.insertListOfCallPoints(callPoints); formattedLine.append(listOfCallPoints.getContents()); } } }