private static ImmutableList analyzeDirectory()

in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/analyzers/ProjectAnalyzer.java [75:118]


  private static ImmutableList<Suggestion> analyzeDirectory(
      File rootDirectory,
      Project project,
      File directory,
      ImmutableList<ProjectSuggester> projectSuggesters,
      ImmutableList<ProjectTreeSuggester> suggesters) {
    ImmutableList.Builder<Suggestion> resultBuilder = ImmutableList.<Suggestion>builder();
    File[] files = directory.listFiles();
    for (File file : files) {
      String name = file.getName();
      if (name.equals(".gradle") || name.equals(".idea") || name.equals("build")) {
        continue;
      }
      if (file.isDirectory()) {
        File buildFile = new File(file, Project.BUILD_GRADLE);
        if (buildFile.exists()) {
          Project subProject = Project.create(file, project);
          resultBuilder.addAll(
              analyzeProject(rootDirectory, subProject, file, projectSuggesters, suggesters));
        } else {
          // recurse, through directory under the same directory.
          resultBuilder.addAll(
              analyzeDirectory(rootDirectory, project, file, projectSuggesters, suggesters));
        }
      } else {
        GradleContext context =
            project != null ? project.getContext() : GradleContext.create(1, 1, false);
        Path pathWithinModule =
            project != null
                ? Paths.get(project.getProjectDirectory().getPath())
                    .relativize(Paths.get(file.getPath()))
                : Paths.get(file.getName());
        Path pathWithinRoot =
            Paths.get(rootDirectory.getPath()).relativize(Paths.get(file.getPath()));
        for (ProjectTreeSuggester suggester : suggesters) {
          SystemFileData systemFileData =
              new SystemFileData(file, pathWithinRoot, pathWithinModule);
          resultBuilder.addAll(suggester.processProjectEntry(context, systemFileData));
        }
      }
    }

    return resultBuilder.build();
  }