1
2
3
4
5
6 package mockit.coverage;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import java.io.File;
11 import java.io.IOException;
12 import java.nio.file.Path;
13
14 import mockit.coverage.data.CoverageData;
15
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18
19 final class AccretionFile {
20
21
22 private static final Logger logger = LoggerFactory.getLogger(AccretionFile.class);
23
24 @NonNull
25 private final File outputFile;
26 @NonNull
27 private final CoverageData newData;
28
29 AccretionFile(@NonNull String outputDir, @NonNull CoverageData newData) {
30 String parentDir = Configuration.getOrChooseOutputDirectory(outputDir);
31 outputFile = Path.of(parentDir, "coverage.ser").toFile();
32
33 newData.fillLastModifiedTimesForAllClassFiles();
34 this.newData = newData;
35 }
36
37 void mergeDataFromExistingFileIfAny() throws IOException {
38 if (outputFile.exists()) {
39 CoverageData previousData = CoverageData.readDataFromFile(outputFile);
40 newData.merge(previousData);
41 }
42 }
43
44 void generate() throws IOException {
45 newData.writeDataToFile(outputFile);
46 logger.info("JMockit: Coverage data written to {}", outputFile.getCanonicalPath());
47 }
48 }