Add more collection type mapping type to TypeMapper
#java11 #desugar
PiperOrigin-RevId: 294734775
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));
}
}