Replace ClassMemberUseCounter backing implementation with ConcurrentHashMultiset
- Per:[]
- Original Type: Map<Key, AtomicInteger>: You do not need a reference to an AtomicInteger; only int values that are always positive and less than 2^31
PiperOrigin-RevId: 294116974
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
index d033715..fe28295 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
@@ -21,6 +21,7 @@
import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -70,7 +71,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
@@ -399,7 +399,7 @@
private final LambdaClassMaker lambdas;
private final GeneratedClassStore store = new GeneratedClassStore();
private final ClassMemberUseCounter classMemberUseCounter =
- new ClassMemberUseCounter(new ConcurrentHashMap<>());
+ new ClassMemberUseCounter(ConcurrentHashMultiset.create());
private final Set<String> visitedExceptionTypes = new LinkedHashSet<>();
/** The counter to record the times of try-with-resources desugaring is invoked. */
private final AtomicInteger numOfTryWithResourcesInvoked = new AtomicInteger();
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 ae4051b..43133f8 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,36 +16,35 @@
package com.google.devtools.build.android.desugar.langmodel;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.LongAdder;
-import java.util.stream.Collectors;
+import static java.util.stream.Collectors.toCollection;
+
+import com.google.common.collect.ConcurrentHashMultiset;
/** The counter used to track a class member use. */
public final class ClassMemberUseCounter implements TypeMappable<ClassMemberUseCounter> {
/** Tracks a class member with its associated count. */
- private final ConcurrentMap<ClassMemberUse, LongAdder> memberUseCounter;
+ private final ConcurrentHashMultiset<ClassMemberUse> memberUseCounter;
- public ClassMemberUseCounter(ConcurrentMap<ClassMemberUse, LongAdder> memberUseCounter) {
+ public ClassMemberUseCounter(ConcurrentHashMultiset<ClassMemberUse> memberUseCounter) {
this.memberUseCounter = memberUseCounter;
}
/** Increases the member use count by one when an member access is encountered. */
- public void incrementMemberUseCount(ClassMemberUse classMemberUse) {
- memberUseCounter.computeIfAbsent(classMemberUse, k -> new LongAdder()).increment();
+ public boolean incrementMemberUseCount(ClassMemberUse classMemberUse) {
+ return memberUseCounter.add(classMemberUse);
}
/** Retrieves the total use count of a given class member. */
public long getMemberUseCount(ClassMemberUse memberKey) {
- return memberUseCounter.getOrDefault(memberKey, new LongAdder()).longValue();
+ return memberUseCounter.count(memberKey);
}
@Override
public ClassMemberUseCounter acceptTypeMapper(TypeMapper typeMapper) {
return new ClassMemberUseCounter(
- memberUseCounter.keySet().stream()
- .collect(
- Collectors.toConcurrentMap(
- memberUse -> memberUse.acceptTypeMapper(typeMapper), memberUseCounter::get)));
+ memberUseCounter.stream()
+ .map(memberUse -> memberUse.acceptTypeMapper(typeMapper))
+ .collect(toCollection(ConcurrentHashMultiset::create)));
}
}