View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package mockit.coverage.reporting.lineCoverage;
7   
8   import edu.umd.cs.findbugs.annotations.NonNull;
9   
10  import java.io.PrintWriter;
11  
12  import mockit.coverage.lines.PerFileLineCoverage;
13  import mockit.coverage.reporting.parsing.LineParser;
14  
15  import org.checkerframework.checker.index.qual.NonNegative;
16  
17  public final class LineCoverageOutput {
18      @NonNull
19      private final PrintWriter output;
20      @NonNull
21      private final PerFileLineCoverage lineCoverageData;
22      @NonNull
23      private final LineCoverageFormatter lineCoverageFormatter;
24  
25      public LineCoverageOutput(@NonNull PrintWriter output, @NonNull PerFileLineCoverage lineCoverageData,
26              boolean withCallPoints) {
27          this.output = output;
28          this.lineCoverageData = lineCoverageData;
29          lineCoverageFormatter = new LineCoverageFormatter(withCallPoints);
30      }
31  
32      public boolean writeLineWithCoverageInfo(@NonNull LineParser lineParser) {
33          int line = lineParser.getNumber();
34  
35          if (!lineCoverageData.hasLineData(line)) {
36              return false;
37          }
38  
39          int lineExecutionCount = lineCoverageData.getExecutionCount(line);
40  
41          if (lineExecutionCount < 0) {
42              return false;
43          }
44  
45          writeLineExecutionCount(lineExecutionCount);
46          writeExecutableCode(lineParser);
47          return true;
48      }
49  
50      private void writeLineExecutionCount(@NonNegative int lineExecutionCount) {
51          output.write("<td class='ct'>");
52          output.print(lineExecutionCount);
53          output.println("</td>");
54      }
55  
56      private void writeExecutableCode(@NonNull LineParser lineParser) {
57          String formattedLine = lineCoverageFormatter.format(lineParser, lineCoverageData);
58          output.write("      <td>");
59          output.write(formattedLine);
60          output.println("</td>");
61      }
62  }