1
2
3
4
5
6 package mockit.coverage.reporting;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import java.io.File;
11 import java.nio.file.Path;
12 import java.util.ArrayList;
13 import java.util.List;
14
15 final class SourceFiles {
16 @NonNull
17 private final List<File> srcDirs = new ArrayList<>();
18
19 @NonNull
20 List<File> buildListOfSourceDirectories(@NonNull String[] sourceDirs) {
21 if (sourceDirs.length > 0) {
22 buildListWithSpecifiedDirectories(sourceDirs);
23 } else {
24 buildListWithAllSrcSubDirectories();
25 }
26
27 return srcDirs;
28 }
29
30 private void buildListWithSpecifiedDirectories(@NonNull String[] dirs) {
31 for (String dir : dirs) {
32 File srcDir = Path.of(dir).toFile();
33
34 if (srcDir.isDirectory()) {
35 srcDirs.add(srcDir);
36 }
37 }
38
39 if (srcDirs.isEmpty()) {
40 throw new IllegalStateException("None of the specified source directories exist");
41 }
42 }
43
44 private void buildListWithAllSrcSubDirectories() {
45 String curDirName = Path.of(System.getProperty("user.dir")).toFile().getName();
46 addSrcSubDirs(Path.of("../" + curDirName).toFile());
47 }
48
49 private void addSrcSubDirs(@NonNull File dir) {
50 File[] files = dir.listFiles();
51 if (files == null) {
52 return;
53 }
54
55 for (File subDir : files) {
56 if (subDir.isDirectory()) {
57 String subDirName = subDir.getName();
58
59 if ("src".equals(subDirName)) {
60 srcDirs.add(subDir);
61 } else if (!isDirectoryToIgnore(subDirName)) {
62 addSrcSubDirs(subDir);
63 }
64 }
65 }
66 }
67
68 private static final String IGNORED_DIRS = "bin build classes generated-sources out test tst web ";
69
70 private static boolean isDirectoryToIgnore(@NonNull String subDirName) {
71 int p = IGNORED_DIRS.indexOf(subDirName);
72 return p >= 0 && IGNORED_DIRS.charAt(p + subDirName.length()) == ' ';
73 }
74 }