Use ConcurrentHashMap instead of Cache where we aren't using any of the
LoadingCache's capabilities. According to profiles, using ConcurrentHashMap is
about 3x more efficient.
RELNOTES: None
PiperOrigin-RevId: 208897706
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
index 2c9e074..0706621 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.syntax;
import com.google.common.base.Preconditions;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
import com.google.common.primitives.Booleans;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -27,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Nullable;
/**
@@ -39,7 +38,8 @@
// represented by that string. For example, "None" -> Runtime.NONE. This cache is manually
// maintained (instead of using, for example, a LoadingCache), as default values may sometimes
// be recursively requested.
- private static final Cache<String, Object> defaultValueCache = CacheBuilder.newBuilder().build();
+ private static final ConcurrentHashMap<String, Object> defaultValueCache =
+ new ConcurrentHashMap<>();
/**
* Extracts a {@code FunctionSignature.WithValues<Object, SkylarkType>} from a
@@ -243,7 +243,7 @@
return Runtime.NONE;
} else {
try {
- Object defaultValue = defaultValueCache.getIfPresent(paramDefaultValue);
+ Object defaultValue = defaultValueCache.get(paramDefaultValue);
if (defaultValue != null) {
return defaultValue;
}