[Retrace] Add a builder for constructing Retrace object
Bug: b/201666766
Change-Id: I4fef2616eb220f8b1c8ad41c63c18f5e0f3e24f1
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index a3cf547..aebad6d 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.Version;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.references.TypeReference;
-import com.android.tools.r8.retrace.RetraceCommand.Builder;
import com.android.tools.r8.retrace.internal.ResultWithContextImpl;
import com.android.tools.r8.retrace.internal.RetraceAbortException;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
@@ -64,9 +63,10 @@
+ "[--regex <regexp>, --verbose, --info, --quiet, --verify-mapping-file-hash]",
" where <proguard-map> is an r8 generated mapping file.");
- private static Builder parseArguments(String[] args, DiagnosticsHandler diagnosticsHandler) {
+ private static RetraceCommand.Builder parseArguments(
+ String[] args, DiagnosticsHandler diagnosticsHandler) {
ParseContext context = new ParseContext(args);
- Builder builder = RetraceCommand.builder(diagnosticsHandler);
+ RetraceCommand.Builder builder = RetraceCommand.builder(diagnosticsHandler);
boolean hasSetProguardMap = false;
boolean hasSetStackTrace = false;
boolean hasSetQuiet = false;
@@ -430,7 +430,7 @@
}
private static void run(String[] args, DiagnosticsHandler diagnosticsHandler) {
- Builder builder = parseArguments(args, diagnosticsHandler);
+ RetraceCommand.Builder builder = parseArguments(args, diagnosticsHandler);
if (builder == null) {
// --help or --version was an argument to list
if (Arrays.asList(args).contains("--version")) {
@@ -491,6 +491,48 @@
}
}
+ public static <T, ST extends StackTraceElementProxy<T, ST>> Builder<T, ST> builder() {
+ return new Builder<>();
+ }
+
+ @Keep
+ public static class Builder<T, ST extends StackTraceElementProxy<T, ST>> {
+
+ private StackTraceLineParser<T, ST> stackTraceLineParser;
+ private StackTraceElementProxyRetracer<T, ST> proxyRetracer;
+ private DiagnosticsHandler diagnosticsHandler;
+ protected boolean isVerbose;
+
+ public Builder<T, ST> setStackTraceLineParser(
+ StackTraceLineParser<T, ST> stackTraceLineParser) {
+ this.stackTraceLineParser = stackTraceLineParser;
+ return this;
+ }
+
+ public Builder<T, ST> setRetracer(Retracer retracer) {
+ return setProxyRetracer(StackTraceElementProxyRetracer.createDefault(retracer));
+ }
+
+ public Builder<T, ST> setProxyRetracer(StackTraceElementProxyRetracer<T, ST> proxyRetracer) {
+ this.proxyRetracer = proxyRetracer;
+ return this;
+ }
+
+ public Builder<T, ST> setDiagnosticsHandler(DiagnosticsHandler diagnosticsHandler) {
+ this.diagnosticsHandler = diagnosticsHandler;
+ return this;
+ }
+
+ public Builder<T, ST> setVerbose(boolean isVerbose) {
+ this.isVerbose = isVerbose;
+ return this;
+ }
+
+ public Retrace<T, ST> build() {
+ return new Retrace<>(stackTraceLineParser, proxyRetracer, diagnosticsHandler, isVerbose);
+ }
+ }
+
private static class RetraceDiagnosticsHandler implements DiagnosticsHandler {
private final DiagnosticsHandler diagnosticsHandler;