private List<Folder> collectFromFolder(Folder folder) {
   List<Folder> sourceFolders = new ArrayList<Folder>();
   for (Folder subFolder : folder.subFolders()) {
     sourceFolders.addAll(handleSourceFolders(subFolder));
     sourceFolders.addAll(handleNonSourceFolders(subFolder));
   }
   return sourceFolders;
 }
 private List<Folder> handleSourceFolders(final Folder subFolder) {
   if (subFolder.isSourceFolder()) {
     return new ArrayList<Folder>() {
       {
         add(subFolder);
       }
     };
   }
   return emptyList();
 }
 private List<Folder> handleNonSourceFolders(Folder subFolder) {
   if (subFolder.isNotSourceFolder()) {
     return collectFromFolder(subFolder);
   }
   return emptyList();
 }