1
2
3
4
5 package mockit.coverage.data;
6
7 import edu.umd.cs.findbugs.annotations.NonNull;
8 import edu.umd.cs.findbugs.annotations.Nullable;
9
10 import java.io.Serializable;
11
12 import mockit.coverage.CoveragePercentage;
13 import mockit.coverage.TestRun;
14 import mockit.coverage.dataItems.PerFileDataCoverage;
15 import mockit.coverage.lines.PerFileLineCoverage;
16
17 import org.checkerframework.checker.index.qual.NonNegative;
18
19
20
21
22 public final class FileCoverageData implements Serializable {
23 private static final long serialVersionUID = 3508572808457541012L;
24
25 @NonNull
26 private static final PerFileLineCoverage NO_LINE_INFO = new PerFileLineCoverage();
27 @NonNull
28 private static final PerFileDataCoverage NO_DATA_INFO = new PerFileDataCoverage();
29
30 @NonNull
31 public PerFileLineCoverage lineCoverageInfo;
32 @NonNull
33 public PerFileDataCoverage dataCoverageInfo;
34
35
36 @NonNegative
37 public final int index;
38
39
40 @Nullable
41 public String kindOfTopLevelType;
42
43
44 @NonNegative
45 long lastModified;
46
47 private final boolean loadedAfterTestCompletion;
48
49 FileCoverageData(@NonNegative int index, @Nullable String kindOfTopLevelType) {
50 this.index = index;
51 this.kindOfTopLevelType = kindOfTopLevelType;
52 lineCoverageInfo = new PerFileLineCoverage();
53 dataCoverageInfo = new PerFileDataCoverage();
54 loadedAfterTestCompletion = TestRun.isTerminated();
55 }
56
57 boolean wasLoadedAfterTestCompletion() {
58 return loadedAfterTestCompletion;
59 }
60
61 @NonNull
62 public PerFileLineCoverage getLineCoverageData() {
63 return lineCoverageInfo;
64 }
65
66 @NonNegative
67 public int getTotalItems() {
68 return lineCoverageInfo.getTotalItems() + dataCoverageInfo.getTotalItems();
69 }
70
71 @NonNegative
72 public int getCoveredItems() {
73 return lineCoverageInfo.getCoveredItems() + dataCoverageInfo.getCoveredItems();
74 }
75
76 public int getCoveragePercentage() {
77 int totalItems = getTotalItems();
78 int coveredItems = getCoveredItems();
79 return CoveragePercentage.calculate(coveredItems, totalItems);
80 }
81
82 void mergeWithDataFromPreviousTestRun(@NonNull FileCoverageData previousInfo) {
83 if (lineCoverageInfo == NO_LINE_INFO) {
84 lineCoverageInfo = previousInfo.lineCoverageInfo;
85 } else if (previousInfo.lineCoverageInfo != NO_LINE_INFO) {
86 lineCoverageInfo.mergeInformation(previousInfo.lineCoverageInfo);
87 }
88
89 if (dataCoverageInfo == NO_DATA_INFO) {
90 dataCoverageInfo = previousInfo.dataCoverageInfo;
91 } else if (previousInfo.dataCoverageInfo != NO_DATA_INFO) {
92 dataCoverageInfo.mergeInformation(previousInfo.dataCoverageInfo);
93 }
94 }
95 }