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.");
}