| // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package com.android.tools.r8; | |
| import com.android.tools.r8.errors.CompilationError; | |
| import com.google.common.collect.ImmutableList; | |
| import java.io.IOException; | |
| import java.nio.file.Path; | |
| import java.nio.file.Paths; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| class ExtractMarkerCommand { | |
| public static class Builder { | |
| private boolean printHelp = false; | |
| private boolean includeOther = true; | |
| private boolean verbose; | |
| private boolean summary; | |
| private boolean csv; | |
| private final List<Path> programFiles = new ArrayList<>(); | |
| public Builder setPrintHelp(boolean printHelp) { | |
| this.printHelp = printHelp; | |
| return this; | |
| } | |
| public boolean isPrintHelp() { | |
| return printHelp; | |
| } | |
| public Builder setIncludeOther(boolean includeOther) { | |
| this.includeOther = includeOther; | |
| return this; | |
| } | |
| public Builder setVerbose(boolean verbose) { | |
| this.verbose = verbose; | |
| return this; | |
| } | |
| public Builder setSummary(boolean summary) { | |
| this.summary = summary; | |
| return this; | |
| } | |
| public Builder setCSV(boolean csv) { | |
| this.csv = csv; | |
| return this; | |
| } | |
| public Builder addProgramFile(Path programFile) { | |
| programFiles.add(programFile); | |
| return this; | |
| } | |
| public ExtractMarkerCommand build() throws IOException { | |
| // If printing versions ignore everything else. | |
| if (isPrintHelp()) { | |
| return new ExtractMarkerCommand(isPrintHelp()); | |
| } | |
| return new ExtractMarkerCommand(includeOther, verbose, summary, csv, programFiles); | |
| } | |
| } | |
| static final String USAGE_MESSAGE = String.join("\n", ImmutableList.of( | |
| "Usage: extractmarker [options] <input-files>", | |
| " where <input-files> are dex or vdex files", | |
| " --no-other # Only show information for D8 or R8 processed files.", | |
| " --verbose # More verbose output.", | |
| " --summary # Print summary at the end.", | |
| " --csv # Output in CSV format.", | |
| " --help # Print this message.")); | |
| public static Builder builder() { | |
| return new Builder(); | |
| } | |
| public static Builder parse(String[] args) throws IOException { | |
| Builder builder = builder(); | |
| parse(args, builder); | |
| return builder; | |
| } | |
| private static void parse(String[] args, Builder builder) throws IOException { | |
| for (int i = 0; i < args.length; i++) { | |
| String arg = args[i].trim(); | |
| if (arg.length() == 0) { | |
| continue; | |
| } else if (arg.equals("--no-other")) { | |
| builder.setIncludeOther(false); | |
| } else if (arg.equals("--verbose")) { | |
| builder.setVerbose(true); | |
| } else if (arg.equals("--summary")) { | |
| builder.setSummary(true); | |
| } else if (arg.equals("--csv")) { | |
| builder.setCSV(true); | |
| } else if (arg.equals("--help")) { | |
| builder.setPrintHelp(true); | |
| } else { | |
| if (arg.startsWith("--")) { | |
| throw new CompilationError("Unknown option: " + arg); | |
| } | |
| builder.addProgramFile(Paths.get(arg)); | |
| } | |
| } | |
| } | |
| private final boolean printHelp; | |
| private final boolean includeOther; | |
| private final boolean verbose; | |
| private final boolean summary; | |
| private final boolean csv; | |
| private final List<Path> programFiles; | |
| private ExtractMarkerCommand(boolean includeOther, boolean verbose, boolean summary, | |
| boolean csv, List<Path> programFiles) { | |
| this.printHelp = false; | |
| this.includeOther = includeOther; | |
| this.verbose = verbose; | |
| this.summary = summary; | |
| this.csv = csv; | |
| this.programFiles = programFiles; | |
| } | |
| private ExtractMarkerCommand(boolean printHelp) { | |
| this.printHelp = printHelp; | |
| this.includeOther = true; | |
| this.verbose = false; | |
| this.summary = false; | |
| this.csv = false; | |
| programFiles = ImmutableList.of(); | |
| } | |
| public boolean isPrintHelp() { | |
| return printHelp; | |
| } | |
| public List<Path> getProgramFiles() { | |
| return programFiles; | |
| } | |
| public boolean getIncludeOther() { | |
| return includeOther; | |
| } | |
| public boolean getVerbose() { | |
| return verbose; | |
| } | |
| public boolean getSummary() { | |
| return summary; | |
| } | |
| public boolean getCSV() { | |
| return csv; | |
| } | |
| } |