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