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