Remove ClassNameMapper from the public api of Retrace
Bug: 163981284
Change-Id: I4e37c9519eefb6f6e8a7bb5b1d31ca66eed0a46f
diff --git a/src/main/java/com/android/tools/r8/retrace/DirectClassNameMapperProguardMapProducer.java b/src/main/java/com/android/tools/r8/retrace/DirectClassNameMapperProguardMapProducer.java
new file mode 100644
index 0000000..02dfec0
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/DirectClassNameMapperProguardMapProducer.java
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, 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.retrace;
+
+import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.retrace.RetraceCommand.ProguardMapProducer;
+import java.io.IOException;
+
+public interface DirectClassNameMapperProguardMapProducer extends ProguardMapProducer {
+
+ ClassNameMapper getClassNameMapper();
+
+ @Override
+ default String get() throws IOException {
+ throw new RuntimeException("Should not be called for DirectClassNameMapperProguardMapProducer");
+ }
+}
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 f34a5aa..ab721be 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.Keep;
import com.android.tools.r8.Version;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.retrace.RetraceCommand.Builder;
import com.android.tools.r8.retrace.RetraceCommand.ProguardMapProducer;
import com.android.tools.r8.utils.OptionsParsing;
@@ -142,11 +141,9 @@
try {
Timing timing = Timing.create("R8 retrace", command.printMemory());
timing.begin("Read proguard map");
- ClassNameMapper classNameMapper =
- ClassNameMapper.mapperFromString(
- command.proguardMapProducer.get(), command.diagnosticsHandler);
+ RetraceApi retracer =
+ Retracer.create(command.proguardMapProducer, command.diagnosticsHandler);
timing.end();
- RetraceApi retracer = Retracer.create(classNameMapper);
RetraceCommandLineResult result;
timing.begin("Parse and Retrace");
if (command.regularExpression != null) {
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 31619e7..88c845a 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retracer.java
@@ -4,12 +4,15 @@
package com.android.tools.r8.retrace;
+import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.Keep;
import com.android.tools.r8.naming.ClassNameMapper;
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 java.io.IOException;
/** A default implementation for the retrace api using the ClassNameMapper defined in R8. */
@Keep
@@ -22,7 +25,15 @@
assert classNameMapper != null;
}
- public static RetraceApi create(ClassNameMapper classNameMapper) {
+ public static RetraceApi create(
+ ProguardMapProducer proguardMapProducer, DiagnosticsHandler diagnosticsHandler)
+ throws IOException {
+ if (proguardMapProducer instanceof DirectClassNameMapperProguardMapProducer) {
+ return new Retracer(
+ ((DirectClassNameMapperProguardMapProducer) proguardMapProducer).getClassNameMapper());
+ }
+ ClassNameMapper classNameMapper =
+ ClassNameMapper.mapperFromString(proguardMapProducer.get(), diagnosticsHandler);
return new Retracer(classNameMapper);
}
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 731e807..bffcd14 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.retrace.Retrace.RetraceAbortException;
import com.android.tools.r8.retrace.stacktraces.ActualBotStackTraceBase;
import com.android.tools.r8.retrace.stacktraces.ActualIdentityStackTrace;
@@ -203,11 +202,8 @@
private void inspectRetraceTest(
StackTraceForTest stackTraceForTest, Consumer<RetraceApi> inspection) throws Exception {
- TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
- ClassNameMapper classNameMapper =
- ClassNameMapper.mapperFromString(stackTraceForTest.mapping(), diagnosticsHandler);
- RetraceApi retracer = Retracer.create(classNameMapper);
- inspection.accept(retracer);
+ inspection.accept(
+ Retracer.create(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 efaf58b..5d4b3a4 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
@@ -7,6 +7,7 @@
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.StringResource;
+import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.cf.code.CfTryCatch;
import com.android.tools.r8.code.Instruction;
@@ -38,6 +39,7 @@
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.retrace.DirectClassNameMapperProguardMapProducer;
import com.android.tools.r8.retrace.RetraceApi;
import com.android.tools.r8.retrace.Retracer;
import com.android.tools.r8.utils.AndroidApp;
@@ -484,6 +486,28 @@
}
public RetraceApi retrace() {
- return Retracer.create(mapping == null ? ClassNameMapper.builder().build() : mapping);
+ try {
+ return Retracer.create(
+ new InternalProguardMapProducer(
+ mapping == null ? ClassNameMapper.builder().build() : mapping),
+ new TestDiagnosticMessagesImpl());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static class InternalProguardMapProducer
+ implements DirectClassNameMapperProguardMapProducer {
+
+ public final ClassNameMapper prebuiltMapper;
+
+ public InternalProguardMapProducer(ClassNameMapper prebuiltMapper) {
+ this.prebuiltMapper = prebuiltMapper;
+ }
+
+ @Override
+ public ClassNameMapper getClassNameMapper() {
+ return prebuiltMapper;
+ }
}
}