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  import java.util.ArrayList;
14  import java.util.List;
15  
16  import mockit.coverage.data.CoverageData;
17  
18  final class DataFileMerging {
19      @NonNull
20      private final List<File> inputFiles;
21  
22      DataFileMerging(@NonNull String[] inputPaths) {
23          inputFiles = new ArrayList<>(inputPaths.length);
24  
25          for (String path : inputPaths) {
26              addInputFileToList(path.trim());
27          }
28      }
29  
30      private void addInputFileToList(@NonNull String path) {
31          if (!path.isEmpty()) {
32              File inputFile = Path.of(path).toFile();
33  
34              if (inputFile.isDirectory()) {
35                  inputFile = inputFile.toPath().resolve("coverage.ser").toFile();
36              }
37  
38              inputFiles.add(inputFile);
39          }
40      }
41  
42      @NonNull
43      CoverageData merge() throws IOException {
44          CoverageData mergedData = null;
45  
46          for (File inputFile : inputFiles) {
47              if (inputFile.exists()) {
48                  CoverageData existingData = CoverageData.readDataFromFile(inputFile);
49  
50                  if (mergedData == null) {
51                      mergedData = existingData;
52                  } else {
53                      mergedData.merge(existingData);
54                  }
55              }
56          }
57  
58          if (mergedData == null) {
59              throw new IllegalArgumentException("No input \"coverage.ser\" files found");
60          }
61  
62          return mergedData;
63      }
64  }