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())