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;
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      /** The logger. */
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  }