[Retrace] Change api to allow for partial reading mapping provider
Bug: b/234758957
Bug: b/201666766
Change-Id: Id8a0d6e5050670bc6ee71813c2bbd33312a6ccc6
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
index a3dbc6c..1f7ca0d 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
@@ -242,6 +242,12 @@
}
public ClassNameMapper combine(ClassNameMapper other) {
+ if (other == null || other.isEmpty()) {
+ return this;
+ }
+ if (this.isEmpty()) {
+ return other;
+ }
ImmutableMap.Builder<String, ClassNamingForNameMapper> builder = ImmutableMap.builder();
Map<String, ClassNamingForNameMapper> otherClassMappings = other.getClassNameMappings();
for (Entry<String, ClassNamingForNameMapper> mappingEntry : classNameMappings.entrySet()) {
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingProvider.java b/src/main/java/com/android/tools/r8/retrace/MappingProvider.java
deleted file mode 100644
index 18bf9ee..0000000
--- a/src/main/java/com/android/tools/r8/retrace/MappingProvider.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2022, 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.Keep;
-import com.android.tools.r8.retrace.internal.MappingProviderInternal;
-
-@Keep
-public abstract class MappingProvider extends MappingProviderInternal {}
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java
new file mode 100644
index 0000000..068335d
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java
@@ -0,0 +1,30 @@
+// Copyright (c) 2022, 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.DiagnosticsHandler;
+import com.android.tools.r8.Keep;
+import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.retrace.internal.MappingSupplierInternal;
+
+@Keep
+public abstract class MappingSupplier<T extends MappingSupplier<T>>
+ extends MappingSupplierInternal {
+
+ /***
+ * Register an allowed mapping lookup
+ *
+ * @param classReference The minified class reference allowed to be lookup up.
+ */
+ public abstract T registerUse(ClassReference classReference);
+
+ /***
+ * Allow looking up all class references. This can cause a slow down because it may fetch
+ * information multiple times or read the entire mapping.
+ */
+ public abstract T allowLookupAllClasses();
+
+ public abstract void verifyMappingFileHash(DiagnosticsHandler diagnosticsHandler);
+}
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingProviderBuilder.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
similarity index 64%
rename from src/main/java/com/android/tools/r8/retrace/MappingProviderBuilder.java
rename to src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
index f9dbd492..c57d88a 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingProviderBuilder.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
@@ -4,18 +4,15 @@
package com.android.tools.r8.retrace;
-import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.Keep;
@Keep
-public abstract class MappingProviderBuilder<
- P extends MappingProvider, T extends MappingProviderBuilder<P, T>> {
+public abstract class MappingSupplierBuilder<
+ P extends MappingSupplier, T extends MappingSupplierBuilder<P, T>> {
public abstract T self();
public abstract T setAllowExperimental(boolean allowExperimental);
- public abstract T setDiagnosticsHandler(DiagnosticsHandler diagnosticsHandler);
-
public abstract P build();
}
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMappingProvider.java b/src/main/java/com/android/tools/r8/retrace/ProguardMappingProvider.java
deleted file mode 100644
index e192003..0000000
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMappingProvider.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2022, 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.Keep;
-import com.android.tools.r8.references.ClassReference;
-import com.android.tools.r8.retrace.internal.ProguardMappingProviderBuilderImpl;
-
-@Keep
-public abstract class ProguardMappingProvider extends MappingProvider {
-
- public static Builder builder() {
- return new ProguardMappingProviderBuilderImpl();
- }
-
- @Keep
- public abstract static class Builder
- extends MappingProviderBuilder<ProguardMappingProvider, Builder> {
-
- public abstract Builder registerUse(ClassReference classReference);
-
- public abstract Builder allowLookupAllClasses();
-
- public abstract Builder setProguardMapProducer(ProguardMapProducer proguardMapProducer);
- }
-}
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java b/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java
new file mode 100644
index 0000000..74cd98f
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, 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.Keep;
+import com.android.tools.r8.retrace.internal.ProguardMappingSupplierBuilderImpl;
+
+@Keep
+public abstract class ProguardMappingSupplier extends MappingSupplier<ProguardMappingSupplier> {
+
+ public static Builder builder() {
+ return new ProguardMappingSupplierBuilderImpl();
+ }
+
+ @Keep
+ public abstract static class Builder
+ extends MappingSupplierBuilder<ProguardMappingSupplier, Builder> {
+
+ public abstract Builder setProguardMapProducer(ProguardMapProducer proguardMapProducer);
+ }
+}
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 890e4d3..9b00f34 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -10,8 +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.ProguardMapSupplier.ProguardMapChecker;
-import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapChecker.VerifyMappingFileHashResult;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.references.TypeReference;
import com.android.tools.r8.retrace.RetraceCommand.Builder;
@@ -31,9 +29,7 @@
import com.google.common.base.Charsets;
import com.google.common.base.Equivalence;
import com.google.common.base.Equivalence.Wrapper;
-import com.google.common.io.CharStreams;
import java.io.IOException;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
@@ -110,7 +106,7 @@
continue;
}
if (!hasSetProguardMap) {
- builder.setProguardMapProducer(getMappingSupplier(context.head(), diagnosticsHandler));
+ builder.setMappingSupplier(getMappingSupplier(context.head(), diagnosticsHandler));
context.next();
hasSetProguardMap = true;
} else if (!hasSetStackTrace) {
@@ -135,7 +131,7 @@
return builder;
}
- private static ProguardMapProducer getMappingSupplier(
+ private static MappingSupplier getMappingSupplier(
String mappingPath, DiagnosticsHandler diagnosticsHandler) {
Path path = Paths.get(mappingPath);
if (!Files.exists(path)) {
@@ -143,7 +139,12 @@
new StringDiagnostic(String.format("Could not find mapping file '%s'.", mappingPath)));
throw new RetraceAbortException();
}
- return ProguardMapProducer.fromPath(Paths.get(mappingPath));
+ boolean allowExperimentalMapVersion =
+ System.getProperty("com.android.tools.r8.experimentalmapping") != null;
+ return ProguardMappingSupplier.builder()
+ .setProguardMapProducer(ProguardMapProducer.fromPath(Paths.get(mappingPath)))
+ .setAllowExperimental(allowExperimentalMapVersion)
+ .build();
}
private static List<String> getStackTraceFromFile(
@@ -292,37 +293,12 @@
* @param command The command that describes the desired behavior of this retrace invocation.
*/
public static void run(RetraceCommand command) {
- boolean allowExperimentalMapVersion =
- System.getProperty("com.android.tools.r8.experimentalmapping") != null;
- runForTesting(command, allowExperimentalMapVersion);
- }
-
- static void runForTesting(RetraceCommand command, boolean allowExperimentalMapping) {
try {
Timing timing = Timing.create("R8 retrace", command.printMemory());
RetraceOptions options = command.getOptions();
+ MappingSupplier mappingSupplier = options.getMappingSupplier();
if (command.getOptions().isVerifyMappingFileHash()) {
- try (InputStream reader = options.getProguardMapProducer().get()) {
- VerifyMappingFileHashResult checkResult =
- ProguardMapChecker.validateProguardMapHash(
- CharStreams.toString(new InputStreamReader(reader, Charsets.UTF_8)));
- if (checkResult.isError()) {
- command
- .getOptions()
- .getDiagnosticsHandler()
- .error(new StringDiagnostic(checkResult.getMessage()));
- throw new RuntimeException(checkResult.getMessage());
- }
- if (!checkResult.isOk()) {
- command
- .getOptions()
- .getDiagnosticsHandler()
- .warning(new StringDiagnostic(checkResult.getMessage()));
- }
- } catch (IOException e) {
- command.getOptions().getDiagnosticsHandler().error(new ExceptionDiagnostic(e));
- throw new RuntimeException(e);
- }
+ mappingSupplier.verifyMappingFileHash(options.getDiagnosticsHandler());
return;
}
DiagnosticsHandler diagnosticsHandler = options.getDiagnosticsHandler();
@@ -342,30 +318,24 @@
});
timing.end();
timing.begin("Read proguard map");
- ProguardMappingProvider.Builder mappingBuilder =
- ProguardMappingProvider.builder()
- .setProguardMapProducer(options.getProguardMapProducer())
- .setDiagnosticsHandler(diagnosticsHandler)
- .setAllowExperimental(allowExperimentalMapping);
parsedStackTrace.forEach(
proxy -> {
if (proxy.hasClassName()) {
- mappingBuilder.registerUse(proxy.getClassReference());
+ mappingSupplier.registerUse(proxy.getClassReference());
}
if (proxy.hasMethodArguments()) {
Arrays.stream(proxy.getMethodArguments().split(","))
- .forEach(typeName -> registerUseFromTypeReference(mappingBuilder, typeName));
+ .forEach(typeName -> registerUseFromTypeReference(mappingSupplier, typeName));
}
if (proxy.hasFieldOrReturnType() && !proxy.getFieldOrReturnType().equals("void")) {
- registerUseFromTypeReference(mappingBuilder, proxy.getFieldOrReturnType());
+ registerUseFromTypeReference(mappingSupplier, proxy.getFieldOrReturnType());
}
});
- MappingProvider mappingProvider = mappingBuilder.build();
timing.end();
timing.begin("Retracing");
RetracerImpl retracer =
RetracerImpl.builder()
- .setMappingProvider(mappingProvider)
+ .setMappingSupplier(mappingSupplier)
.setDiagnosticsHandler(diagnosticsHandler)
.build();
retracer
@@ -398,13 +368,13 @@
}
private static void registerUseFromTypeReference(
- ProguardMappingProvider.Builder builder, String typeName) {
+ MappingSupplier mappingSupplier, String typeName) {
TypeReference typeReference = Reference.typeFromTypeName(typeName);
if (typeReference.isArray()) {
typeReference = typeReference.asArray().getBaseType();
}
if (typeReference.isClass()) {
- builder.registerUse(typeReference.asClass());
+ mappingSupplier.registerUse(typeReference.asClass());
}
}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
index b6d70e9..54b5737 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
@@ -69,7 +69,7 @@
private boolean isVerbose;
private final DiagnosticsHandler diagnosticsHandler;
- private ProguardMapProducer proguardMapProducer;
+ private MappingSupplier mappingSupplier;
private String regularExpression = StackTraceRegularExpressionParser.DEFAULT_REGULAR_EXPRESSION;
private List<String> stackTrace;
private Consumer<List<String>> retracedStackTraceConsumer;
@@ -85,13 +85,9 @@
return this;
}
- /**
- * Set a producer for the proguard mapping contents.
- *
- * @param producer Producer for
- */
- public Builder setProguardMapProducer(ProguardMapProducer producer) {
- this.proguardMapProducer = producer;
+ /** Set a mapping supplier for providing mapping contents. */
+ public Builder setMappingSupplier(MappingSupplier mappingSupplier) {
+ this.mappingSupplier = mappingSupplier;
return this;
}
@@ -138,7 +134,7 @@
if (this.diagnosticsHandler == null) {
throw new RuntimeException("DiagnosticsHandler not specified");
}
- if (this.proguardMapProducer == null) {
+ if (this.mappingSupplier == null) {
throw new RuntimeException("ProguardMapSupplier not specified");
}
if (this.stackTrace == null && !verifyMappingFileHash) {
@@ -150,7 +146,7 @@
RetraceOptions retraceOptions =
RetraceOptions.builder(diagnosticsHandler)
.setRegularExpression(regularExpression)
- .setProguardMapProducer(proguardMapProducer)
+ .setMappingSupplier(mappingSupplier)
.setVerbose(isVerbose)
.setVerifyMappingFileHash(verifyMappingFileHash)
.build();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceHelper.java b/src/main/java/com/android/tools/r8/retrace/RetraceHelper.java
deleted file mode 100644
index c966897..0000000
--- a/src/main/java/com/android/tools/r8/retrace/RetraceHelper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2021, 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;
-
-/** Non-kept class for internal access from tests. */
-public class RetraceHelper {
-
- public static void runForTesting(RetraceCommand command, boolean allowExperimentalMapping) {
- Retrace.runForTesting(command, allowExperimentalMapping);
- }
-}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java b/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
index 2543f35..7c00ed2 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
@@ -20,22 +20,22 @@
private final boolean verifyMappingFileHash;
private final String regularExpression;
private final DiagnosticsHandler diagnosticsHandler;
- private final ProguardMapProducer proguardMapProducer;
+ private final MappingSupplier mappingSupplier;
private RetraceOptions(
String regularExpression,
DiagnosticsHandler diagnosticsHandler,
- ProguardMapProducer proguardMapProducer,
+ MappingSupplier mappingSupplier,
boolean isVerbose,
boolean verifyMappingFileHash) {
this.regularExpression = regularExpression;
this.diagnosticsHandler = diagnosticsHandler;
- this.proguardMapProducer = proguardMapProducer;
+ this.mappingSupplier = mappingSupplier;
this.isVerbose = isVerbose;
this.verifyMappingFileHash = verifyMappingFileHash;
assert diagnosticsHandler != null;
- assert proguardMapProducer != null;
+ assert mappingSupplier != null;
}
public boolean isVerbose() {
@@ -54,8 +54,8 @@
return diagnosticsHandler;
}
- public ProguardMapProducer getProguardMapProducer() {
- return proguardMapProducer;
+ public MappingSupplier getMappingSupplier() {
+ return mappingSupplier;
}
/** Utility method for obtaining a builder with a default diagnostics handler. */
@@ -78,7 +78,7 @@
private boolean isVerbose;
private boolean verifyMappingFileHash;
private final DiagnosticsHandler diagnosticsHandler;
- private ProguardMapProducer proguardMapProducer;
+ private MappingSupplier mappingSupplier;
private String regularExpression = defaultRegularExpression();
Builder(DiagnosticsHandler diagnosticsHandler) {
@@ -97,13 +97,9 @@
return this;
}
- /**
- * Set a producer for the proguard mapping contents.
- *
- * @param producer Producer for
- */
- public Builder setProguardMapProducer(ProguardMapProducer producer) {
- this.proguardMapProducer = producer;
+ /** Set a mapping supplier for providing mapping contents. */
+ public Builder setMappingSupplier(MappingSupplier producer) {
+ this.mappingSupplier = producer;
return this;
}
@@ -123,18 +119,14 @@
if (this.diagnosticsHandler == null) {
throw new RuntimeException("DiagnosticsHandler not specified");
}
- if (this.proguardMapProducer == null) {
+ if (this.mappingSupplier == null) {
throw new RuntimeException("ProguardMapSupplier not specified");
}
if (this.regularExpression == null) {
throw new RuntimeException("Regular expression not specified");
}
return new RetraceOptions(
- regularExpression,
- diagnosticsHandler,
- proguardMapProducer,
- isVerbose,
- verifyMappingFileHash);
+ regularExpression, diagnosticsHandler, mappingSupplier, isVerbose, verifyMappingFileHash);
}
}
}
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 15d3b48..b1f4d95 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retracer.java
@@ -73,14 +73,13 @@
static Retracer createDefault(
ProguardMapProducer proguardMapProducer, DiagnosticsHandler diagnosticsHandler) {
try {
- ProguardMappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingSupplier =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(proguardMapProducer)
- .setDiagnosticsHandler(diagnosticsHandler)
- .allowLookupAllClasses()
- .build();
+ .build()
+ .allowLookupAllClasses();
return Retracer.builder()
- .setMappingProvider(mappingProvider)
+ .setMappingSupplier(mappingSupplier)
.setDiagnosticsHandler(diagnosticsHandler)
.build();
} catch (Exception e) {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracerBuilder.java b/src/main/java/com/android/tools/r8/retrace/RetracerBuilder.java
index efd56ce..21eb8e0 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracerBuilder.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracerBuilder.java
@@ -10,7 +10,7 @@
@Keep
public interface RetracerBuilder {
- RetracerBuilder setMappingProvider(MappingProvider mappingProvider);
+ RetracerBuilder setMappingSupplier(MappingSupplier mappingSupplier);
RetracerBuilder setDiagnosticsHandler(DiagnosticsHandler diagnosticsHandler);
diff --git a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
index b5ed6ae..99c7d8a 100644
--- a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.Keep;
+import com.android.tools.r8.retrace.internal.RetracerImpl;
import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.StringUtils;
@@ -40,7 +41,10 @@
*/
public static StringRetrace create(RetraceOptions command) {
return create(
- Retracer.createDefault(command.getProguardMapProducer(), command.getDiagnosticsHandler()),
+ RetracerImpl.builder()
+ .setMappingSupplier(command.getMappingSupplier())
+ .setDiagnosticsHandler(command.getDiagnosticsHandler())
+ .build(),
command.getDiagnosticsHandler(),
command.getRegularExpression(),
command.isVerbose());
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/MappingProviderInternal.java b/src/main/java/com/android/tools/r8/retrace/internal/MappingProviderInternal.java
deleted file mode 100644
index 13187cc..0000000
--- a/src/main/java/com/android/tools/r8/retrace/internal/MappingProviderInternal.java
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2022, 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.internal;
-
-import com.android.tools.r8.naming.ClassNamingForNameMapper;
-import com.android.tools.r8.naming.mappinginformation.MapVersionMappingInformation;
-import java.util.Set;
-
-public abstract class MappingProviderInternal {
-
- abstract ClassNamingForNameMapper getClassNaming(String typeName);
-
- abstract String getSourceFileForClass(String typeName);
-
- abstract Set<MapVersionMappingInformation> getMapVersions();
-}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/MappingSupplierInternal.java b/src/main/java/com/android/tools/r8/retrace/internal/MappingSupplierInternal.java
new file mode 100644
index 0000000..c47c467
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/internal/MappingSupplierInternal.java
@@ -0,0 +1,20 @@
+// Copyright (c) 2022, 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.internal;
+
+import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.naming.ClassNamingForNameMapper;
+import com.android.tools.r8.naming.mappinginformation.MapVersionMappingInformation;
+import java.util.Set;
+
+public abstract class MappingSupplierInternal {
+
+ abstract ClassNamingForNameMapper getClassNaming(
+ DiagnosticsHandler diagnosticsHandler, String typeName);
+
+ abstract String getSourceFileForClass(DiagnosticsHandler diagnosticsHandler, String typeName);
+
+ abstract Set<MapVersionMappingInformation> getMapVersions(DiagnosticsHandler diagnosticsHandler);
+}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMapReaderWithFiltering.java b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMapReaderWithFiltering.java
index 0d764a5..e6589d5f 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMapReaderWithFiltering.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMapReaderWithFiltering.java
@@ -189,9 +189,12 @@
private int endIndex = 0;
private final Predicate<String> filter;
+ private final boolean readPreambleAndSourceFiles;
- protected ProguardMapReaderWithFiltering(Predicate<String> filter) {
+ protected ProguardMapReaderWithFiltering(
+ Predicate<String> filter, boolean readPreambleAndSourceFiles) {
this.filter = filter;
+ this.readPreambleAndSourceFiles = readPreambleAndSourceFiles;
}
public abstract byte[] read() throws IOException;
@@ -221,10 +224,12 @@
String classMapping = getBufferAsString(bytes);
String obfuscatedClassName = getObfuscatedClassName(classMapping);
isInsideClassOfInterest = filter.test(obfuscatedClassName);
- return classMapping;
- } else if (lineParserState == IS_COMMENT_SOURCE_FILE) {
+ if (isInsideClassOfInterest || readPreambleAndSourceFiles) {
+ return classMapping;
+ }
+ } else if (lineParserState == IS_COMMENT_SOURCE_FILE && readPreambleAndSourceFiles) {
return getBufferAsString(bytes);
- } else if (isInsideClassOfInterest || !seenFirstClass) {
+ } else if (isInsideClassOfInterest || (!seenFirstClass && readPreambleAndSourceFiles)) {
return getBufferAsString(bytes);
}
}
@@ -284,8 +289,11 @@
private int temporaryBufferPosition = 0;
public ProguardMapReaderWithFilteringMappedBuffer(
- Path mappingFile, Predicate<String> classNamesOfInterest) throws IOException {
- super(classNamesOfInterest);
+ Path mappingFile,
+ Predicate<String> classNamesOfInterest,
+ boolean readPreambleAndSourceFiles)
+ throws IOException {
+ super(classNamesOfInterest, readPreambleAndSourceFiles);
fileChannel = FileChannel.open(mappingFile, StandardOpenOption.READ);
channelSize = fileChannel.size();
readFromChannel();
@@ -364,8 +372,10 @@
private int endReadIndex = 0;
public ProguardMapReaderWithFilteringInputBuffer(
- InputStream inputStream, Predicate<String> classNamesOfInterest) {
- super(classNamesOfInterest);
+ InputStream inputStream,
+ Predicate<String> classNamesOfInterest,
+ boolean readPreambleAndSourceFiles) {
+ super(classNamesOfInterest, readPreambleAndSourceFiles);
this.inputStream = inputStream;
}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderBuilderImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderBuilderImpl.java
deleted file mode 100644
index 8cf9ace..0000000
--- a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderBuilderImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2022, 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.internal;
-
-import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.LineReader;
-import com.android.tools.r8.references.ClassReference;
-import com.android.tools.r8.retrace.InvalidMappingFileException;
-import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
-import com.android.tools.r8.retrace.internal.ProguardMapReaderWithFiltering.ProguardMapReaderWithFilteringInputBuffer;
-import com.android.tools.r8.retrace.internal.ProguardMapReaderWithFiltering.ProguardMapReaderWithFilteringMappedBuffer;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.function.Predicate;
-
-public class ProguardMappingProviderBuilderImpl extends ProguardMappingProvider.Builder {
-
- private ProguardMapProducer proguardMapProducer;
- private boolean allowExperimental = false;
- private Set<String> allowedLookup = new HashSet<>();
- private boolean allowLookupAllClasses = false;
- private DiagnosticsHandler diagnosticsHandler = new DiagnosticsHandler() {};
-
- @Override
- public ProguardMappingProvider.Builder self() {
- return this;
- }
-
- @Override
- public ProguardMappingProvider.Builder setAllowExperimental(boolean allowExperimental) {
- this.allowExperimental = allowExperimental;
- return self();
- }
-
- @Override
- public ProguardMappingProvider.Builder setDiagnosticsHandler(
- DiagnosticsHandler diagnosticsHandler) {
- this.diagnosticsHandler = diagnosticsHandler;
- return self();
- }
-
- @Override
- public ProguardMappingProvider.Builder registerUse(ClassReference classReference) {
- allowedLookup.add(classReference.getTypeName());
- return self();
- }
-
- @Override
- public ProguardMappingProvider.Builder allowLookupAllClasses() {
- allowLookupAllClasses = true;
- return self();
- }
-
- @Override
- public ProguardMappingProvider.Builder setProguardMapProducer(
- ProguardMapProducer proguardMapProducer) {
- this.proguardMapProducer = proguardMapProducer;
- return self();
- }
-
- @Override
- public ProguardMappingProvider build() {
- try {
- Predicate<String> buildForClass = allowLookupAllClasses ? null : allowedLookup::contains;
- LineReader reader =
- proguardMapProducer.isFileBacked()
- ? new ProguardMapReaderWithFilteringMappedBuffer(
- proguardMapProducer.getPath(), buildForClass)
- : new ProguardMapReaderWithFilteringInputBuffer(
- proguardMapProducer.get(), buildForClass);
- return new ProguardMappingProviderImpl(
- ClassNameMapper.mapperFromLineReaderWithFiltering(
- reader, diagnosticsHandler, true, allowExperimental));
- } catch (Exception e) {
- throw new InvalidMappingFileException(e);
- }
- }
-}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderImpl.java
deleted file mode 100644
index c15efef..0000000
--- a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingProviderImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2022, 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.internal;
-
-import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.ClassNamingForNameMapper;
-import com.android.tools.r8.naming.mappinginformation.MapVersionMappingInformation;
-import com.android.tools.r8.retrace.IllegalClassNameLookupException;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
-import java.util.Set;
-
-/**
- * IntelliJ highlights the class as being invalid because it cannot see getClassNameMapper is
- * defined on the class for some reason.
- */
-public class ProguardMappingProviderImpl extends ProguardMappingProvider {
-
- private final ClassNameMapper classNameMapper;
- private final Set<String> allowedLookupTypeNames;
-
- public ProguardMappingProviderImpl(ClassNameMapper classNameMapper) {
- this(classNameMapper, null);
- }
-
- public ProguardMappingProviderImpl(
- ClassNameMapper classNameMapper, Set<String> allowedLookupTypeNames) {
- this.classNameMapper = classNameMapper;
- this.allowedLookupTypeNames = allowedLookupTypeNames;
- }
-
- @Override
- Set<MapVersionMappingInformation> getMapVersions() {
- return classNameMapper.getMapVersions();
- }
-
- @Override
- ClassNamingForNameMapper getClassNaming(String typeName) {
- // TODO(b/226885646): Enable lookup check when there are no additional lookups.
- if (false && !allowedLookupTypeNames.contains(typeName)) {
- throw new IllegalClassNameLookupException(typeName);
- }
- return classNameMapper.getClassNaming(typeName);
- }
-
- @Override
- String getSourceFileForClass(String typeName) {
- return classNameMapper.getSourceFile(typeName);
- }
-}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierBuilderImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierBuilderImpl.java
new file mode 100644
index 0000000..8cea599
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierBuilderImpl.java
@@ -0,0 +1,37 @@
+// Copyright (c) 2022, 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.internal;
+
+import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
+
+public class ProguardMappingSupplierBuilderImpl extends ProguardMappingSupplier.Builder {
+
+ private ProguardMapProducer proguardMapProducer;
+ private boolean allowExperimental = false;
+
+ @Override
+ public ProguardMappingSupplier.Builder self() {
+ return this;
+ }
+
+ @Override
+ public ProguardMappingSupplier.Builder setAllowExperimental(boolean allowExperimental) {
+ this.allowExperimental = allowExperimental;
+ return self();
+ }
+
+ @Override
+ public ProguardMappingSupplier.Builder setProguardMapProducer(
+ ProguardMapProducer proguardMapProducer) {
+ this.proguardMapProducer = proguardMapProducer;
+ return self();
+ }
+
+ @Override
+ public ProguardMappingSupplier build() {
+ return new ProguardMappingSupplierImpl(proguardMapProducer, allowExperimental);
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierImpl.java
new file mode 100644
index 0000000..5df37a4
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/internal/ProguardMappingSupplierImpl.java
@@ -0,0 +1,137 @@
+// Copyright (c) 2022, 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.internal;
+
+import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.naming.ClassNamingForNameMapper;
+import com.android.tools.r8.naming.LineReader;
+import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapChecker;
+import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapChecker.VerifyMappingFileHashResult;
+import com.android.tools.r8.naming.mappinginformation.MapVersionMappingInformation;
+import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.retrace.IllegalClassNameLookupException;
+import com.android.tools.r8.retrace.InvalidMappingFileException;
+import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
+import com.android.tools.r8.retrace.internal.ProguardMapReaderWithFiltering.ProguardMapReaderWithFilteringInputBuffer;
+import com.android.tools.r8.retrace.internal.ProguardMapReaderWithFiltering.ProguardMapReaderWithFilteringMappedBuffer;
+import com.android.tools.r8.utils.ExceptionDiagnostic;
+import com.android.tools.r8.utils.StringDiagnostic;
+import com.google.common.io.CharStreams;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Predicate;
+
+/**
+ * IntelliJ highlights the class as being invalid because it cannot see getClassNameMapper is
+ * defined on the class for some reason.
+ */
+public class ProguardMappingSupplierImpl extends ProguardMappingSupplier {
+
+ private final ProguardMapProducer proguardMapProducer;
+ private final boolean allowExperimental;
+ private boolean allowLookupAllClasses;
+
+ private ClassNameMapper classNameMapper;
+ private final Set<String> pendingClassMappings = new HashSet<>();
+ private final Set<String> buildClassMappings = new HashSet<>();
+
+ public ProguardMappingSupplierImpl(ClassNameMapper classNameMapper) {
+ this.classNameMapper = classNameMapper;
+ this.proguardMapProducer = null;
+ this.allowExperimental = true;
+ this.allowLookupAllClasses = true;
+ }
+
+ ProguardMappingSupplierImpl(ProguardMapProducer proguardMapProducer, boolean allowExperimental) {
+ this.proguardMapProducer = proguardMapProducer;
+ this.allowExperimental = allowExperimental;
+ this.allowLookupAllClasses = allowLookupAllClasses;
+ }
+
+ @Override
+ Set<MapVersionMappingInformation> getMapVersions(DiagnosticsHandler diagnosticsHandler) {
+ return getClassNameMapper(diagnosticsHandler).getMapVersions();
+ }
+
+ @Override
+ ClassNamingForNameMapper getClassNaming(DiagnosticsHandler diagnosticsHandler, String typeName) {
+ ClassNameMapper classNameMapper = getClassNameMapper(diagnosticsHandler);
+ if (!allowLookupAllClasses && !buildClassMappings.contains(typeName)) {
+ throw new IllegalClassNameLookupException(typeName);
+ }
+ return classNameMapper.getClassNaming(typeName);
+ }
+
+ @Override
+ String getSourceFileForClass(DiagnosticsHandler diagnosticsHandler, String typeName) {
+ return getClassNameMapper(diagnosticsHandler).getSourceFile(typeName);
+ }
+
+ private ClassNameMapper getClassNameMapper(DiagnosticsHandler diagnosticsHandler) {
+ if (classNameMapper != null && pendingClassMappings.isEmpty()) {
+ return classNameMapper;
+ }
+ if (classNameMapper != null && !proguardMapProducer.isFileBacked()) {
+ throw new RuntimeException("Cannot re-open a proguard map producer that is not file backed");
+ }
+ try {
+ Predicate<String> buildForClass =
+ allowLookupAllClasses ? null : pendingClassMappings::contains;
+ boolean readPreambleAndSourceFile = classNameMapper == null;
+ LineReader reader =
+ proguardMapProducer.isFileBacked()
+ ? new ProguardMapReaderWithFilteringMappedBuffer(
+ proguardMapProducer.getPath(), buildForClass, readPreambleAndSourceFile)
+ : new ProguardMapReaderWithFilteringInputBuffer(
+ proguardMapProducer.get(), buildForClass, readPreambleAndSourceFile);
+ classNameMapper =
+ ClassNameMapper.mapperFromLineReaderWithFiltering(
+ reader, diagnosticsHandler, true, allowExperimental)
+ .combine(classNameMapper);
+ buildClassMappings.addAll(pendingClassMappings);
+ pendingClassMappings.clear();
+ } catch (Exception e) {
+ throw new InvalidMappingFileException(e);
+ }
+ return classNameMapper;
+ }
+
+ @Override
+ public ProguardMappingSupplier registerUse(ClassReference classReference) {
+ pendingClassMappings.add(classReference.getTypeName());
+ return this;
+ }
+
+ @Override
+ public ProguardMappingSupplier allowLookupAllClasses() {
+ this.allowLookupAllClasses = true;
+ return this;
+ }
+
+ @Override
+ public void verifyMappingFileHash(DiagnosticsHandler diagnosticsHandler) {
+ try (InputStream reader = proguardMapProducer.get()) {
+ VerifyMappingFileHashResult checkResult =
+ ProguardMapChecker.validateProguardMapHash(
+ CharStreams.toString(new InputStreamReader(reader, StandardCharsets.UTF_8)));
+ if (checkResult.isError()) {
+ diagnosticsHandler.error(new StringDiagnostic(checkResult.getMessage()));
+ throw new RuntimeException(checkResult.getMessage());
+ }
+ if (!checkResult.isOk()) {
+ diagnosticsHandler.warning(new StringDiagnostic(checkResult.getMessage()));
+ }
+ } catch (IOException e) {
+ diagnosticsHandler.error(new ExceptionDiagnostic(e));
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
index 346b417..daec745 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
@@ -10,7 +10,7 @@
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.MappingProvider;
+import com.android.tools.r8.retrace.MappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameResult;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.Retracer;
@@ -21,14 +21,14 @@
/** A default implementation for the retrace api using the ClassNameMapper defined in R8. */
public class RetracerImpl implements Retracer {
- private final MappingProviderInternal classNameMapperProvider;
+ private final MappingSupplierInternal classNameMapperSupplier;
private final DiagnosticsHandler diagnosticsHandler;
private RetracerImpl(
- MappingProviderInternal classNameMapperProvider, DiagnosticsHandler diagnosticsHandler) {
- this.classNameMapperProvider = classNameMapperProvider;
+ MappingSupplierInternal classNameMapperSupplier, DiagnosticsHandler diagnosticsHandler) {
+ this.classNameMapperSupplier = classNameMapperSupplier;
this.diagnosticsHandler = diagnosticsHandler;
- assert classNameMapperProvider != null;
+ assert classNameMapperSupplier != null;
}
public DiagnosticsHandler getDiagnosticsHandler() {
@@ -70,7 +70,9 @@
@Override
public RetraceClassResultImpl retraceClass(ClassReference classReference) {
return RetraceClassResultImpl.create(
- classReference, classNameMapperProvider.getClassNaming(classReference.getTypeName()), this);
+ classReference,
+ classNameMapperSupplier.getClassNaming(diagnosticsHandler, classReference.getTypeName()),
+ this);
}
@Override
@@ -84,11 +86,12 @@
}
public Set<MapVersionMappingInformation> getMapVersions() {
- return classNameMapperProvider.getMapVersions();
+ return classNameMapperSupplier.getMapVersions(diagnosticsHandler);
}
public String getSourceFile(ClassReference classReference) {
- return classNameMapperProvider.getSourceFileForClass(classReference.getTypeName());
+ return classNameMapperSupplier.getSourceFileForClass(
+ diagnosticsHandler, classReference.getTypeName());
}
public static Builder builder() {
@@ -97,14 +100,14 @@
public static class Builder implements RetracerBuilder {
- private MappingProvider mappingProvider;
+ private MappingSupplier mappingSupplier;
private DiagnosticsHandler diagnosticsHandler = new DiagnosticsHandler() {};
private Builder() {}
@Override
- public Builder setMappingProvider(MappingProvider mappingProvider) {
- this.mappingProvider = mappingProvider;
+ public Builder setMappingSupplier(MappingSupplier mappingSupplier) {
+ this.mappingSupplier = mappingSupplier;
return this;
}
@@ -116,7 +119,7 @@
@Override
public RetracerImpl build() {
- return new RetracerImpl(mappingProvider, diagnosticsHandler);
+ return new RetracerImpl(mappingSupplier, diagnosticsHandler);
}
}
}
diff --git a/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java b/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
index e1f0d55..001c239 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.benchmarks.BenchmarkMethod;
import com.android.tools.r8.benchmarks.BenchmarkTarget;
import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.Retrace;
import com.android.tools.r8.retrace.RetraceCommand;
import com.google.common.collect.ImmutableList;
@@ -69,8 +70,12 @@
long start = System.nanoTime();
Retrace.run(
RetraceCommand.builder()
- .setProguardMapProducer(
- ProguardMapProducer.fromPath(dependencyRoot.resolve("r8lib.jar.map")))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromPath(
+ dependencyRoot.resolve("r8lib.jar.map")))
+ .build())
.setStackTrace(stackTrace)
.setRetracedStackTraceConsumer(retraced::addAll)
.build());
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
index 10ac394..f7ce233 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
@@ -21,6 +21,7 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.Retrace;
import com.android.tools.r8.retrace.RetraceCommand;
import com.android.tools.r8.utils.FileUtils;
@@ -138,7 +139,10 @@
RetraceCommand retraceCommand =
RetraceCommand.builder()
.setStackTrace(StringUtils.splitLines(processResult.stderr))
- .setProguardMapProducer(ProguardMapProducer.fromPath(r8R8Release.getSecond()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(ProguardMapProducer.fromPath(r8R8Release.getSecond()))
+ .build())
.setRetracedStackTraceConsumer(
retraced -> {
int expectedIndex = -1;
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
index d283ee6..0e5ce56 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.internal.retrace.stacktraces.FinskyStackTrace;
import com.android.tools.r8.internal.retrace.stacktraces.VelvetStackTrace;
import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.Retrace;
import com.android.tools.r8.retrace.RetraceCommand;
import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
@@ -199,7 +200,11 @@
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
RetraceCommand retraceCommand =
RetraceCommand.builder(diagnosticsHandler)
- .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .build())
.setStackTrace(stackTraceForTest.obfuscatedStackTrace())
.setRegularExpression(regularExpression)
.setRetracedStackTraceConsumer(
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
index 4fdc4b7..1619359 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
@@ -12,8 +12,9 @@
import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
+import com.android.tools.r8.retrace.Retrace;
import com.android.tools.r8.retrace.RetraceCommand;
-import com.android.tools.r8.retrace.RetraceHelper;
import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.base.Equivalence;
@@ -378,13 +379,16 @@
List<String> stackTrace =
stackTraceLines.stream().map(line -> line.originalLine).collect(Collectors.toList());
stackTrace.add(0, exceptionLine);
- RetraceHelper.runForTesting(
+ Retrace.run(
RetraceCommand.builder()
- .setProguardMapProducer(ProguardMapProducer.fromString(map))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(ProguardMapProducer.fromString(map))
+ .setAllowExperimental(allowExperimentalMapping)
+ .build())
.setStackTrace(stackTrace)
.setRetracedStackTraceConsumer(box::set)
- .build(),
- allowExperimentalMapping);
+ .build());
// Keep the original stderr in the retraced stacktrace.
return new StackTrace(
box.get().get(0), internalConvert(box.get().stream().skip(1)), originalStderr);
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/CatchAllRangeWithNoLineNumberTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/CatchAllRangeWithNoLineNumberTest.java
index 34da9a6..4372134 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/CatchAllRangeWithNoLineNumberTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/CatchAllRangeWithNoLineNumberTest.java
@@ -10,8 +10,10 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.RetraceOptions;
-import com.android.tools.r8.retrace.StringRetrace;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
+import com.android.tools.r8.retrace.Retrace;
+import com.android.tools.r8.retrace.RetraceCommand;
+import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.StringUtils;
import java.io.IOException;
import java.util.Arrays;
@@ -98,13 +100,18 @@
@Test
public void testCatchAllRangeR8() {
- List<String> retrace =
- StringRetrace.create(
- RetraceOptions.builder()
+ Box<String> retracedString = new Box<>();
+ Retrace.run(
+ RetraceCommand.builder()
+ .setRetracedStackTraceConsumer(
+ retraced -> retracedString.set(StringUtils.lines(retraced)))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
.build())
- .retrace(Arrays.asList(stackTrace));
- assertEquals(retracedR8, StringUtils.lines(retrace));
+ .setStackTrace(Arrays.asList(stackTrace))
+ .build());
+ assertEquals(retracedR8, retracedString.get());
}
private String getExpected() {
diff --git a/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java b/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
index 06899fd..5dcca78 100644
--- a/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
@@ -37,13 +37,16 @@
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
Retrace.run(
RetraceCommand.builder(diagnosticsHandler)
- .setProguardMapProducer(
- ProguardMapProducer.fromString(
- StringUtils.lines(
- "com.android.tools.r8.retrace.SourceFileTest$ClassWithCustomFileName ->"
- + " com.android.tools.r8.retrace.a:",
- "# {'id':'sourceFile','fileName':'foobarbaz.java'}",
- "# {'id':'sourceFile','fileName':'foobarbaz2.java'}")))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromString(
+ StringUtils.lines(
+ "com.android.tools.r8.retrace.SourceFileTest"
+ + "$ClassWithCustomFileName -> com.android.tools.r8.retrace.a:",
+ "# {'id':'sourceFile','fileName':'foobarbaz.java'}",
+ "# {'id':'sourceFile','fileName':'foobarbaz2.java'}")))
+ .build())
.setStackTrace(ImmutableList.of(" at com.android.tools.r8.retrace.a.foo(Unknown)"))
.setRetracedStackTraceConsumer(
strings -> {
diff --git a/src/test/java/com/android/tools/r8/retrace/OverloadsWithoutLineNumberTest.java b/src/test/java/com/android/tools/r8/retrace/OverloadsWithoutLineNumberTest.java
index 56622ac..3aa2f49 100644
--- a/src/test/java/com/android/tools/r8/retrace/OverloadsWithoutLineNumberTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/OverloadsWithoutLineNumberTest.java
@@ -55,11 +55,14 @@
.collect(Collectors.toList());
RetraceCommand.Builder builder =
RetraceCommand.builder()
- .setProguardMapProducer(ProguardMapProducer.fromString(run.proguardMap()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(ProguardMapProducer.fromString(run.proguardMap()))
+ .build())
.setStackTrace(originalStackTrace)
.setRetracedStackTraceConsumer(box::set)
.setVerbose(true);
- RetraceHelper.runForTesting(builder.build(), false);
+ Retrace.run(builder.build());
// TODO(b/221015863): This should ideally be:
// at " + typeName(ClassWithOverload.class) + ".test(int)(OverloadsWithoutLineNumberTest.java)
if (parameters.canUseNativeDexPC()) {
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 31dd142..b36d379 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -152,7 +152,11 @@
NullStackTrace nullStackTrace = new NullStackTrace();
RetraceCommand retraceCommand =
RetraceCommand.builder(diagnosticsHandler)
- .setProguardMapProducer(ProguardMapProducer.fromString(nullStackTrace.mapping()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromString(nullStackTrace.mapping()))
+ .build())
.setStackTrace(nullStackTrace.obfuscatedStackTrace())
.setRetracedStackTraceConsumer(retraced -> fail())
.build();
@@ -493,13 +497,18 @@
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
RetraceCommand retraceCommand =
RetraceCommand.builder(diagnosticsHandler)
- .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .setAllowExperimental(allowExperimentalMapping)
+ .build())
.setStackTrace(stackTraceForTest.obfuscatedStackTrace())
.setRetracedStackTraceConsumer(
retraced -> assertEquals(expectedStackTrace, StringUtils.joinLines(retraced)))
.setVerbose(verbose)
.build();
- Retrace.runForTesting(retraceCommand, allowExperimentalMapping);
+ Retrace.run(retraceCommand);
return diagnosticsHandler;
}
}
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceWhitespaceTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceWhitespaceTest.java
index 7b9c08d..17b6600 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceWhitespaceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceWhitespaceTest.java
@@ -64,7 +64,10 @@
() ->
Retrace.run(
RetraceCommand.builder()
- .setProguardMapProducer(ProguardMapProducer.fromPath(mappingFile))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(ProguardMapProducer.fromPath(mappingFile))
+ .build())
.setStackTrace(STACKTRACE)
.setRetracedStackTraceConsumer(lines -> {})
.build()));
diff --git a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
index 91428db..1ea73cc 100644
--- a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
@@ -1140,7 +1140,11 @@
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
RetraceCommand retraceCommand =
RetraceCommand.builder(diagnosticsHandler)
- .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .setMappingSupplier(
+ ProguardMappingSupplier.builder()
+ .setProguardMapProducer(
+ ProguardMapProducer.fromString(stackTraceForTest.mapping()))
+ .build())
.setStackTrace(stackTraceForTest.obfuscatedStackTrace())
.setRetracedStackTraceConsumer(
retraced -> {
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiInlineInOutlineTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiInlineInOutlineTest.java
index 9ca6e87..845e1de 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiInlineInOutlineTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiInlineInOutlineTest.java
@@ -9,9 +9,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetracedMethodReference;
@@ -63,12 +62,12 @@
@Test
public void test() {
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingProvider =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .allowLookupAllClasses()
- .build();
- Retracer retracer = Retracer.builder().setMappingProvider(mappingProvider).build();
+ .build()
+ .allowLookupAllClasses();
+ Retracer retracer = Retracer.builder().setMappingSupplier(mappingProvider).build();
List<RetraceFrameElement> outlineRetraced =
retracer
.retraceFrame(
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInOutlineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInOutlineStackTrace.java
index 650953c..0039599 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInOutlineStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInOutlineStackTrace.java
@@ -10,9 +10,8 @@
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetracedMethodReference;
@@ -71,12 +70,12 @@
@Test
public void test() {
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingProvider =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .allowLookupAllClasses()
- .build();
- Retracer retracer = Retracer.builder().setMappingProvider(mappingProvider).build();
+ .build()
+ .allowLookupAllClasses();
+ Retracer retracer = Retracer.builder().setMappingSupplier(mappingProvider).build();
// Retrace the first outline.
RetraceStackTraceContext outlineContext =
retraceOutline(
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInlineTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInlineTest.java
index 1c67ac5..0367fff 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInlineTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineInlineTest.java
@@ -9,9 +9,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetracedMethodReference;
@@ -62,12 +61,12 @@
@Test
public void test() {
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingSupplier =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .allowLookupAllClasses()
- .build();
- Retracer retracer = Retracer.builder().setMappingProvider(mappingProvider).build();
+ .build()
+ .allowLookupAllClasses();
+ Retracer retracer = Retracer.builder().setMappingSupplier(mappingSupplier).build();
List<RetraceFrameElement> outlineRetraced =
retracer
.retraceFrame(
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineNoInlineTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineNoInlineTest.java
index d77819d..998b60b 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineNoInlineTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutlineNoInlineTest.java
@@ -10,9 +10,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetracedMethodReference;
@@ -62,12 +61,12 @@
@Test
public void test() {
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingProvider =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .allowLookupAllClasses()
- .build();
- Retracer retracer = Retracer.builder().setMappingProvider(mappingProvider).build();
+ .build()
+ .allowLookupAllClasses();
+ Retracer retracer = Retracer.builder().setMappingSupplier(mappingProvider).build();
List<RetraceFrameElement> outlineRetraced =
retracer
.retraceFrame(
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeResidualTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeResidualTest.java
index 6251b54..8e97bf4 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeResidualTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeResidualTest.java
@@ -10,9 +10,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetraceThrownExceptionElement;
@@ -80,12 +79,12 @@
@Test
public void testUsingObfuscatedName() {
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingProvider =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .allowLookupAllClasses()
- .build();
- Retracer retracer = Retracer.builder().setMappingProvider(mappingProvider).build();
+ .build()
+ .allowLookupAllClasses();
+ Retracer retracer = Retracer.builder().setMappingSupplier(mappingProvider).build();
List<RetraceThrownExceptionElement> npeRetraced =
retracer.retraceThrownException(renamedException).stream().collect(Collectors.toList());
assertEquals(1, npeRetraced.size());
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeTest.java
index 6d3bd5b..1235285 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiRewriteFrameInlineNpeTest.java
@@ -11,9 +11,8 @@
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.retrace.MappingProvider;
import com.android.tools.r8.retrace.ProguardMapProducer;
-import com.android.tools.r8.retrace.ProguardMappingProvider;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.RetraceFrameElement;
import com.android.tools.r8.retrace.RetraceStackTraceContext;
import com.android.tools.r8.retrace.RetraceThrownExceptionElement;
@@ -60,15 +59,14 @@
@Test
public void testFirstStackLineIsRemoved() {
TestDiagnosticsHandler testDiagnosticsHandler = new TestDiagnosticsHandler();
- MappingProvider mappingProvider =
- ProguardMappingProvider.builder()
+ ProguardMappingSupplier mappingProvider =
+ ProguardMappingSupplier.builder()
.setProguardMapProducer(ProguardMapProducer.fromString(mapping))
- .setDiagnosticsHandler(testDiagnosticsHandler)
- .allowLookupAllClasses()
- .build();
+ .build()
+ .allowLookupAllClasses();
Retracer retracer =
Retracer.builder()
- .setMappingProvider(mappingProvider)
+ .setMappingSupplier(mappingProvider)
.setDiagnosticsHandler(testDiagnosticsHandler)
.build();
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 efcf8a9..74b5de5 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,7 @@
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.retrace.Retracer;
-import com.android.tools.r8.retrace.internal.ProguardMappingProviderImpl;
+import com.android.tools.r8.retrace.internal.ProguardMappingSupplierImpl;
import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.BiMapContainer;
@@ -185,7 +185,7 @@
if (lazyRetracer == null) {
lazyRetracer =
Retracer.builder()
- .setMappingProvider(new ProguardMappingProviderImpl(mapping))
+ .setMappingSupplier(new ProguardMappingSupplierImpl(mapping))
.setDiagnosticsHandler(new TestDiagnosticMessagesImpl())
.build();
}
@@ -549,8 +549,8 @@
public Retracer retrace() {
return Retracer.builder()
- .setMappingProvider(
- new ProguardMappingProviderImpl(
+ .setMappingSupplier(
+ new ProguardMappingSupplierImpl(
mapping == null ? ClassNameMapper.builder().build() : mapping))
.setDiagnosticsHandler(new TestDiagnosticMessagesImpl())
.build();
diff --git a/third_party/retrace/binary_compatibility.tar.gz.sha1 b/third_party/retrace/binary_compatibility.tar.gz.sha1
index 30ac55d..f8426e3 100644
--- a/third_party/retrace/binary_compatibility.tar.gz.sha1
+++ b/third_party/retrace/binary_compatibility.tar.gz.sha1
@@ -1 +1 @@
-c7b9bd1e5be6caa0e8a8cb6634b7fb73fd48ae8e
\ No newline at end of file
+ab687955f37a07c412cdd689ddea840d9835cad0
\ No newline at end of file