Create PrefixRewritingMapper when instantiating DesugaredLibraryConfiguration
Bug: 174453232
Change-Id: I12bccbf78d9447207bd227ac99438a22d69a40fd
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index fa5a935..4fdf194 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -166,7 +166,7 @@
AndroidApp inputApp, InternalOptions options, ExecutorService executor, Timing timing)
throws IOException {
PrefixRewritingMapper rewritePrefix =
- options.desugaredLibraryConfiguration.createPrefixRewritingMapper(options);
+ options.desugaredLibraryConfiguration.getPrefixRewritingMapper();
ApplicationReader applicationReader = new ApplicationReader(inputApp, options, timing);
LazyLoadedDexApplication app = applicationReader.read(executor);
AppInfo appInfo = AppInfo.createInitialAppInfo(app, applicationReader.readMainDexClasses(app));
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index a06be47..40f48d2 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -159,7 +159,7 @@
new ApplicationReader(inputApp, options, timing).read(executor);
PrefixRewritingMapper rewritePrefix =
- options.desugaredLibraryConfiguration.createPrefixRewritingMapper(options);
+ options.desugaredLibraryConfiguration.getPrefixRewritingMapper();
DexApplication app = new L8TreePruner(options).prune(lazyApp, rewritePrefix);
return AppView.createForL8(AppInfo.createInitialAppInfo(app), rewritePrefix);
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 566fa31..ed53d45 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -134,7 +134,7 @@
private static <T extends AppInfo> PrefixRewritingMapper defaultPrefixRewritingMapper(T appInfo) {
InternalOptions options = appInfo.options();
- return options.desugaredLibraryConfiguration.createPrefixRewritingMapper(options);
+ return options.desugaredLibraryConfiguration.getPrefixRewritingMapper();
}
public static <T extends AppInfo> AppView<T> createForD8(T appInfo) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 11e6e33..e58c7d6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -82,7 +82,7 @@
AndroidApp androidApp, InternalOptions options, ExecutorService executor) throws IOException {
List<DexMethod> methods = new ArrayList<>();
PrefixRewritingMapper rewritePrefix =
- options.desugaredLibraryConfiguration.createPrefixRewritingMapper(options);
+ options.desugaredLibraryConfiguration.getPrefixRewritingMapper();
AppInfo appInfo = null;
if (androidApp != null) {
DexApplication app =
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryConfiguration.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryConfiguration.java
index 5627d6e..62cbc2e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryConfiguration.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryConfiguration.java
@@ -50,7 +50,8 @@
ImmutableMap.of(),
ImmutableSet.of(),
ImmutableList.of(),
- ImmutableList.of());
+ ImmutableList.of(),
+ PrefixRewritingMapper.empty());
private final AndroidApiLevel requiredCompilationAPILevel;
private final boolean libraryCompilation;
private final String synthesizedLibraryClassesPackagePrefix;
@@ -72,13 +73,14 @@
private final List<Pair<DexType, DexString>> dontRewriteInvocation;
private final List<String> extraKeepRules;
private final Set<DexType> wrapperConversions;
+ private final PrefixRewritingMapper prefixRewritingMapper;
public static Builder builder(DexItemFactory dexItemFactory, Reporter reporter, Origin origin) {
return new Builder(dexItemFactory, reporter, origin);
}
public static DesugaredLibraryConfiguration withOnlyRewritePrefixForTesting(
- Map<String, String> prefix) {
+ Map<String, String> prefix, InternalOptions options) {
return new DesugaredLibraryConfiguration(
AndroidApiLevel.B,
true,
@@ -93,7 +95,8 @@
ImmutableMap.of(),
ImmutableSet.of(),
ImmutableList.of(),
- ImmutableList.of());
+ ImmutableList.of(),
+ new DesugarPrefixRewritingMapper(prefix, options.itemFactory, true));
}
public static DesugaredLibraryConfiguration empty() {
@@ -114,7 +117,8 @@
Map<DexType, DexType> customConversions,
Set<DexType> wrapperConversions,
List<Pair<DexType, DexString>> dontRewriteInvocation,
- List<String> extraKeepRules) {
+ List<String> extraKeepRules,
+ PrefixRewritingMapper prefixRewritingMapper) {
this.requiredCompilationAPILevel = requiredCompilationAPILevel;
this.libraryCompilation = libraryCompilation;
this.synthesizedLibraryClassesPackagePrefix = packagePrefix;
@@ -129,12 +133,11 @@
this.wrapperConversions = wrapperConversions;
this.dontRewriteInvocation = dontRewriteInvocation;
this.extraKeepRules = extraKeepRules;
+ this.prefixRewritingMapper = prefixRewritingMapper;
}
- public PrefixRewritingMapper createPrefixRewritingMapper(InternalOptions options) {
- return rewritePrefix.isEmpty()
- ? PrefixRewritingMapper.empty()
- : new DesugarPrefixRewritingMapper(rewritePrefix, options);
+ public PrefixRewritingMapper getPrefixRewritingMapper() {
+ return prefixRewritingMapper;
}
public AndroidApiLevel getRequiredCompilationApiLevel() {
@@ -385,7 +388,10 @@
ImmutableMap.copyOf(customConversions),
ImmutableSet.copyOf(wrapperConversions),
ImmutableList.copyOf(dontRewriteInvocation),
- ImmutableList.copyOf(extraKeepRules));
+ ImmutableList.copyOf(extraKeepRules),
+ rewritePrefix.isEmpty()
+ ? PrefixRewritingMapper.empty()
+ : new DesugarPrefixRewritingMapper(rewritePrefix, factory, libraryCompilation));
}
private void validate() {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java b/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
index 9624c2a..8ad22c7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.InternalOptions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import java.util.Map;
@@ -58,9 +57,10 @@
private final DexItemFactory factory;
private final boolean l8Compilation;
- public DesugarPrefixRewritingMapper(Map<String, String> prefixes, InternalOptions options) {
- this.factory = options.itemFactory;
- this.l8Compilation = options.isDesugaredLibraryCompilation();
+ public DesugarPrefixRewritingMapper(
+ Map<String, String> prefixes, DexItemFactory itemFactory, boolean libraryCompilation) {
+ this.factory = itemFactory;
+ this.l8Compilation = libraryCompilation;
ImmutableMap.Builder<DexString, DexString> builder = ImmutableMap.builder();
for (String key : prefixes.keySet()) {
builder.put(toDescriptorPrefix(key), toDescriptorPrefix(prefixes.get(key)));
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 367a8f3..ad512cd 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -34,6 +34,7 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
+import com.android.tools.r8.utils.ExceptionUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
@@ -1287,7 +1288,8 @@
D8Command command = builder.build();
InternalOptions options = command.getInternalOptions();
if (optionsConsumer != null) {
- optionsConsumer.accept(options);
+ ExceptionUtils.withD8CompilationHandler(
+ options.reporter, () -> optionsConsumer.accept(options));
}
D8.runForTesting(command.getInputApp(), options);
return compatSink.build();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/InconsistentPrefixTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/InconsistentPrefixTest.java
index 6e8f3e8..70ae6d6 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/InconsistentPrefixTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/InconsistentPrefixTest.java
@@ -47,7 +47,7 @@
.addOptionsModification(
options ->
options.desugaredLibraryConfiguration =
- DesugaredLibraryConfiguration.withOnlyRewritePrefixForTesting(x))
+ DesugaredLibraryConfiguration.withOnlyRewritePrefixForTesting(x, options))
.compileWithExpectedDiagnostics(
diagnostics -> {
diagnostics.assertErrorMessageThatMatches(
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/b135627418/B135627418.java b/src/test/java/com/android/tools/r8/memberrebinding/b135627418/B135627418.java
index c81a2d6..3883528 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/b135627418/B135627418.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/b135627418/B135627418.java
@@ -78,7 +78,8 @@
options ->
options.desugaredLibraryConfiguration =
DesugaredLibraryConfiguration.withOnlyRewritePrefixForTesting(
- ImmutableMap.of(packageName + ".runtime", packageName + ".library")))
+ ImmutableMap.of(packageName + ".runtime", packageName + ".library"),
+ options))
.compile();
testForR8(parameters.getBackend())