Account for multiple naming lenses in cf application writer

Bug: b/393202425
Change-Id: I3e30f8f301c3e1d18799d9743e10842d381084b5
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/PrefixRewritingNamingLens.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/PrefixRewritingNamingLens.java
index 77e22b9..91fd4a5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/PrefixRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/PrefixRewritingNamingLens.java
@@ -116,4 +116,9 @@
   public boolean verifyRenamingConsistentWithResolution(DexMethod item) {
     return namingLens.verifyRenamingConsistentWithResolution(item);
   }
+
+  @Override
+  public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+    return namingLens;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationClassWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationClassWriter.java
index 2399f9f..bb33502 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationClassWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationClassWriter.java
@@ -94,7 +94,7 @@
     // For "pass through" classes which has already been library desugared use the identity lens.
     this.namingLens =
         appView.isAlreadyLibraryDesugared(clazz)
-            ? NamingLens.getIdentityLens()
+            ? appView.getNamingLens().withoutDesugaredLibraryPrefixRewritingNamingLens()
             : appView.getNamingLens();
     this.options = appView.options();
   }
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
index d6028ef..64fb5dd 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
@@ -148,6 +148,11 @@
   }
 
   @Override
+  public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+    return this;
+  }
+
+  @Override
   public String toString() {
     StringBuilder builder = new StringBuilder();
     renaming.forEach(
diff --git a/src/main/java/com/android/tools/r8/naming/NamingLens.java b/src/main/java/com/android/tools/r8/naming/NamingLens.java
index 3e551cf..bc8b12f 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingLens.java
@@ -184,6 +184,8 @@
     return true;
   }
 
+  public abstract NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens();
+
   public abstract static class NonIdentityNamingLens extends NamingLens {
 
     private final DexItemFactory dexItemFactory;
@@ -251,5 +253,10 @@
     public boolean verifyRenamingConsistentWithResolution(DexMethod item) {
       return true;
     }
+
+    @Override
+    public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+      return this;
+    }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index d2f2e8a..78cabaa 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -559,7 +559,6 @@
     private final Set<DexReference> unmappedReferences;
     private final Map<DexString, DexType> classRenamingsMappingToDifferentName;
 
-    @SuppressWarnings("ReferenceEquality")
     ProguardMapMinifiedRenaming(
         AppView<? extends AppInfoWithClassHierarchy> appView,
         ClassRenaming classRenaming,
@@ -571,7 +570,7 @@
       classRenamingsMappingToDifferentName = new HashMap<>();
       classRenaming.classRenaming.forEach(
           (type, dexString) -> {
-            if (type.descriptor != dexString) {
+            if (type.getDescriptor().isNotIdenticalTo(dexString)) {
               classRenamingsMappingToDifferentName.put(dexString, type);
             }
           });
diff --git a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
index 517377d..f946bd6 100644
--- a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
@@ -18,7 +18,6 @@
 // Naming lens for rewriting java.lang.Record to the internal RecordTag type.
 public class RecordRewritingNamingLens extends NonIdentityNamingLens {
 
-  private final DexItemFactory factory;
   private final NamingLens namingLens;
 
   public static void commitRecordRewritingNamingLens(AppView<?> appView) {
@@ -36,9 +35,12 @@
   }
 
   public RecordRewritingNamingLens(AppView<?> appView) {
-    super(appView.dexItemFactory());
-    this.factory = appView.dexItemFactory();
-    this.namingLens = appView.getNamingLens();
+    this(appView.dexItemFactory(), appView.getNamingLens());
+  }
+
+  public RecordRewritingNamingLens(DexItemFactory factory, NamingLens namingLens) {
+    super(factory);
+    this.namingLens = namingLens;
   }
 
   private boolean isRenamed(DexType type) {
@@ -47,8 +49,8 @@
 
   @SuppressWarnings("ReferenceEquality")
   private DexString getRenaming(DexType type) {
-    if (type == factory.recordType) {
-      return factory.recordTagType.descriptor;
+    if (type == dexItemFactory().recordType) {
+      return dexItemFactory().recordTagType.descriptor;
     }
     return null;
   }
@@ -96,4 +98,12 @@
   public boolean verifyRenamingConsistentWithResolution(DexMethod item) {
     return namingLens.verifyRenamingConsistentWithResolution(item);
   }
+
+  @Override
+  public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+    NamingLens newParent = namingLens.withoutDesugaredLibraryPrefixRewritingNamingLens();
+    return newParent != namingLens
+        ? new RecordRewritingNamingLens(dexItemFactory(), newParent)
+        : this;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
index b72bb6b..13c0087 100644
--- a/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
@@ -20,7 +20,6 @@
 // to com.android.tools.r8.DesugarMethodHandlesLookup.
 public class VarHandleDesugaringRewritingNamingLens extends NonIdentityNamingLens {
 
-  private final DexItemFactory factory;
   private final NamingLens namingLens;
   private final Map<DexType, DexString> mapping;
 
@@ -93,9 +92,13 @@
 
   private VarHandleDesugaringRewritingNamingLens(
       AppView<?> appView, Map<DexType, DexString> mapping) {
-    super(appView.dexItemFactory());
-    this.factory = appView.dexItemFactory();
-    this.namingLens = appView.getNamingLens();
+    this(appView.dexItemFactory(), appView.getNamingLens(), mapping);
+  }
+
+  private VarHandleDesugaringRewritingNamingLens(
+      DexItemFactory factory, NamingLens namingLens, Map<DexType, DexString> mapping) {
+    super(factory);
+    this.namingLens = namingLens;
     this.mapping = mapping;
   }
 
@@ -105,8 +108,8 @@
 
   @SuppressWarnings("ReferenceEquality")
   private DexString getRenaming(DexType type) {
-    assert type != factory.desugarMethodHandlesLookupType;
-    assert type != factory.desugarVarHandleType;
+    assert type != dexItemFactory().desugarMethodHandlesLookupType;
+    assert type != dexItemFactory().desugarVarHandleType;
     return mapping.get(type);
   }
 
@@ -153,4 +156,12 @@
   public boolean verifyRenamingConsistentWithResolution(DexMethod item) {
     return namingLens.verifyRenamingConsistentWithResolution(item);
   }
+
+  @Override
+  public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+    NamingLens newParent = namingLens.withoutDesugaredLibraryPrefixRewritingNamingLens();
+    return newParent != namingLens
+        ? new VarHandleDesugaringRewritingNamingLens(dexItemFactory(), newParent, mapping)
+        : this;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/relocator/RelocatorMapping.java b/src/main/java/com/android/tools/r8/relocator/RelocatorMapping.java
index 5925d3f..fe09d4b 100644
--- a/src/main/java/com/android/tools/r8/relocator/RelocatorMapping.java
+++ b/src/main/java/com/android/tools/r8/relocator/RelocatorMapping.java
@@ -203,5 +203,10 @@
     public boolean verifyRenamingConsistentWithResolution(DexMethod item) {
       return true;
     }
+
+    @Override
+    public NamingLens withoutDesugaredLibraryPrefixRewritingNamingLens() {
+      return this;
+    }
   }
 }