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