void applyFixesInteractively()

in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/cli/TerminalInterface.java [196:243]


  void applyFixesInteractively(ImmutableList<Suggestion> suggestions, Category category) {
    int currentFixNumber = 0;
    Map<Integer, AutoFix> autoFixMap = new HashMap<>();
    for (Suggestion suggestion : suggestions) {
      AutoFix autoFix = suggestion.getAutoFix();
      if (autoFix == null) {
        continue;
      }
      if (currentFixNumber == 0) {
        System.out.println("0) Apply-all");
        ++currentFixNumber;
      }
      autoFixMap.put(currentFixNumber, autoFix);
      System.out.println(
          currentFixNumber + ") " + suggestion.getMessage() + getBytesSavedString(suggestion));
      ++currentFixNumber;
    }
    if (autoFixMap.isEmpty()) {
      System.out.println("No fixes currently available for category: " + category);
      return;
    }
    System.out.println(
        "Select the fixes you would like to apply by typing in the numbers separated by commas or"
            + " spaces. Type 0 to apply all fixes.");
    if (!inputScanner.hasNextLine()) {
      return;
    }
    String input = inputScanner.nextLine();
    Iterable<String> entries =
        Splitter.on(CharMatcher.anyOf(", ")).omitEmptyStrings().trimResults().split(input);
    if (Streams.stream(entries).anyMatch(entry -> entry.equals("0"))) {
      autoFixMap.values().forEach(AutoFix::apply);
    } else {
      for (String entry : entries) {
        try {
          Integer fixNumber = Integer.parseInt(entry);
          if (fixNumber >= 0 && fixNumber < autoFixMap.size()) {
            autoFixMap.get(fixNumber).apply();
          } else {
            System.out.println("Fix #" + entry + " was not in the list; skipping it.");
          }
        } catch (NumberFormatException e) {
          System.out.println("Fix #" + entry + " was not in the list; skipping it.");
        }
      }
    }
    System.out.println("Applied selected fixes.");
  }