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 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 }