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