Clean-up retrace API
Bug: 159425023
Change-Id: I1023d8085837054abc5748d5780222cd66c0c0b1
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 90c1cca..0e2a16e 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -15,13 +15,9 @@
import com.android.tools.r8.retrace.RetraceCommand.ProguardMapProducer;
import com.android.tools.r8.retrace.internal.PlainStackTraceVisitor;
import com.android.tools.r8.retrace.internal.RetraceAbortException;
-import com.android.tools.r8.retrace.internal.RetraceCommandLineResult;
import com.android.tools.r8.retrace.internal.RetraceRegularExpression;
-import com.android.tools.r8.retrace.internal.RetracerImpl;
import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl;
-import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl.RetraceStackTraceProxyImpl;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
-import com.android.tools.r8.retrace.internal.StackTraceVisitor;
import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.ExceptionDiagnostic;
import com.android.tools.r8.utils.OptionsParsing;
@@ -43,6 +39,7 @@
import java.util.List;
import java.util.Map;
import java.util.Scanner;
+import java.util.function.BiConsumer;
/**
* A retrace tool for obfuscated stack traces.
@@ -170,61 +167,32 @@
try {
Timing timing = Timing.create("R8 retrace", command.printMemory());
timing.begin("Read proguard map");
- RetracerImpl retracer =
- RetracerImpl.create(command.proguardMapProducer, command.diagnosticsHandler);
+ Retracer retracer =
+ Retracer.createDefault(command.proguardMapProducer, command.diagnosticsHandler);
timing.end();
- RetraceCommandLineResult result;
timing.begin("Parse and Retrace");
StackTraceVisitor<StackTraceElementStringProxy> stackTraceVisitor =
command.regularExpression != null
- ? new RetraceRegularExpression(
- retracer, command.stackTrace, command.regularExpression)
+ ? new RetraceRegularExpression(command.stackTrace, command.regularExpression)
: new PlainStackTraceVisitor(command.stackTrace, command.diagnosticsHandler);
- StackTraceElementProxyRetracer<StackTraceElementStringProxy> proxyRetracer =
- new StackTraceElementProxyRetracerImpl<>(retracer);
- List<String> retracedStrings = new ArrayList<>();
- stackTraceVisitor.forEach(
- stackTraceElement -> {
- Box<List<RetraceStackTraceProxyImpl<StackTraceElementStringProxy>>> currentList =
- new Box<>();
- Map<
- RetraceStackTraceProxyImpl<StackTraceElementStringProxy>,
- List<RetraceStackTraceProxyImpl<StackTraceElementStringProxy>>>
- ambiguousBlocks = new HashMap<>();
- proxyRetracer
- .retrace(stackTraceElement)
- .forEach(
- retracedElement -> {
- if (retracedElement.isTopFrame() || !retracedElement.hasRetracedClass()) {
- List<RetraceStackTraceProxyImpl<StackTraceElementStringProxy>> block =
- new ArrayList<>();
- ambiguousBlocks.put(retracedElement, block);
- currentList.set(block);
- }
- currentList.get().add(retracedElement);
- });
- ambiguousBlocks.keySet().stream()
- .sorted()
- .forEach(
- topFrame -> {
- ambiguousBlocks
- .get(topFrame)
- .forEach(
- frame -> {
- StackTraceElementStringProxy originalItem = frame.getOriginalItem();
- retracedStrings.add(
- originalItem.toRetracedItem(
- frame, !currentList.isSet(), command.isVerbose));
- // Use the current list as indicator for us seeing the first
- // sorted element.
- currentList.set(null);
- });
- });
+ List<String> retracedStrings = new ArrayList<>();
+ Box<StackTraceElementStringProxy> lastReportedFrame = new Box<>();
+ run(
+ stackTraceVisitor,
+ new StackTraceElementProxyRetracerImpl<>(retracer),
+ (stackTraceElement, frames) -> {
+ frames.forEach(
+ frame -> {
+ StackTraceElementStringProxy originalItem = frame.getOriginalItem();
+ retracedStrings.add(
+ originalItem.toRetracedItem(
+ frame, lastReportedFrame.get() == stackTraceElement, command.isVerbose));
+ lastReportedFrame.set(stackTraceElement);
+ });
});
- result = new RetraceCommandLineResult(retracedStrings);
timing.end();
timing.begin("Report result");
- command.retracedStackTraceConsumer.accept(result.getNodes());
+ command.retracedStackTraceConsumer.accept(retracedStrings);
timing.end();
if (command.printTimes()) {
timing.report();
@@ -235,6 +203,42 @@
}
}
+ /**
+ * Entry point for running retrace over visited stack traces.
+ *
+ * @param stackTraceVisitor the stack trace visitor.
+ * @param proxyRetracer the retracer used to parse each stack trace frame.
+ * @param resultConsumer consumer to accept each parsed stack trace frame. The stack-trace element
+ * is guaranteed to be unique per line.
+ */
+ public static <T extends StackTraceElementProxy<?>> void run(
+ StackTraceVisitor<T> stackTraceVisitor,
+ StackTraceElementProxyRetracer<T> proxyRetracer,
+ BiConsumer<T, List<RetraceStackTraceProxy<T>>> resultConsumer) {
+ stackTraceVisitor.forEach(
+ stackTraceElement -> {
+ Box<List<RetraceStackTraceProxy<T>>> currentList = new Box<>();
+ Map<RetraceStackTraceProxy<T>, List<RetraceStackTraceProxy<T>>> ambiguousBlocks =
+ new HashMap<>();
+ proxyRetracer
+ .retrace(stackTraceElement)
+ .forEach(
+ retracedElement -> {
+ if (retracedElement.isTopFrame() || !retracedElement.hasRetracedClass()) {
+ List<RetraceStackTraceProxy<T>> block = new ArrayList<>();
+ ambiguousBlocks.put(retracedElement, block);
+ currentList.set(block);
+ }
+ currentList.get().add(retracedElement);
+ });
+ ambiguousBlocks.keySet().stream()
+ .sorted()
+ .forEach(
+ topFrame ->
+ resultConsumer.accept(stackTraceElement, ambiguousBlocks.get(topFrame)));
+ });
+ }
+
public static void run(String[] args) throws RetraceFailedException {
// To be compatible with standard retrace and remapper, we translate -arg into --arg.
String[] mappedArgs = new String[args.length];
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
index f9d0d6f..6751a2a 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
@@ -33,6 +33,8 @@
RetraceClassResult forEach(Consumer<Element> resultConsumer);
+ boolean hasRetraceResult();
+
boolean isAmbiguous();
@Keep
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceInvalidStackTraceLineDiagnostics.java b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
similarity index 92%
rename from src/main/java/com/android/tools/r8/retrace/internal/RetraceInvalidStackTraceLineDiagnostics.java
rename to src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
index 547534f..d2a6827 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceInvalidStackTraceLineDiagnostics.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
@@ -2,7 +2,7 @@
// 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.retrace.internal;
+package com.android.tools.r8.retrace;
import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.Keep;
@@ -40,7 +40,7 @@
return message;
}
- static RetraceInvalidStackTraceLineDiagnostics createNull(int lineNumber) {
+ public static RetraceInvalidStackTraceLineDiagnostics createNull(int lineNumber) {
return new RetraceInvalidStackTraceLineDiagnostics(lineNumber, NULL_STACK_TRACE_LINE_MESSAGE);
}
diff --git a/src/main/java/com/android/tools/r8/retrace/Retracer.java b/src/main/java/com/android/tools/r8/retrace/Retracer.java
index 57b7607..ed1d338 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retracer.java
@@ -4,11 +4,14 @@
package com.android.tools.r8.retrace;
+import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.Keep;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.TypeReference;
+import com.android.tools.r8.retrace.RetraceCommand.ProguardMapProducer;
+import com.android.tools.r8.retrace.internal.RetracerImpl;
/** This is the main api interface for retrace. */
@Keep
@@ -23,4 +26,9 @@
RetraceFieldResult retraceField(FieldReference fieldReference);
RetraceTypeResult retraceType(TypeReference typeReference);
+
+ static Retracer createDefault(
+ ProguardMapProducer proguardMapProducer, DiagnosticsHandler diagnosticsHandler) {
+ return RetracerImpl.create(proguardMapProducer, diagnosticsHandler);
+ }
}
diff --git a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
index 17d9005..17de5f1 100644
--- a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
@@ -5,11 +5,16 @@
package com.android.tools.r8.retrace;
import com.android.tools.r8.Keep;
-import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl.RetraceStackTraceProxyImpl;
+import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl;
import java.util.stream.Stream;
@Keep
public interface StackTraceElementProxyRetracer<T extends StackTraceElementProxy<?>> {
- Stream<RetraceStackTraceProxyImpl<T>> retrace(T element);
+ Stream<RetraceStackTraceProxy<T>> retrace(T element);
+
+ static <T extends StackTraceElementProxy<?>> StackTraceElementProxyRetracer<T> createDefault(
+ Retracer retracer) {
+ return new StackTraceElementProxyRetracerImpl<>(retracer);
+ }
}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceVisitor.java b/src/main/java/com/android/tools/r8/retrace/StackTraceVisitor.java
similarity index 77%
rename from src/main/java/com/android/tools/r8/retrace/internal/StackTraceVisitor.java
rename to src/main/java/com/android/tools/r8/retrace/StackTraceVisitor.java
index dfe937a..bf2de73 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceVisitor.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceVisitor.java
@@ -2,11 +2,12 @@
// 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.retrace.internal;
+package com.android.tools.r8.retrace;
-import com.android.tools.r8.retrace.StackTraceElementProxy;
+import com.android.tools.r8.Keep;
import java.util.function.Consumer;
+@Keep
public interface StackTraceVisitor<T extends StackTraceElementProxy<?>> {
void forEach(Consumer<T> consumer);
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java b/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
index 7f7d7fc..45b0c28 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
@@ -7,6 +7,8 @@
import static com.google.common.base.Predicates.not;
import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.retrace.RetraceInvalidStackTraceLineDiagnostics;
+import com.android.tools.r8.retrace.StackTraceVisitor;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy.ClassNameType;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy.StackTraceElementStringProxyBuilder;
import com.android.tools.r8.utils.DescriptorUtils;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
index 45b7fdd..15fdfdc 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetraceClassResult;
import com.android.tools.r8.retrace.RetraceFrameResult;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.Pair;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@@ -29,17 +30,17 @@
private final ClassReference obfuscatedReference;
private final ClassNamingForNameMapper mapper;
- private final RetracerImpl retracer;
+ private final Retracer retracer;
private RetraceClassResultImpl(
- ClassReference obfuscatedReference, ClassNamingForNameMapper mapper, RetracerImpl retracer) {
+ ClassReference obfuscatedReference, ClassNamingForNameMapper mapper, Retracer retracer) {
this.obfuscatedReference = obfuscatedReference;
this.mapper = mapper;
this.retracer = retracer;
}
static RetraceClassResultImpl create(
- ClassReference obfuscatedReference, ClassNamingForNameMapper mapper, RetracerImpl retracer) {
+ ClassReference obfuscatedReference, ClassNamingForNameMapper mapper, Retracer retracer) {
return new RetraceClassResultImpl(obfuscatedReference, mapper, retracer);
}
@@ -162,7 +163,8 @@
: mappedRangesForPosition;
}
- boolean hasRetraceResult() {
+ @Override
+ public boolean hasRetraceResult() {
return mapper != null;
}
@@ -196,7 +198,7 @@
RetraceClassResultImpl classResult,
List<Pair<ElementImpl, T>> mappings,
D definition,
- RetracerImpl retracer);
+ Retracer retracer);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
index 3a65b0a..73b7dbd 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
@@ -4,31 +4,30 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.naming.MemberNaming;
import com.android.tools.r8.naming.MemberNaming.FieldSignature;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.retrace.RetraceFieldResult;
import com.android.tools.r8.retrace.RetraceSourceFileResult;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.Pair;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;
-@Keep
public class RetraceFieldResultImpl implements RetraceFieldResult {
private final RetraceClassResultImpl classResult;
private final List<Pair<RetraceClassResultImpl.ElementImpl, List<MemberNaming>>> memberNamings;
private final FieldDefinition fieldDefinition;
- private final RetracerImpl retracer;
+ private final Retracer retracer;
RetraceFieldResultImpl(
RetraceClassResultImpl classResult,
List<Pair<RetraceClassResultImpl.ElementImpl, List<MemberNaming>>> memberNamings,
FieldDefinition fieldDefinition,
- RetracerImpl retracer) {
+ Retracer retracer) {
this.classResult = classResult;
this.memberNamings = memberNamings;
this.fieldDefinition = fieldDefinition;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
index 24c5a8e..35f1f63 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.retrace.RetraceSourceFileResult;
import com.android.tools.r8.retrace.RetracedClassMember;
import com.android.tools.r8.retrace.RetracedMethod;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.Pair;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -29,14 +30,14 @@
private final MethodDefinition methodDefinition;
private final int obfuscatedPosition;
private final List<Pair<RetraceClassResultImpl.ElementImpl, List<MappedRange>>> mappedRanges;
- private final RetracerImpl retracer;
+ private final Retracer retracer;
public RetraceFrameResultImpl(
RetraceClassResultImpl classResult,
List<Pair<RetraceClassResultImpl.ElementImpl, List<MappedRange>>> mappedRanges,
MethodDefinition methodDefinition,
int obfuscatedPosition,
- RetracerImpl retracer) {
+ Retracer retracer) {
this.classResult = classResult;
this.methodDefinition = methodDefinition;
this.obfuscatedPosition = obfuscatedPosition;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
index 93fa544..46d63bc 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
@@ -4,11 +4,11 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.naming.ClassNamingForNameMapper.MappedRange;
import com.android.tools.r8.naming.ClassNamingForNameMapper.MappedRangesOfName;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.retrace.RetraceMethodResult;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.Pair;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@@ -16,19 +16,18 @@
import java.util.function.Consumer;
import java.util.stream.Stream;
-@Keep
public class RetraceMethodResultImpl implements RetraceMethodResult {
private final MethodDefinition methodDefinition;
private final RetraceClassResultImpl classResult;
private final List<Pair<RetraceClassResultImpl.ElementImpl, List<MappedRange>>> mappedRanges;
- private final RetracerImpl retracer;
+ private final Retracer retracer;
RetraceMethodResultImpl(
RetraceClassResultImpl classResult,
List<Pair<RetraceClassResultImpl.ElementImpl, List<MappedRange>>> mappedRanges,
MethodDefinition methodDefinition,
- RetracerImpl retracer) {
+ Retracer retracer) {
this.classResult = classResult;
this.mappedRanges = mappedRanges;
this.methodDefinition = methodDefinition;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
index ca9a2f8..e5a2906 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.retrace.internal;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.retrace.StackTraceVisitor;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy.ClassNameType;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy.StackTraceElementStringProxyBuilder;
import java.util.ArrayList;
@@ -15,7 +16,6 @@
public class RetraceRegularExpression implements StackTraceVisitor<StackTraceElementStringProxy> {
- private final RetracerImpl retracer;
private final List<String> stackTrace;
private final String regularExpression;
@@ -35,9 +35,7 @@
private static final String CAPTURE_GROUP_PREFIX = "captureGroup";
private static final int FIRST_CAPTURE_GROUP_INDEX = 0;
- public RetraceRegularExpression(
- RetracerImpl retracer, List<String> stackTrace, String regularExpression) {
- this.retracer = retracer;
+ public RetraceRegularExpression(List<String> stackTrace, String regularExpression) {
this.stackTrace = stackTrace;
this.regularExpression = regularExpression;
}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
index 0680800..b48d5f3 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
@@ -6,20 +6,21 @@
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetraceTypeResult;
+import com.android.tools.r8.retrace.Retracer;
import java.util.function.Consumer;
import java.util.stream.Stream;
public class RetraceTypeResultImpl implements RetraceTypeResult {
private final TypeReference obfuscatedType;
- private final RetracerImpl retracer;
+ private final Retracer retracer;
- private RetraceTypeResultImpl(TypeReference obfuscatedType, RetracerImpl retracer) {
+ private RetraceTypeResultImpl(TypeReference obfuscatedType, Retracer retracer) {
this.obfuscatedType = obfuscatedType;
this.retracer = retracer;
}
- static RetraceTypeResultImpl create(TypeReference obfuscatedType, RetracerImpl retracer) {
+ static RetraceTypeResultImpl create(TypeReference obfuscatedType, Retracer retracer) {
return new RetraceTypeResultImpl(obfuscatedType, retracer);
}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
index 46e8ddc..dc96687 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
@@ -10,11 +10,13 @@
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.references.TypeReference;
+import com.android.tools.r8.retrace.RetraceClassResult;
import com.android.tools.r8.retrace.RetraceClassResult.Element;
import com.android.tools.r8.retrace.RetraceSourceFileResult;
import com.android.tools.r8.retrace.RetracedClass;
import com.android.tools.r8.retrace.RetracedMethod;
import com.android.tools.r8.retrace.RetracedMethod.KnownRetracedMethod;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.collect.Sets;
@@ -72,7 +74,7 @@
}
static RetraceSourceFileResult getSourceFile(
- Element classElement, RetracedClass context, String sourceFile, RetracerImpl retracer) {
+ Element classElement, RetracedClass context, String sourceFile, Retracer retracer) {
// If no context is specified always retrace using the found class element.
if (context == null) {
return classElement.retraceSourceFile(sourceFile);
@@ -80,8 +82,7 @@
if (context.equals(classElement.getRetracedClass())) {
return classElement.retraceSourceFile(sourceFile);
} else {
- RetraceClassResultImpl contextClassResult =
- retracer.retraceClass(context.getClassReference());
+ RetraceClassResult contextClassResult = retracer.retraceClass(context.getClassReference());
assert !contextClassResult.isAmbiguous();
if (contextClassResult.hasRetraceResult()) {
Box<RetraceSourceFileResult> retraceSourceFile = new Box<>();
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassImpl.java
index b2da5d8..47c41b9 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedClassImpl.java
@@ -4,11 +4,9 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.retrace.RetracedClass;
-@Keep
public final class RetracedClassImpl implements RetracedClass {
private final ClassReference classReference;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedFieldImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedFieldImpl.java
index aee0cde..9dd96c8 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedFieldImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedFieldImpl.java
@@ -4,13 +4,11 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetracedField;
import java.util.Objects;
-@Keep
public abstract class RetracedFieldImpl implements RetracedField {
private RetracedFieldImpl() {}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodImpl.java
index 1f4ad68..ec4ff42 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodImpl.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetracedMethod;
@@ -14,7 +13,6 @@
import java.util.Objects;
import java.util.Optional;
-@Keep
public abstract class RetracedMethodImpl implements RetracedMethod {
private static final int NO_POSITION = -1;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedTypeImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedTypeImpl.java
index d467cc1..38d1a83 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedTypeImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedTypeImpl.java
@@ -4,13 +4,11 @@
package com.android.tools.r8.retrace.internal;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetracedType;
import java.util.Objects;
-@Keep
public final class RetracedTypeImpl implements RetracedType {
private final TypeReference typeReference;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
index a949fc1..c3453b5 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
@@ -8,11 +8,14 @@
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetraceClassResult;
import com.android.tools.r8.retrace.RetraceFieldResult;
+import com.android.tools.r8.retrace.RetraceFrameResult;
import com.android.tools.r8.retrace.RetraceStackTraceProxy;
+import com.android.tools.r8.retrace.RetraceTypeResult;
import com.android.tools.r8.retrace.RetracedClass;
import com.android.tools.r8.retrace.RetracedField;
import com.android.tools.r8.retrace.RetracedMethod;
import com.android.tools.r8.retrace.RetracedType;
+import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.retrace.StackTraceElementProxy;
import com.android.tools.r8.retrace.StackTraceElementProxyRetracer;
import com.android.tools.r8.utils.Box;
@@ -27,18 +30,18 @@
public class StackTraceElementProxyRetracerImpl<T extends StackTraceElementProxy<?>>
implements StackTraceElementProxyRetracer<T> {
- private final RetracerImpl retracer;
+ private final Retracer retracer;
- public StackTraceElementProxyRetracerImpl(RetracerImpl retracer) {
+ public StackTraceElementProxyRetracerImpl(Retracer retracer) {
this.retracer = retracer;
}
@Override
- public Stream<RetraceStackTraceProxyImpl<T>> retrace(T element) {
+ public Stream<RetraceStackTraceProxy<T>> retrace(T element) {
if (!element.hasClassName()) {
return Stream.of(RetraceStackTraceProxyImpl.builder(element).build());
}
- RetraceClassResultImpl classResult = retracer.retraceClass(element.getClassReference());
+ RetraceClassResult classResult = retracer.retraceClass(element.getClassReference());
if (element.hasMethodName()) {
return retraceMethod(element, classResult);
} else if (element.hasFieldName()) {
@@ -48,7 +51,7 @@
}
}
- private Stream<RetraceStackTraceProxyImpl<T>> retraceClassOrType(
+ private Stream<RetraceStackTraceProxy<T>> retraceClassOrType(
T element, RetraceClassResult classResult) {
return classResult.stream()
.flatMap(
@@ -76,15 +79,15 @@
})));
}
- private Stream<RetraceStackTraceProxyImpl<T>> retraceMethod(
- T element, RetraceClassResultImpl classResult) {
+ private Stream<RetraceStackTraceProxy<T>> retraceMethod(
+ T element, RetraceClassResult classResult) {
return retraceFieldOrReturnType(element)
.flatMap(
fieldOrReturnTypeConsumer ->
retracedMethodArguments(element)
.flatMap(
argumentsConsumer -> {
- RetraceFrameResultImpl frameResult =
+ RetraceFrameResult frameResult =
element.hasLineNumber()
? classResult.lookupFrame(
element.getMethodName(), element.getLineNumber())
@@ -123,7 +126,7 @@
}));
}
- private Stream<RetraceStackTraceProxyImpl<T>> retraceField(
+ private Stream<RetraceStackTraceProxy<T>> retraceField(
T element, RetraceClassResult classResult) {
return retraceFieldOrReturnType(element)
.flatMap(
@@ -166,7 +169,7 @@
return Stream.of(proxy -> proxy.setRetracedFieldOrReturnType(RetracedTypeImpl.createVoid()));
} else {
TypeReference typeReference = Reference.typeFromTypeName(elementOrReturnType);
- RetraceTypeResultImpl retraceTypeResult = retracer.retraceType(typeReference);
+ RetraceTypeResult retraceTypeResult = retracer.retraceType(typeReference);
return retraceTypeResult.stream()
.map(
type ->
@@ -184,7 +187,7 @@
if (!element.hasMethodArguments()) {
return Stream.of(noEffect -> {});
}
- List<RetraceTypeResultImpl> retracedResults =
+ List<RetraceTypeResult> retracedResults =
Arrays.stream(element.getMethodArguments().split(","))
.map(typeName -> retracer.retraceType(Reference.typeFromTypeName(typeName)))
.collect(Collectors.toList());
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
index f649598..5a76e44 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
@@ -10,11 +10,11 @@
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.retrace.RetraceStackTraceProxy;
import com.android.tools.r8.retrace.RetracedClass;
import com.android.tools.r8.retrace.RetracedField;
import com.android.tools.r8.retrace.RetracedType;
import com.android.tools.r8.retrace.StackTraceElementProxy;
-import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl.RetraceStackTraceProxyImpl;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.StringUtils.BraceType;
import com.android.tools.r8.utils.TriFunction;
@@ -136,7 +136,7 @@
}
public String toRetracedItem(
- RetraceStackTraceProxyImpl<StackTraceElementStringProxy> retracedProxy,
+ RetraceStackTraceProxy<StackTraceElementStringProxy> retracedProxy,
boolean printAmbiguous,
boolean verbose) {
StringBuilder sb = new StringBuilder();
@@ -334,7 +334,7 @@
protected final int startIndex;
protected final int endIndex;
private final TriFunction<
- RetraceStackTraceProxyImpl<StackTraceElementStringProxy>,
+ RetraceStackTraceProxy<StackTraceElementStringProxy>,
StackTraceElementStringProxy,
Boolean,
String>
@@ -344,7 +344,7 @@
int startIndex,
int endIndex,
TriFunction<
- RetraceStackTraceProxyImpl<StackTraceElementStringProxy>,
+ RetraceStackTraceProxy<StackTraceElementStringProxy>,
StackTraceElementStringProxy,
Boolean,
String>
@@ -367,7 +367,7 @@
int startIndex,
int endIndex,
TriFunction<
- RetraceStackTraceProxyImpl<StackTraceElementStringProxy>,
+ RetraceStackTraceProxy<StackTraceElementStringProxy>,
StackTraceElementStringProxy,
Boolean,
String>
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
index 2b90ffc..3ff24fa 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.retrace;
import com.android.tools.r8.TestDiagnosticMessagesImpl;
-import com.android.tools.r8.retrace.internal.RetracerImpl;
import com.android.tools.r8.retrace.mappings.FieldsWithSameMinifiedNameMapping;
import com.android.tools.r8.retrace.mappings.MappingForTest;
import java.util.function.Consumer;
@@ -21,6 +20,6 @@
private void runRetraceTest(MappingForTest mappingForTest, Consumer<Retracer> inspection) {
inspection.accept(
- RetracerImpl.create(mappingForTest::mapping, new TestDiagnosticMessagesImpl()));
+ Retracer.createDefault(mappingForTest::mapping, new TestDiagnosticMessagesImpl()));
}
}
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 82d3915..458f56c 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -15,7 +15,6 @@
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.retrace.internal.RetraceAbortException;
-import com.android.tools.r8.retrace.internal.RetracerImpl;
import com.android.tools.r8.retrace.stacktraces.ActualBotStackTraceBase;
import com.android.tools.r8.retrace.stacktraces.ActualIdentityStackTrace;
import com.android.tools.r8.retrace.stacktraces.ActualRetraceBotStackTrace;
@@ -201,9 +200,9 @@
}
private void inspectRetraceTest(
- StackTraceForTest stackTraceForTest, Consumer<Retracer> inspection) throws Exception {
+ StackTraceForTest stackTraceForTest, Consumer<Retracer> inspection) {
inspection.accept(
- RetracerImpl.create(stackTraceForTest::mapping, new TestDiagnosticMessagesImpl()));
+ Retracer.createDefault(stackTraceForTest::mapping, new TestDiagnosticMessagesImpl()));
}
private TestDiagnosticMessagesImpl runRetraceTest(StackTraceForTest stackTraceForTest) {
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
index d2518b6..d70775f 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
@@ -36,7 +36,6 @@
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.retrace.internal.DirectClassNameMapperProguardMapProducer;
-import com.android.tools.r8.retrace.internal.RetracerImpl;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.BiMapContainer;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -464,7 +463,7 @@
}
public Retracer retrace() {
- return RetracerImpl.create(
+ return Retracer.createDefault(
new InternalProguardMapProducer(
mapping == null ? ClassNameMapper.builder().build() : mapping),
new TestDiagnosticMessagesImpl());