package net.unit8.waitt.mojo;
import java.io.File;
import java.io.FileFilter;
import java.util.HashSet;
import java.util.Set;
/**
* @author kawasima
*/
public class PackageScanner {
public static Set<String> scan(File sourceDirectory) {
Set<String> packages = new HashSet<String>();
File[] directories = sourceDirectory.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
return f != null && f.isDirectory();
}
});
if (directories != null) {
for (File dir : directories) {
scanPackageInner(dir, null, packages);
}
}
return packages;
}
private static void scanPackageInner(File dir, String pkg, Set<String> packages) {
if (!dir.isDirectory()) {
return;
}
File[] files = dir.listFiles();
if (files == null)
return;
Boolean isAllDirectory = true;
for (File f : files) {
isAllDirectory = (f != null && f.isDirectory());
}
if (isAllDirectory) {
for (File f : files) {
String prefix = (pkg == null) ? "" : pkg + ".";
scanPackageInner(f, prefix + dir.getName(), packages);
}
} else {
packages.add(pkg == null ? dir.getName() : pkg);
}
}
}