diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassAttributeRecord.java b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassAttributeRecord.java
index 30564d9..95b21e0 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassAttributeRecord.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassAttributeRecord.java
@@ -17,7 +17,6 @@
 package com.google.devtools.build.android.desugar.langmodel;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static java.util.stream.Collectors.toMap;
 
 import com.google.common.collect.ImmutableSet;
 import java.util.HashMap;
@@ -71,14 +70,6 @@
 
   @Override
   public ClassAttributeRecord acceptTypeMapper(TypeMapper typeMapper) {
-    return new ClassAttributeRecord(
-        this.record.values().stream()
-            .map(attr -> attr.acceptTypeMapper(typeMapper))
-            .collect(
-                toMap(
-                    ClassAttributes::classBinaryName,
-                    attr -> attr,
-                    (prev, next) -> next,
-                    HashMap::new)));
+    return new ClassAttributeRecord(typeMapper.mapMutable(record));
   }
 }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberRecord.java b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberRecord.java
index 94dfd4b..28786ae 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberRecord.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberRecord.java
@@ -17,7 +17,6 @@
 package com.google.devtools.build.android.desugar.langmodel;
 
 import static com.google.common.collect.ImmutableList.toImmutableList;
-import static java.util.stream.Collectors.toMap;
 
 import com.google.common.collect.ImmutableList;
 import java.util.LinkedHashMap;
@@ -127,8 +126,6 @@
 
   @Override
   public ClassMemberRecord acceptTypeMapper(TypeMapper typeMapper) {
-    return new ClassMemberRecord(
-        reasons.keySet().stream()
-            .collect(toMap(key -> key.acceptTypeMapper(typeMapper), reasons::get)));
+    return new ClassMemberRecord(typeMapper.mapKey(reasons));
   }
 }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
index 43133f8..8830963 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
@@ -16,7 +16,6 @@
 
 package com.google.devtools.build.android.desugar.langmodel;
 
-import static java.util.stream.Collectors.toCollection;
 
 import com.google.common.collect.ConcurrentHashMultiset;
 
@@ -42,9 +41,6 @@
 
   @Override
   public ClassMemberUseCounter acceptTypeMapper(TypeMapper typeMapper) {
-    return new ClassMemberUseCounter(
-        memberUseCounter.stream()
-            .map(memberUse -> memberUse.acceptTypeMapper(typeMapper))
-            .collect(toCollection(ConcurrentHashMultiset::create)));
+    return new ClassMemberUseCounter(typeMapper.map(memberUseCounter));
   }
 }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/TypeMapper.java b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/TypeMapper.java
index 188c7f3..25ecee2 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/TypeMapper.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/TypeMapper.java
@@ -19,10 +19,15 @@
 import static com.google.common.collect.ImmutableList.toImmutableList;
 import static com.google.common.collect.ImmutableMap.toImmutableMap;
 import static com.google.common.collect.ImmutableSet.toImmutableSet;
+import static java.util.stream.Collectors.toCollection;
+import static java.util.stream.Collectors.toMap;
 
+import com.google.common.collect.ConcurrentHashMultiset;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.function.Function;
 import org.objectweb.asm.commons.Remapper;
 
@@ -53,6 +58,13 @@
     return mappableTypes.stream().map(e -> e.acceptTypeMapper(this)).collect(toImmutableSet());
   }
 
+  public <E extends TypeMappable<E>> ConcurrentHashMultiset<E> map(
+      ConcurrentHashMultiset<E> mappableTypes) {
+    return mappableTypes.stream()
+        .map(e -> e.acceptTypeMapper(this))
+        .collect(toCollection(ConcurrentHashMultiset::create));
+  }
+
   public <K extends TypeMappable<K>, V extends TypeMappable<V>> ImmutableMap<K, V> map(
       ImmutableMap<K, V> mappableTypes) {
     return mappableTypes.entrySet().stream()
@@ -60,4 +72,33 @@
             toImmutableMap(
                 e -> e.getKey().acceptTypeMapper(this), e -> e.getValue().acceptTypeMapper(this)));
   }
+
+  // TODO(b/149403079): Remove this method once the map collection used by referencing classes have
+  // been migrated to immutable.
+  public <K extends TypeMappable<? extends K>, V extends TypeMappable<V>> Map<K, V> mapMutable(
+      Map<K, V> mappableTypes) {
+    return mappableTypes.entrySet().stream()
+        .collect(
+            toMap(
+                e -> e.getKey().acceptTypeMapper(this),
+                e -> e.getValue().acceptTypeMapper(this),
+                (prev, next) -> next,
+                HashMap::new));
+  }
+
+  public <K extends TypeMappable<? extends K>, V> ImmutableMap<K, V> mapKey(
+      ImmutableMap<K, V> mappableTypes) {
+    return mappableTypes.entrySet().stream()
+        .collect(toImmutableMap(e -> e.getKey().acceptTypeMapper(this), e -> e.getValue()));
+  }
+
+  public <K extends TypeMappable<? extends K>, V> Map<K, V> mapKey(Map<K, V> mappableTypes) {
+    return mappableTypes.entrySet().stream()
+        .collect(
+            toMap(
+                e -> e.getKey().acceptTypeMapper(this),
+                e -> e.getValue(),
+                (prev, next) -> next,
+                HashMap::new));
+  }
 }
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/nest/NestDigest.java b/src/tools/android/java/com/google/devtools/build/android/desugar/nest/NestDigest.java
index 71e7141..9d983f2 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/nest/NestDigest.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/nest/NestDigest.java
@@ -16,9 +16,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.ImmutableList.toImmutableList;
-import static com.google.common.collect.ImmutableMap.toImmutableMap;
 import static com.google.devtools.build.android.desugar.langmodel.LangModelConstants.NEST_COMPANION_CLASS_SIMPLE_NAME;
-import static java.util.stream.Collectors.toMap;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -205,16 +203,7 @@
     return new NestDigest(
         classMemberRecord.acceptTypeMapper(typeMapper),
         classAttributeRecord.acceptTypeMapper(typeMapper),
-        nestCompanionToHostMap.keySet().stream()
-            .collect(
-                toMap(
-                    companion -> companion.acceptTypeMapper(typeMapper),
-                    companion ->
-                        nestCompanionToHostMap.get(companion).acceptTypeMapper(typeMapper))),
-        companionWriters.keySet().stream()
-            .collect(
-                toImmutableMap(
-                    nestHost -> nestHost.acceptTypeMapper(typeMapper),
-                    nestHost -> new ClassWriter(ClassWriter.COMPUTE_MAXS))));
+        typeMapper.mapMutable(nestCompanionToHostMap),
+        typeMapper.mapKey(companionWriters));
   }
 }
